Теоретический материал

Основными понятиями объектно-ориентированного подхода являются объект и класс.

Объект определяется как осязаемая реальность (tangible entity), т.е. предмет или явление, имеющие четко определяемое поведение. Объект характеризуется состоянием, поведением и индивидуальностью, структура и поведение схожих объектов определяют общий для них класс. Термин «экземпляр класса» и «объект» являются эквивалентными. Состояние объекта характеризуется перечнем всех возможных (статических) свойств данного объекта и текущими (динамическими) значениями каждого из этих свойств. Поведение объекта характеризуется его воздействием на другие объекты и, наоборот, с точки зрения изменения состояния этих объектов и передачи сообщения. Иначе говоря, поведение объекта полностью определяется его действиями. Индивидуальность – это свойство объекта, отличающее его от всех других объектов.

Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называется операцией. Как правило, в объектных и объектно-ориентированных языках операции, выполняемые над данным объектом, называются методами и являются составной частью определенного класса. Класс – это множество объектов, связанных общностью структуры и поведения. Любой объект является экземпляром класса. Определение классов и объектов – одна из самых сложных задач объектно-ориентированного проектирования.

Следующая группа важных понятий объектно-ориентированного подхода составляют наследование и полиморфизм. Полиморфизм можно интерпретировать как способность класса принадлежать более чем одному типу. Наследование означает построение новых классов на основе существующих с возможностью добавления или переопределения данных и методов.

Объектно-ориентированная система изначально строится с учетом ее эволюции. Наследование и полиморфизм обеспечивают возможность определения новой функциональности классов с помощью создания производных классов – потомков базовых классов. Потомки наследуют характеристики родительских классов без изменения их первоначального описания и добавляют при необходимости собственные структурные данных и методы. Определение производных классов, при котором задаются только различия и уточнения, в огромной степени экономят время и усилия при производстве и использовании спецификаций и программного кода.

Принципиальное различие между структурами и объектно-ориентированным подходом заключается в способе декомпозиции системы. Объектно-ориентированный подход использует объектную декомпозицию, при этом статистическая структура системы описывается в терминах объектов и связей между ними, а поведение системы описывается в терминах обмена сообщениями между объектами. Каждый объект системы обладает своим собственным поведением, моделирующим поведение объекта реального мира.

Понятие «объект» впервые было использовано около 30 лет назад при попытках отойти от традиционной архитектуры фон Неймана и преодолеть барьер между высоким уровнем программных абстракций и низким уровнем абстрагирования. С объектно-ориентированной архитектурой также тесно связаны объектно-ориентированные операционные системы. Наиболее значительный вклад в объектный подход был внесен объектными и объектно-ориентированными языками программирования Simula, Smalltalk, C++, Object Pascal. На объектный подход оказали влияние также развивавшиеся достаточно независимо методы моделирования баз данных, в особенности подход сущность – связь.

Концептуальной особенностью объектно-ориентированного подхода служит объектная модель. Основными ее элементами являются абстрагирование, инкапсуляция, модульность, иерархия.

Кроме основных имеются еще три дополнительных элемента – типизация, параллелизм, устойчивость, не являющихся в отличие от основных строго обязательными.

Абстрагирование – это выделение существующих характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют его концептуальные границы для дальнейшего рассмотрения и анализа. Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности его поведения от деталей их реализации. Выбор правильного набора абстракций для заданной предметной области представляет собой главную задачу объектно-ориентированного проектирования.

Инкапсуляция – это процесс отделения друг от друга отдельных элементов объекта, определяющий его устройство и поведение. Инкапсуляция служит для того, чтобы изолировать интерфейс объекта, отражающий его внешнее поведение, от внутренней реализации объекта, отражающий его внешнее поведение, от внутренней реализации объекта. Объектный подход предполагает, что собственные ресурсы, которыми могут манипулировать только методы самого класса, скрыты от внешней среды. Абстрагирование и инкапсуляция являются взаимодополняющими операциями: абстрагирование фокусирует внимание на внешних особенностях объекта, а инкапсуляция не позволяет объектам пользователя видеть внутреннее устройство объекта.

