Инкапсуляция

Как уже говорилось, идентификатор объекта – это некий уникальный дескриптор, обычно адрес памяти, предоставляемый языком реализации. С этого момента будем называть эти дескрипторы объектными ссылками. В ОО анализе не надо беспокоиться об их реализации. Можно просто принять, что у каждого объекта есть уникальный идентификатор, управляемый технологией реализации. Возможно, при проектировании понадобится рассмотреть реализацию объектных ссылок.
Это необходимо, если целевым языком является ОО язык программирования, такой как С++, который позволяет напрямую работать с определенными типами объектных ссылок, известными как указатели.
Состояние объекта – это набор значений атрибутов (в данном случае 1234567801, «Jim Arlow», 300.00) объекта в любой момент времени.
Значения некоторых атрибутов постоянны, значения других могут со временем меняться. Например, номер счета и имя останутся постоянными, а вот баланс, надеемся, будет постепенно увеличиваться!
Поскольку баланс меняется со временем, мы видим, что состояние объекта также изменяется во времени. Например, если баланс отрицательный, можно сказать, что объект находится в состоянии Overdrawn (кредит превышен). При изменении баланса из отрицательного в нулевой объект существенно меняет свою суть: переходит из состояния Overdrawn в состояние Empty (пустой). Более того, когда баланс объекта Account (счет) становится положительным, осуществляется еще один переход состояния: из Empty в InCredit (кредитоспособен). Возможны и другие переходы состояний. Фактически любой вызов операции, приводящий к изменению сути объекта, обуславливает переход состояний.
UML предоставляет мощный набор методов моделирования изменений состояния, которые называются конечными автоматами.
Поведение любого объекта – это, по существу, то, «что он может сделать» для вас. Объект предоставляет операции, перечисленные ниже.

Операция     Семантика
deposit()        Размещает некоторую сумму в объекте Account.Увеличивает значение атрибута balance.
withdraw()    Снимает некоторую сумму с Account. Уменьшает значение атрибута balance.
getOwner()    Возвращает владельца объекта Account – операция запроса.
setOwner()    Меняет владельца объекта Account

Этот набор операций определяет поведение объекта. Обратите внимаа
ние, что вызов некоторых из этих операций (deposit(), withdraw(), setOwner()) приводит к изменению значений атрибута и может генерировать переходы состояния. Операция getOwner() не меняет значения атрибута и поэтому не приводит к переходу состояния.
Инкапсуляция, или сокрытие данных, – одно из основных преимуществ ОО программирования. Она обеспечивает возможность создания более надежного и расширяемого программного обеспечения. В этом простом примере объекта Account пользователю не надо беспокоиться о структуре данных, сокрытых в объекте. Его интересует только то, что объект может сделать. Иначе говоря, ему интересны сервисы (services), предлагаемые другим объектам.

Запись опубликована в рубрике Компьютеры и интернет с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code