А.М. Вендров - Объектно-ориентированный анализ и проектирование (1158627), страница 5
Текст из файла (страница 5)
В разделе "Теория классификации"Британской Энциклопедии сказано следующее:20"В постижении реального мира люди пользуются тремя методами,организующими их мышление:(1) разделение окружающей действительности на конкретные объектыи их атрибуты - например, когда явно различаются понятия дерева и еговысоты или пространственного расположения по отношению к другимобъектам.(2) различие между целыми объектами и их составными частями например, ветви являются составными частями дерева.(3) формирование и выделение различий между различными классамиобъектов - например, между классом всех деревьев и классом всехкамней."Понятие "объект" впервые было использовано около 30 лет назад втехнических средствах при попытках отойти от традиционнойархитектуры фон Неймана и преодолеть барьер между высоким уровнемпрограммных абстракций и низким уровнем абстрагирования на уровнекомпьютеров. С объектно-ориентированной архитектурой также тесносвязаны объектно-ориентированные операционные системы. Однаконаиболее значительный вклад в объектный подход был внесен объектнымии объектно-ориентированными языками программирования: Simula (1967),Smalltalk (1970-е), C++ (1980-е) и языком моделирования UML (1990-е).
Наобъектный подход оказали влияние также развивавшиеся достаточнонезависимо методы моделирования данных, в особенности модель"сущность-связь".1.3.1. Основные принципы построения объектной моделиКонцептуальной основой ООП является объектная модель.Основными принципами ее построения являются [2]:• абстрагирование (abstraction);• инкапсуляция (encapsulation);• модульность (modularity);• иерархия (hierarchy).Абстрагирование - это выделение наиболее важных, существенныххарактеристик некоторого объекта, которые отличают его от всех другихвидов объектов и, таким образом, четко определяют его концептуальныеграницы с точки зрения дальнейшего рассмотрения и анализа, иигнорированиеменееважныхилинезначительныхдеталей.Абстрагированиепозволяетуправлятьсложностьюсистемы,концентрируясь на существенных свойствах объекта.
Абстрагированиеконцентрирует внимание на внешних особенностях объекта и позволяетотделить самые существенные особенности его поведения от деталей ихреализации. Выбор правильного набора абстракций для заданнойпредметной области представляет собой главную задачу объектно21ориентированного проектирования. Абстракция зависит от предметнойобласти и точки зрения - то, что важно в одном контексте, может быть неважно в другом.
Объекты и классы - основные абстракции предметнойобласти.Инкапсуляция - физическая локализация свойств и поведения врамках единственной абстракции (рассматриваемой как "черный ящик"),скрывающая их реализацию за общедоступным интерфейсом.Инкапсуляция - это процесс отделения друг от друга отдельныхэлементов объекта, определяющих его устройство и поведение.Инкапсуляция служит для того, чтобы изолировать интерфейс объекта,отражающий его внешнее поведение, от внутренней реализации объекта.Объектный подход предполагает, что собственные ресурсы, которымимогут манипулировать только операции самого объекта, скрыты отвнешнейсреды.Абстрагированиеиинкапсуляцияявляютсявзаимодополняющими: абстрагирование фокусирует внимание на внешнихособенностях объекта, а инкапсуляция (или иначе ограничение доступа) непозволяет объектам-пользователям различать внутреннее устройствообъекта.По-другому инкапсуляцию можно описать, сказав, что приложениеразделяется на небольшие фрагменты связанной функциональности.Допустим, в банковской системе имеется информация, касающаясябанковского счета, такая как номер счета, баланс, имя и адрес еговладельца, тип счета, начисляемые на него проценты и дата открытия.
Сосчетом также связаны определенные действия: открыть, закрыть его,положить или снять некоторую сумму денег, а также изменить тип,владельца или адрес. Вся эта информация и действия (поведение)совместно инкапсулируются в объект "счет". В результате все изменениябанковской системы, связанные со счетами, могут быть реализованы водном только объекте "счет".Еще одним преимуществом инкапсуляции является ограничениепоследствий изменений, вносимых в систему.
Применим принципинкапсуляции к. Допустим, управление банка постановило, что есликлиент имеет кредитный счет, то этот кредит может быть использован каковердрафт на его счете "до востребования". В неинкапсулированнойсистеме модификация начинается с узконаправленного анализа изменений,которые необходимо будет внести в систему. Как правило, неизвестно, гдев системе находятся все обращения к функции снятия со счета, поэтомуприходится искать их везде. После того, как они найдены, нужноосуществить в них некоторые изменения, чтобы реализовать новыетребования. Если работать тщательно, то, вероятно, можно будетобнаружить около 80% случаев использования данной функции.
Винкапсулированной системе не требуется осуществлять такой детальныйанализ. Достаточно посмотреть на модель системы и определить, гдеинкапсулировано соответствующее поведение (действие снятия со счета).22После его локализации остается внести требуемые поправки один разтолько в этом объекте, и задача выполнена.Инкапсуляция подобна понятию сокрытия информации (informationhiding). Это возможность скрывать многочисленные детали объекта отвнешнего мира. Внешний мир объекта - это все, что находится вне его,включая остальную часть системы.
Сокрытие информации предоставляетто же преимущество, что и инкапсуляция - гибкость.Модульность - это свойство системы, связанное с возможностью еедекомпозиции на ряд внутренне сильно сцепленных, но слабо связанныхмежду собой подсистем (модулей). Модульность снижает сложностьсистемы, позволяя выполнять независимую разработку отдельныхмодулей.Инкапсуляция и модульность создают барьеры между абстракциями.Иерархия - это ранжированная или упорядоченная системаабстракций, расположение их по уровням.
Основными видамииерархических структур применительно к сложным системам являютсяструктура классов (иерархия по номенклатуре) и структура объектов(иерархия по составу). Примерами иерархии классов являются простое имножественное наследование (один класс использует структурную илифункциональную часть соответственно одного или нескольких другихклассов), а иерархии объектов - агрегация.1.3.2. Основные элементы объектной моделиК основным понятиям объектно-ориентированного подхода(элементам объектной модели) относятся:• объект;• класс;• атрибут;• операция;• полиморфизм (интерфейс);• компонент;• связи.Объект определяется как осязаемая сущность (tangible entity) предмет или явление (процесс), имеющие четко определяемое поведение.Объект может представлять собой абстракцию некоторой сущностипредметной области (объект реального мира) или программной системы(архитектурный объект).
Любой объект обладает состоянием (state),поведением (behavior) и индивидуальностью (identity).Состояние объекта - одно из возможных условий, в которых онможет существовать, оно изменяется со временем. Состояние объектахарактеризуется перечнем всех возможных (статических) свойств данного23объекта и текущими значениями (динамическими) каждого из этихсвойств. Состояние объекта определяется значениями его свойств(атрибутов) и связями с другими объектами.Поведение определяет действия объекта и его реакцию на запросы отдругих объектов.
Поведение характеризует воздействие объекта на другиеобъекты и, наоборот, с точки зрения изменения состояния этих объектов ипередачи сообщений. Иначе говоря, поведение объекта полностьюопределяется его действиями. Поведение представляется с помощьюнабора сообщений, воспринимаемых объектом (операций, которые можетвыполнять объект).Каждыйобъектобладаетуникальнойиндивидуальностью.Индивидуальность - это свойства объекта, отличающие его от всех другихобъектов.Структура и поведение схожих объектов определяют общий для нихкласс.
Термины "экземпляр класса" и "объект" являются эквивалентными.Графическое представление объектов в языке моделирования UML(который будет рассматриваться в подразд. 1.4) показано на рис. 1.1.Только имя объектаСлужащий ПетровТолько имя класса: СлужащийСлужащий Петров :СлужащийИмя объекта и имя классаРис. 1.1. Графическое представление объектовКласс - это множество объектов, связанных общностью свойств,поведения, связей и семантики. Класс инкапсулирует (объединяет) в себеданные (атрибуты) и поведение (операции).
Класс является абстрактнымопределением объекта и служит в качестве шаблона для созданияобъектов. Графическое представление класса в языке UML показано нарис. 1.2. Класс изображается в виде прямоугольника, разделенного на три24части. В первой содержится имя класса, во второй - его атрибуты. Впоследней части содержатся операции класса, отражающие его поведение(действия, выполняемые классом).Любой объект является экземпляром (instance) класса. Определениеклассов и объектов - одна из самых сложных задач объектноориентированного проектирования.Рис. 1.2. Графическое представление классаАтрибут - поименованное свойство класса, определяющее диапазондопустимых значений, которые могут принимать экземпляры данногосвойства.
Атрибут - это элемент информации, связанный с классом.Например, у класса Company (Компания) могут быть атрибуты Name(Название), Address (Адрес) и NumberOfEmployees (Число служащих).Так как атрибуты содержатся внутри класса, они скрыты от другихклассов. В связи с этим может понадобиться указать, какие классы имеютправо читать и изменять атрибуты. Это свойство называется видимостьюатрибута (attribute visibility).У атрибута можно определить три возможных значения этогопараметра.
Рассмотрим каждый из них в контексте примера (рис. 1.1).Пусть имеется класс Employee с атрибутом Address и класс Company:Public (общий, открытый). Это значение видимости предполагает,что атрибут будет виден всеми остальными классами. Любой класс можетпросмотреть или изменить значение атрибута. В таком случае классCompany может изменить значение атрибута Address класса Employee. Всоответствии с нотацией UML общему атрибуту предшествует знак "+".Private (закрытый, секретный). Соответствующий атрибут не виденникаким другим классом. Класс Employee будет знать значение атрибута25Address и сможет изменять его, но класс Company не сможет его ниувидеть, ни редактировать.
Если это понадобится, он должен попроситькласс Employee просмотреть или изменить значение этого атрибута, чтообычно делается с помощью общих операций. Закрытый атрибутобозначается знаком "-" в соответствии с нотацией UML.Protected (защищенный). Такой атрибут доступен только самомуклассу и его потомкам в иерархии наследования. Допустим, имеется дваразличных типа сотрудников - с почасовой оплатой и на окладе. Такимобразом, потомками класса Employee будут два класса - HourlyEmp иSalariedEmp. Защищенный атрибут Address можно просмотреть илиизменить из классов Employee, HourlyEmp и SalariedEmp, но не из классаCompany.
Нотация UML для защищенного атрибута - это знак "#".В общем случае, атрибуты рекомендуется делать закрытыми илизащищенными. При этом удается избежать ситуации, когда значениеатрибута изменяется всеми классами системы. Вместо этого логикаизменения атрибута будет заключена в том же классе, что и сам этотатрибут.Определенное воздействие одного объекта на другой с целью вызватьсоответствующую реакцию называется операцией. Операция - этореализация услуги, которую можно запросить у любого объекта данногокласса.Операции отражают поведение объекта. Операция-запрос не изменяетсостояния объекта.