Модульность – это свойство системы, обусловленное возможностью ее декомпозиции на ряд внутренних связей, но слабо объединенных между собой модулей. Инкапсуляция и модульность создают барьеры между абстракциями.

Иерархия – это ранжированная, или упорядоченная, система абстракции, расположение их по уровням. Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу). Примерами иерархии классов являются простое и множественное наследование (один класс использует структурную или функциональную часть соответственно одного или нескольких других классов), а примером иерархии объекта – агрегация.

Типизация – это ограничение, накладываемое на класс объектов и препятствующее взаимозаменяемости различных классов (или сильно сужающее ее возможность). Типизация позволяет защититься от использования объектов одно класса вместо другого или, по крайне мере, управлять такими использованиями.

Параллелизм – это свойство объектов находиться в активном или пассивном состоянии и различать активные и пассивные объекты между собой.

Устойчивость – это свойство объекта существовать во времени (независимо от процесса, породивший этот объект) и/или в пространстве (при перемещении объекта из адресного пространства, в котором он был задан).

Важным качеством объектно-ориентированного подхода является согласованность моделей деятельности организации и моделей проектируемой системы, начиная со стадии формирования требований и до стадии реализации. Требование согласованности моделей выполнения благодаря возможности применения абстрагирования, модульности, полиморфизма на всех стадиях разработки. Модели ранних стадий могут быть непосредственно подвергнуты сравнению с моделями реализации. По объектным моделям может быть прослежено отображение реальных сущностей моделируемой предметной области (организации) в объекты и классы информационной системы.

Большинство существующих методов объектно-ориентированного анализа и проектирования (ООАП) включают в себя как язык моделирования, так и описание процесса моделирования. Язык моделирования – это нотация (в основном графическая), которая используется методом для описания проекта. Графическая нотация представляет собой совокупность графических объектов, которые используются в моделях; она является синтаксисом языка моделирования. Например, нотация диаграммы классов определяет, каким образом представляются такие элементы и понятия, как класс, ассоциация, множественность. Процесс – это описание шагов, которые необходимо выполнить при разработке проекта.

Унифицированный язык моделирования UML (Unified Modeling Language) – это преемник того поколения методов ООАП, которые появились в конце 1980-х – начале 1990-х годов. Создание UML (Unified Modeling Language) – это преемник того поколения методов ООАП, которые появились в конце 1980-ых – начале 1990-ых гг. Создание UML фактически началось в конце 1994 года, когда Гради Буч и Джеймс Рамбо приступили к работе по объединению методов Booch и OMT (Object Modeling Technique) с помощью А. Джекобсона и под эгидой компании Rational Software. К концу 1995 г. Они создали первую спецификацию объединенного метода, названного ими Unified Method, версия 0.8. Тогда же, в 1995 г., к ним присоединился создатель метода OOSE (Object-Oriented Software Engineering) Ивар Якобсон. Таким образом, UML является прямым объединением и унификацией методов Г. Буча, Д. Рамбо, А. Джекобсона и И. Якобсона, однако дополняет их новыми возможностями. Главными в разработке UML были следующие цели:

- предоставить пользователям готовый к применению выразительный язык визуального моделирования, позволяющий разработать осмысленные модели и обмениваться ими;

- предусмотреть механизмы расширения и специализации для более точного представления моделей систем в конкретной предметной области;

- обеспечить независимость от конкретных языков программирования и процессов разработки;

- обеспечить формальную основу для понимания этого языка моделирования (язык должен быть одновременно точным и доступным для понимания, без лишнего формализма);

- стимулировать рост рынка объектно-ориентированных инструментальных средств;

- интегрировать лучший практический опыт.