ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ
ПРОГРАММИРОВАНИЕ, ПРОЕКТИРОВАНИЕ, АНАЛИЗ
Объектно-ориентированное программирование — это метод программирования, основанный на представлении программы в виде совокупности взаимодействующих объектов, каждый из которых является экземпляром определенного класса, а классы являются членами определенной иерархии наследования.
В программировании делается акцент на правильном и эффективном использовании механизмов конкретных языков программирования. В проектировании, наоборот, основное внимание уделяется правильному и эффективному структурированию сложных систем.
Объектно-ориентированное проектирование — это метод проектирования, сочетающий процесс объектно-ориентированной декомпозиции и систему обозначений для представления логической и физической, а также статической и динамической моделей проектируемой системы.
В данном определении обращают на себя внимание следующие две важные части: объектно-ориентированное проектирование:
1) основывается на объектно-ориентированной декомпозиции;
2) использует разные системы обозначений для представления логических (классы и объекты) и физических (модули и процессы) моделей системы, а также ее статические и динамические аспекты.
Объектно-ориентированный анализ главный акцент делает на создании моделей реальной действительности на основе объектно-ориентированного мировоззрения.
Объектно-ориентированный анализ — это метод анализа, исследующий требования к системе с точки зрения классов и объектов, относящихся к словарю предметной области.
Как соотносятся между собой объектно-ориентированный анализ, проектирование и программирование? Результатами объектно-ориентированного анализа являются модели, лежащие в основе объектно-ориентированного проектирования, которое в свою очередь позволяет разработать схему полной реализации системы с использованием объектно-ориентированного программирования.
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ
Одной из основных задач, решаемых на этапе анализа и ранних стадиях проектирования, является выявление ключевых абстракций задачи – классов и объектов, составляющих словарь предметной области.
На ранних стадиях внимание проектировщика сосредоточивается на внешних проявлениях ключевых абстракций. Такой подход создает логический каркас системы: структуры классов и объектов. На последующих фазах внимание переключается на внутреннее поведение ключевых абстракций, а также их физическое представление.
Выделим следующие способы проведения объектно-ориентированного анализа:
– анализ предметной области;
Классический подход к классификации предполагает, что все вещи, обладающие некоторым свойством или совокупностью свойств, формируют некоторую категорию. Причем наличие этих свойств является необходимым и достаточным условием, определяющим категорию.
Например, студент – это категория: каждый человек или является студентом, или не является, и этого признака достаточно для решения вопроса, к какой категории принадлежит тот или иной индивидуум. С другой стороны, высокие люди не определяют категории, если, конечно, мы специально не уточним критерий, позволяющий четко отличать высоких людей от невысоких.
Таким образом, классический подход в качестве критерия похожести объектов использует родственность их свойств. В частности, объекты можно разбивать на непересекающиеся множества в зависимости от наличия или отсутствия некоторого признака.
Какие конкретно свойства надо принимать во внимание? Это зависит от цели классификации. Например, цвет автомобиля надо зафиксировать в задаче учета продукции автозавода, но он не интересен программе, которая управляет уличным светофором. Поэтому нет абсолютного критерия классификации, одна и та же структура классов может подходить для одной задачи и не годиться для другой.
При данном подходе кандидатами в классы и объекты могут быть выбраны:
– осязаемые предметы (автомобили, датчики);
– роли (учитель, политик);
– события (посадка на Марс, запрос);
– взаимодействие (заем, встреча).
Анализ поведения сосредоточивается на динамическом поведении как на первоисточнике объектов и классов. Классы формируются на основе групп объектов, демонстрирующих сходное поведение.
Напомним, что ответственностью объекта называют совокупность всех услуг, которые он может предоставлять по всем его контрактам. В результате анализа объединяют объекты, имеющие сходные ответственности и строят иерархию классов, в которую каждый подкласс, выполняя обязательства суперкласса, привносит свои дополнительные услуги.
До сих пор мы неявно имели в виду единственное разрабатываемое нами приложение. Но иногда в поисках полезных и уже доказавших свою работоспособность идей полезно обратиться сразу ко всем приложениям в рамках данной предметной области. Анализ данной предметной области может указать на ключевые абстракции, оказавшиеся полезными в сходных системах. Анализ предметной области – это попытка выделить те объекты, операции и связи, которые эксперты данной области считают наиболее важными.
Анализ включает следующие этапы:
– построение скелетной модели предметной области при консультациях с экспертами в этой области;
– изучение существующих в данной области систем и представление результатов в стандартном виде;
– определение сходства и различий между системами при участии экспертов;
– уточнение общей модели для приспособления к нуждам конкретной системы.
Анализ области можно вести относительно аналогичных приложений (вертикально) или относительно аналогичных частей одного и того же приложения (горизонтально).
В роли эксперта часто выступает пользователь системы, например, инженер или диспетчер. Он не обязательно должен быть программистом, но ему должны быть хорошо знакомы исследуемая проблема и ее язык.
Анализ вариантов – это подход, который можно успешно сочетать с первыми тремя, делая их применение более упорядоченным.
Вариант применения – это частный пример, сценарий или образец использования, начинающийся с того, что пользователь системы инициирует операцию или последовательность взаимосвязанных событий.
Пользователи, эксперты и разработчики перечисляют сценарии, наиболее существенные для работы системы (пока не углубляясь в детали). Затем они тщательно прорабатывают сценарии, раскладывая их по кадрам. При этом устанавливается, какие объекты участвуют в сценарии, каковы обязанности каждого объекта и как они взаимодействуют в терминах операций. Далее набор сценариев расширяется, чтобы учесть исключительные ситуации и вторичное поведение.
CRC-карточки – Class-Responsibilities-Collaborators (Класс-Ответственности-Сотрудники) – это простой и эффективный способ анализа сценариев.
Сотрудник – это другой класс, который взаимодействует с данным для обеспечения некоего общего набора поведений.
На обычных карточках небольшого размера сверху пишут название класса, снизу в левой половине – за что он отвечает, снизу в правой половине – с кем он сотрудничает.
На рис. 5.1 приведен вид CRC-карточки для класса Stack.
Рис. 5.1. CRC-карточка для класса Stack
Разработчики по ходу анализа сценария заводят по карточке на каждый обнаруженный класс и дописывают в нее новые пункты.
Карточки можно раскладывать так, чтобы представить формы сотрудничества объектов. С точки зрения динамики сценария их расположение может показать поток сообщений между объектами, с точки зрения статики они представляют иерархии классов.
Согласно методу неформального описания надо описать задачу или ее часть на обычном разговорном языке, а потом подчеркнуть существительные и глаголы. Существительные – кандидаты на роль классов, а глаголы могут стать именами операций.
Подход прост, однако он весьма приблизителен и непригоден для сколько-нибудь сложных проблем. Кроме того, человеческий язык не является точным средством выражения.
Некоторым существительным больше соответствуют не классы, а, например, признаки или свойства объектов (имя, возраст, вес, адрес и т.п.) или даже имена операций («телефонный вызов» вряд ли означает какой-либо класс).
Рассмотрим вопросы поиска, выбора и уточнения ключевых абстракций.
Самая главная ценность ключевых абстракций заключается в том, что они определяют границы нашей проблемы: выделяют то, что входит в нашу систему и поэтому важно для нас, и устраняют лишнее. Задача выделения таких абстракций специфична для проблемной области. Правильный выбор объектов зависит от назначения приложения и степени детальности обрабатываемой информации.
Определение ключевых абстракций включает в себя два процесса: открытие и изобретение. Мы открываем абстракции, слушая специалистов по предметной области: если эксперт про нее говорит, то эта абстракция обычно действительно важна. Изобретая, мы создаем новые классы и объекты, не обязательно являющиеся частью предметной области, но полезные при проектировании или реализации системы. Например, пользователь банкомата говорит «счет, снять, положить»; эти термины – часть словаря предметной области. Разработчик системы использует их, но добавляет свои, такие, как «база данных», «список», «очередь» и т.д. Эти ключевые абстракции созданы уже не предметной областью, а проектированием. Наиболее мощный способ выделения ключевых абстракций – сведение задачи к уже известным классам и объектам.
Определив новые абстракции, мы должны найти их место в контексте уже существующих классов и объектов. Не стоит пытаться делать это строго сверху вниз или снизу вверх, поскольку трудно сразу расположить классы и объекты на правильных уровнях абстракции. Иногда, найдя важный класс, мы можем передвинуть его вверх в иерархии классов, тем самым увеличивая степень повторности использования кода. Аналогично, можно прийти к выводу, что класс слишком обобщен, и это затрудняет наследование.
Кроме того, по ходу работы возможно следующее:
– выделить излишек ответственности в новый класс;
– перенести ответственность с одного большого класса на несколько более детальных классов;
– передать часть обязанностей другому классу.
Источник
Методы объектного анализа и построения моделей предметных областей
Главная цель объектного анализа — представить предметную область как множество объектов со свойствами и характеристиками, которые достаточны для их определения и идентификации, а также для задания поведения объектов в рамках выбранной системы понятий и абстракций. На произвольном шаге объектного анализа все понятия (сущности) ПрО — суть объекты. Каждый объект — это уникальный элемент, имеет, по крайней мере, одно свойство или характеристику и уникальную идентификацию во множестве объектов.
Предметная область сама является самостоятельным объектом или может быть объектом в составе другой предметной области .
Анализ ПрО проводится с помощью объектно-ориентированных методов и соответствующих стандартов. Конечная цель объектно-ориентированного анализа ПрО — определение объектной модели (ОМ) с помощью выделенных объектов, отношений между ними и их свойствами и характеристиками.
При построении модели ОМ в предметной области также выявляются функциональные задачи, формулируются требования к их проектированию и реализации. Требования, задачи и модель ОМ — необходимые условия построения архитектуры системы для анализируемой ПрО.
4.1. Краткий обзор объектно-ориентированных методов анализа и построения моделей
На данный момент известно более пятидесяти объектно-ориентированных методов анализа ПрО, которые прошли проверку практикой. Приведем некоторые основные из них:
- метод объектно-ориентированного системного анализа OOAS (Object-Oriented system analysis ), позволяющий выделить сущности и объекты ПрО, определить их свойства и отношения, а также построить на их основе информационную модель, модель состояний объектов и процессов представления потоков данных (dataflow) [4.1];
- метод объектно-ориентированного анализа OOA ( Object-Oriented analysis ), обеспечивающий моделирование ОМ и формирование требований к ПрО с помощью понятия » сущность-связь » (entity-relationship ER), спецификацию потоков данных и соответствующих процессов [4.2];
- метод SD ( Structured Design ) структурного проектирования системы, данных и программ преобразования входных данных в выходные с помощью структурных карт Джексона [4.3-4.5];
- методология объектно-ориентированного анализа и проектирования OOAD ( Object-oriented analysis and design), которая основывается на ER-моделировании сущностей и отношений в объектной модели ПрО, она обеспечивает определение системы и организацию данных с использованием структурных диаграмм, диаграмм » сущность-связь » и матрицы информационного управления [4.6, 4.7];
- технология объектного моделирования OMT (Object Modeling Technique) включает в себя процессы (анализа, проектирования и реализации), набор нотаций для задания четырех моделей (объектной, динамической, функциональной и взаимодействия) [4.8, 4.9];
- объединенный метод UML, включающий средства и понятия метода Г. Буча (объекты, классы, суперклассы), принципы наследования, полиморфизма и упрятывания информации об объектах, а также варианты использования метода Джекобсона для задания сценариев работы системы при выполнении задач ПрО и диаграммные средства взаимодействия объектов Румбауха [4.10, 4.11];
- метод определения распределенных объектов на основе объектной модели CORBA и набора сервисных системных компонентов общего пользования, обеспечивающих их функционирование в среде распределенных приложений [4.16];
- метод генерации (generative) частей системы из семейства ПрО с помощью готовых объектов, аспектов, компонентов, программ многоразового использования и приложений, а также модели характеристик, в которой представлены функциональные и нефункциональные требования к семейству систем [4.13].
Наиболее используемая объектная модель ПрО реализована в системе CORBA . Каждый объект модели инкапсулирует некоторую сущность ПрО и определяет один или несколько сервисов (методов) ее реализации. Объекту соответствует одна или несколько операций обращения к методам. Объекты группируются в типы, а их экземпляры — в подтипы/ супертипы .
Они инкапсулируют методы реализации, которые невидимы во внешнем интерфейсе, т.е. ОМ не содержит информации о способах реализации типа, а только о наличии его реализации. Во внешнем интерфейсе содержатся операции , которые вызывают методы объектов для их выполнения. Специализация типа определяется постепенно на этапах стратегии, анализа, проектирования и реализации объекта. Взаимодействие объектов осуществляет брокер объектных запросов и операций (Особенности системы CORBA изложены в «Интерфейсы, взаимодействие и изменение программ и данных» ).
Приведенная общая характеристика разновидностей объектно-ориентированных методов показывает, что они имеют много общих черт (например, ER- моделирование , Dataflow), а также свои специфические особенности. Каждый разработчик метода объектно-ориентированного анализа вводил необходимые новые понятия, которые зачастую семантически совпадали с аналогичными понятиями в других методах. Поэтому у авторов UML возникла идея объединить свои индивидуальные методы объектного анализа (Буча, Джекобсона и Рамбауха) для создания единого метода объектного моделирования UML .
4.1.1. Основные понятия методов объектного анализа ПрО
К основным понятиям методов объектного анализа ПрО отнесем следующие [4.12, 4.13].
Объект ПрО — это абстрактный образ с поведением, которое обусловлено его характеристиками и взаимоотношениями с другими объектами ПрО.
Согласно теории Фреге [4.14] спецификацию объекта можно трактовать как треугольник:
где — идентификатор, строка из литер и десятичных чисел; — сущность реального мира ПрО, которую обозначает идентификатор; — смысл (семантика) денотата в соответствии с интерпретацией сущности моделируемой ПрО.
Объект интерпретируется как понятийная структура, состоит из идентификатора, денотата — образа предмета и концепта, отображающего смысл этого денотата , исходя из цели объектного моделирования ПрО. Денотат можно идентифицировать различными символами алфавита. Одному объекту могут соответствовать несколько концептов в зависимости от избранного уровня абстракции. Объект определяется через его внешнее отличие от других объектов. Внутренняя особенность объекта (его структура, внутренние характеристики) не влияет на внешнее отличие и для объектного моделирования значения не имеет.
Сущность — это семантически важный объект или тип объекта, существующий реально в ПрО или является абстрактным понятием, информацию о котором необходимо знать и/или сохранять [4.12, 4.13]. Имя сущности должно быть уникальным и может представлять тип или класс объектов. Сущность может иметь синонимы, записываемые через знак «/» (например, аэропорт/аэродром).
Концепт — значение некоторой абстрактной сущности ПрО, обозначается уникальным именем или идентификатором. Группа подобных концептов — это родительский концепт, который заведомо определяется некоторым набором общих атрибутов. Концепт вместе со своими атрибутами представляется графически в ОМ или в текстовом виде.
Атрибут — это абстракция, которой владеют все абстрагированные концепты сущности. Каждый атрибут обозначается именем, уникальным в границах описания концепта. Множество объединенных в группу атрибутов обозначает идентификатор этой группы. Группа атрибутов может объединяться в класс и иметь идентификатор класса.
Отношение — это абстракция набора связей, которые имеют место между разными видами объектов ПрО, абстрагированных как концепты. Каждая связь имеет уникальный идентификатор. Отношения могут быть текстовыми или графическими. Для формализации отношений между концептами добавляются вспомогательные атрибуты и ссылки на идентификаторы этих отношений. Некоторые отношения образуются как следствие существования других отношений.
Класс — это множество объектов, обладающих одинаковыми свойствами, операциями, отношениями и семантикой. Любой объект — это экземпляр класса. Класс представляется различными способа-ми (например, списками объектов, операций, состояний). Измеряется класс количеством экземпляров, операций и т.п.
Предметная область — это то, что анализируется с целью выделения специфичного множества понятий (сущностей, объектов) и связей между ними. На множестве этих понятий определяются задачи в целях автоматизированного их решения. Пространство ПрО можно разделить на пространство задач ( problem space ) и пространство решений (solution space) [4.13]. Пространство задач — это сущности, концепты ПрО, а пространство решений — это множество программных реализаций задач, в том числе функциональные компоненты, которые обеспечивают решение задач и функций ПрО, представленных в этом пространстве.
Выделение сущностей ПрО проводится с учетом отличий, определяемых соответствующими понятийными структурами. Объект как абстракции реального мира и понятийная структура обладает поведением, обусловленным свойствами и отношениями данного объекта с другими объектами. Выделенные в ПрО объекты структурно упорядочиваются теоретико-множественными операциями (принадлежности, объединения, пересечения и др.).
Модель ПрО — это совокупность точных определений понятий, концептов, объектов и их характеристик, а также множества синонимов и классифицированных логических взаимосвязей между этими понятиями.
Концептуальная модель — это модель ПрО, она создается без ориентации на программные и технические средства выполнения задач ПрО в операционной среде.
Для объектов модели устанавливаются отношения или связи. Различаются статические (постоянные) связи, которые не изменяются или изменяются редко, и динамические связи, которые имеют определенные состояния и изменяются во время функционирования системы.
Связи между объектами могут быть следующие:
- связь один к одному (1:1) существует тогда, когда один экземпляр объекта некоторого класса связан с единственным экземпляром другого класса, т.е. в связи принимают участие по одному экземпляру из классов;
- связь один ко многим (1:N), существует тогда, когда один экземпляр объекта некоторого класса связан одновременно с одним или более экземплярами другого класса или того же самого класса;
- связь многие ко многим (M:N) существует тогда, когда в связях принимают участие несколько экземпляров объектов двух классов, т.е. один или больше экземпляров другого класса связан с одним или более экземплярами первого класса.
Состояние связей между объектами с течением времени может эволюционировать, и они могут существенно влиять на ход решения задачи. Для таких случаев связи строится ассоциативный объект и определяется модель состояний этого объекта путем добавления атрибута, фиксирующего текущее состояние.
Среди действий, которые сопровождают переходы объектов в определенные состояния в модели состояний, должны быть операции создания нового экземпляра ассоциативного объекта, если новая пара экземпляров вступает в связь или его уничтожения в случае, если объект или связь перестают существовать.
Используя приведенные базовые понятия методов объектного анализа ПрО, далее излагаются: объектный метод анализа ПрО и построения моделей [4.1], визуальный метод моделирования — UML [4.17] и проектирование архитектуры системы на основе стандартов.
Источник