Модульность - это свойство системы, связанное с возможностью ее декомпозиции на ряд внутренне связных, но слабо связанных между собой модулей. Инкапсуляция и модульность создают барьеры между абстракциями.
Иерархия - это ранжированная или упорядоченная система абстракций, расположение их по уровням. Основными видами иерархических структур применительно к сложным системам являются структура классов (иерархия по номенклатуре) и структура объектов (иерархия по составу). Примерами иерархии классов являются простое и множественное наследование (один класс использует структурную или функциональную часть соответственно одного или нескольких других классов), а иерархии объектов - агрегация.
Типизация - это ограничение, накладываемое на класс объектов и препятствующее взаимозаменяемости различных классов (или сильно сужающее ее возможность). Типизация позволяет защититься от использования объектов одного класса вместо другого или, по крайней мере, управлять таким использованием.
Параллелизм - свойство объектов находиться в активном или пассивном состоянии и различать активные и пассивные объекты между собой.
Устойчивость - свойство объекта существовать во времени (вне зависимости
от процесса, породившего данный объект) и/или в пространстве (при перемещении
объекта из адресного пространства, в котором он был создан).
Объект определяется как осязаемая реальность (tangible entity) - предмет или явление, имеющее четко определяемое поведение. Объект обладает состоянием, поведением и индивидуальностью; структура и поведение схожих объектов определяют общий для них класс. Термины "экземпляр класса" и "объект'' являются эквивалентными. Состояние объекта характеризуется перечнем всех возможных (статических) свойств данного объекта и текущими значениями (динамическими) каждого из этих свойств. Поведение характеризует воздействие объекта на другие объекты и наоборот относительно изменения состояния этих объектов и передачи сообщений. Иначе говоря, поведение объекта полностью определяется его действиями. Индивидуальность - это свойства объекта, отличающие его от всех других объектов.
Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называется операцией. Как правило, в объектных и объектно-ориентированных языках операции, выполняемые над данным объектом, называются методами и являются составной частью определения класса.
Класс - это множество объектов, связанных общностью структуры и
поведения. Любой объект является экземпляром класса. Определение классов и
объектов - одна из самых сложных задач объектно-ориентированного
проектирования.
Следующую группу важных понятий объектного подхода составляют наследование и полиморфизм. Понятие полиморфизма может быть интерпретировано как способность класса принадлежать более чем одному типу.
Наследование означает построение новых классов на основе существующих с возможностью добавления или переопределения данных и методов.
Объектно-ориентированная система изначально строится с учетом ее эволюции. Наследование и полиморфизм обеспечивают возможность определения новой функциональности классов с помощью создания производных классов - потомков базовых классов. Потомки наследуют характеристики родительских классов без изменения их первоначального описания и добавляют при необходимости собственные структуры данных и методы. Определение производных классов, при котором задаются только различия или уточнения, в огромной степени экономит время и усилия при производстве и использовании спецификаций и программного кода.
Важным качеством объектного подхода является согласованность моделей
деятельности организации и моделей проектируемой системы от стадии формирования
требований до стадии реализации. Требование согласованности моделей выполняется
благодаря возможности применения абстрагирования, модульности, полиморфизма на
всех стадиях разработки. Модели ранних стадий могут быть непосредственно
подвергнуты сравнению с моделями реализации. По объектным моделям может быть
прослежено отображение реальных сущностей моделируемой предметной области
(организации) в объекты и классы информационной системы.
Большинство существующих методов объектно-ориентированного анализа и проектирования (ООАП) включают как язык моделирования, так и описание процесса моделирования. Язык моделирования - это нотация (в основном графическая), которая используется методом для писания проектов. Нотация представляет собой совокупность графических объектов, которые используются в моделях; она является синтаксисом языка моделирования. Например, нотация диаграммы классов определяет, каким образом представляются такие элементы и понятия, как класс, ассоциация и множественность. Процесс - это описание шагов, которые необходимо выполнить при разработке проекта.
Унифицированный язык моделирования UML (Unified Modeling Language) - это преемник того поколения методов ООАП, которые появились в конце 80-х и начале 90-х гг. Создание UML фактически началось в конце 1994 г., когда Гради Буч и Джеймс Рамбо начали работу по объединению методов Booch и ОМТ (Object Modeling Technique) под эгидой компании Rational Software. К концу 1995 г. они создали первую спецификацию объединенного метода, названного ими Unified Method, версия 0.8. Тогда же, в 1995 г., к ним присоединился создатель метода OOSE (Object-oriented Software Engineering) Ивар Якобсон. Таким образом, UML является прямым объединением и унификацией методов Буча, Рамбо и Якобсона, однако дополняет их новыми возможностями. Главными в разработке UML были следующие цели:
- предоставить пользователям готовый к использованию выразительный язык визуального моделирования, позволяющий разрабатывать осмысленные модели и обмениваться ими;
- предусмотреть механизмы расширяемости и специализации для расширения базовых концепций;
обеспечить независимость от конкретных языков программирования и процессов разработки;
обеспечить формальную основу для понимания этого языка моделирования (язык должен быть одновременно точным и доступным для понимания, без лишнего формализма).
Унифицированный язык моделирования (UML) является стандартным инструментом для создания "чертежей" программного обеспечения. С помощью UML можно визуализировать, специфицировать, конструировать и документировать артефакты программных систем.пригоден для моделирования любых систем: от информационных систем масштаба предприятия до распределенных Web-приложений и даже встроенных систем реального времени. Это очень выразительный язык, позволяющий рассмотреть систему со всех точек зрения, имеющих отношение к ее разработке и последующему развертыванию. Несмотря на обилие выразительных возможностей, этот язык прост для понимания и использования. Изучение UML удобнее всего начать с его концептуальной модели, которая включает в себя три основных элемента: базовые строительные блоки, правила, определяющие, как эти блоки могут сочетаться между собой, и некоторые общие механизмы языка.
Несмотря на свои достоинства, UML - это всего лишь язык; он является одной из составляющих процесса разработки программного обеспечения, и не более того. Хотя UML не зависит от моделируемой реальности, лучше всего применять его, когда процесс моделирования основан на рассмотрении прецедентов использования, является итеративным и пошаговым, а сама система имеет четко выраженную архитектуру.
Язык состоит из словаря и правил, позволяющих комбинировать входящие в него слова и получать осмысленные конструкции. В языке моделирования словарь и правила ориентированы на концептуальное и физическое представление системы.
Моделирование необходимо для понимания системы. При этом единственной модели никогда не бывает достаточно.
Словарь и правила такого языка, как UML, объясняют, как создавать и читать хорошо определенные модели, но ничего не сообщают о том, какие модели и в каких случаях нужно создавать. Это задача всего процесса разработки программного обеспечения. Хорошо организованный процесс должен подсказать, какие требуются артефакты, какие ресурсы необходимы для их создания, как можно использовать эти артефакты, чтобы оценить выполненную работу и управлять проектом в целом.
Язык UML предназначен прежде всего для разработки программных систем. Его использование особенно эффективно в следующих областях:
- информационные системы масштаба предприятия;
- банковские и финансовые услуги;
телекоммуникации;
транспорт;
розничная торговля;
медицинская электроника;
наука;
распределенные Web-системы.
Сфера применения UML не ограничивается моделированием программного обеспечения.
Его выразительность позволяет моделировать, например, документооборот в
юридических системах, структуру и функционирование системы обслуживания
пациентов в больницах, осуществлять проектирование аппаратных средств.
Словарь языка UML включает три вида строительных блоков: сущности; отношения; диаграммы.
Сущности - это абстракции, являющиеся основными элементами модели.
Отношения связывают различные сущности; диаграммы группируют представляющие
интерес совокупности сущностей.
В UML имеется четыре типа сущностей: структурные; поведенческие; группирующие; аннотационные.
Сущности являются основными объектно-ориентированными блоками языка. С их помощью можно создавать корректные модели.
Структурные сущности - это имена существительные в моделях на языке UML. Как правило, они представляют собой статические части модели, соответствующие концептуальным или физическим элементам системы.
Существует семь разновидностей структурных сущностей.
1. Класс (Class) - это описание совокупности объектов с общими
атрибутами, операциями, отношениями и семантикой. Класс реализует один или
несколько интерфейсов. Графически класс изображается в виде прямоугольника, в
котором обычно записаны его имя, атрибуты и операции, как показано на рисунке
5.1.
Рисунок 5.1 - Класс
2. Интерфейс (Interface) - это совокупность операций, которые определяют сервис
(набор услуг), предоставляемый классом или компонентом. Таким образом,
интерфейс описывает видимое извне поведение элемента. Графически интерфейс
изображается в виде круга, под которым пишется его имя, как показано на рисунке
5.2. Интерфейс редко существует сам по себе - обычно он присоединяется к
реализующему его классу или компоненту.
Рисунок 5.2 - Интерфейс
3. Кооперация (Collaboration) определяет взаимодействие; она представляет собой
совокупность ролей и других элементов, которые, работая совместно, производят
некоторый кооперативный эффект, не сводящийся к простой сумме слагаемых.
Кооперация имеет как структурный, так и поведенческий аспект. Один и тот же
класс может принимать участие в нескольких кооперациях. Графически кооперация
изображается в виде эллипса, ограниченного пунктирной линией, в который обычно
заключено только имя, как показано на рисунке 5.3.
Рисунок 5.3 - Кооперация
4. Прецедент (Use case) - это описание последовательности выполняемых системой
действий, которая производит наблюдаемый результат, значимый для какого-то
определенного актера (Actor).
Прецедент применяется для структурирования поведенческих сущностей модели.
Прецеденты реализуются посредством кооперации. Графически прецедент
изображается в виде ограниченного непрерывной линией эллипса, обычно
содержащего только его имя, как показано на рисунке 5.4.
Рисунок 5.4 - Прецедент
Три другие сущности - активные классы, компоненты и узлы - подобны классам: они описывают совокупности объектов с общими атрибутами, операциями, отношениями и семантикой.
5. Активным классом (Active class) называется класс, объекты которого вовлечены в один или несколько процессов, или нитей (Threads), и поэтому могут инициировать управляющее воздействие. Активный класс во всем подобен обычному классу, за исключением того, что его объекты представляют собой элементы, деятельность которых осуществляется одновременно с деятельностью других элементов. Графически активный класс изображается так же, как простой класс, но ограничивающий прямоугольник рисуется жирной линией.
Два оставшихся элемента - компоненты и узлы - также имеют свои особенности. Они соответствуют физическим сущностям системы, в то время как пять предыдущих - концептуальным и логическим сущностям.
6. Компонент (Component) - это физическая заменяемая часть системы, которая
соответствует некоторому набору интерфейсов и обеспечивает его реализацию. В
системе можно встретить различные виды устанавливаемых компонентов, такие как
СОМ+ или Java Beans, а также компоненты, являющиеся
артефактами процесса разработки, например файлы исходного кода. Компонент, как
правило, представляет собой физическую упаковку логических элементов, таких как
классы, интерфейсы и кооперации. Графически компонент изображается в виде
прямоугольника с вкладками, содержащего обычно только имя, как показано на
рисунке 5.5.
Рисунок 5.5 - Компонент
7. Узел (Node) - это элемент реальной (физической) системы, который
существует во время функционирования программного комплекса и представляет
собой вычислительный ресурс, обычно обладающий как минимум некоторым объемом
памяти, а часто еще и способностью обработки. Совокупность компонентов может
размещаться в узле, а также мигрировать с одного узла на другой. Графически узел
изображается в виде куба, обычно содержащего только имя, как показано на
рисунке 5.6.
Рисунок 5.6 - Узел
Существуют также разновидности этих сущностей: актеры, сигналы, утилиты (виды классов), процессы и нити (виды активных классов), приложения, документы, файлы, библиотеки, страницы и таблицы (виды компонентов).
Поведенческие сущности (Behavioral things) являются динамическими составляющими модели UML. Это глаголы языка: они описывают поведение модели во времени и пространстве.
Существует всего два основных типа поведенческих сущностей.
1. Взаимодействие (Interaction) - это поведение, суть которого заключается в обмене
сообщениями (Messages) между объектами в рамках
конкретного контекста для достижения определенной цели. С помощью
взаимодействия можно описать как отдельную операцию, так и поведение
совокупности объектов. Взаимодействие предполагает ряд других элементов, таких
как сообщения, последовательности действий (поведение, инициированное
сообщением) и связи (между объектами). Графически сообщения изображаются в виде
стрелки, над которой почти всегда пишется имя соответствующей операции, как
показано на рисунке 5.7.