Конспект лекций, страница 17
Описание файла
PDF-файл из архива "Конспект лекций", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 17 страницы из PDF
Это может быть набор элементов пользовательского интерфейса,зависящий от возможностей среды разработки, или набор классов, реализующийсистемный или аппаратный интерфейс.FatClassКлассы-сущности- transientAttr1сучетомсоображений<<entity>>производительности и+ getCommonlyUsedAttr2()FatClass+ getCommonlyUsedAttr3()защиты данных могут- transientAttr1+ getRarelyUsedAttr4()разбиваться на ряд+ getRarelyUsedAttr5()+ commonlyUsedAttr2классов.Основанием+ commonlyUsedAttr3для разбиения является+ rarelyUsedAttr411+ rarelyUsedAttr5наличиевклассеFatClassLazyDataHelperFatClassDataHelperатрибутов с различной- RarelyUsedAttr4+ CommonlyUsedAttr2частотой использования- RarelyUsedAttr5+ CommonlyUsedAttr3или видимостью.
Такиеатрибуты, как правило,выделяются в отдельные классы.Что касается управляющих классов, то классы, реализующие простую передачуинформации от граничных классов к сущностям, могут быть удалены. Сохраняютсяклассы, выполняющие существенную работу по управлению потоками событий(управление транзакциями, распределенная обработка и т.д.).Полученные в результате уточнения классы подлежат непосредственной реализациив коде системы.Обязанности классов, определенные в процессе анализа и документированные ввиде «операций анализа», преобразуются в операции, которые будут реализованы в коде.При этом: каждой операции присваивается краткое имя, характеризующее ее результат; определяется полная сигнатура операции; создается краткое описание операции, включая смысл всех ее параметров;11определяется видимость операции: public, private или protected;определяется область действия операции: операция объекта или операция класса.Уточнение атрибутов классов заключается в следующем: задается его тип атрибута и значение по умолчанию (необязательно); задается видимость атрибутов: public, private или protected; при необходимости определяются производные (вычисляемые) атрибуты.Если в системе присутствуют объекты со сложным поведением, то строятдиаграммы состояний.
Построение диаграмм состояний может оказать следующеевоздействие на описание классов: события могут отображаться в операции класса; особенности конкретных состояний могут повлиять на детали выполнения операций; описание состояний и переходов может помочь при определении атрибутов класса.В процессе проектирования связи между классами подлежат уточнению.Некоторые ассоциации преобразуются в зависимости (в случаях, когда соединенияэкземпляров классов не стабильны, т. е. временны, например, если объект являетсяпараметром или результатом операции или ее локальной переменной). Оставшиесяассоциации преобразуются в агрегации или композиции. Композиции бывают 2-х видов:безраздельно обладает (зависимость по существованию, транзитивность,асимметричность, стационарность);обладает(зависимостьпосуществованию,транзитивность,асимметричность).Примеры: университет -> факультет -> кафедра; здание -> этаж здания.Виды агрегаций:включает (зависимость по существованию, транзитивность);участник (нет ограничений).Примеры: автомобиль -> колесо; предприятие -> сотрудник.Определяются направления связей, при этом учитываются взаимодействия объектов,а также ожидаемое количество экземпляров классов.
Классы ассоциаций являютсяартефактами моделирования и не поддерживаются языками программирования, поэтомуони должны быть преобразованы. Структурные связи с множественными полюсамиуточняются. Им приписываются квалификаторы. Квалификатор – атрибут или наборатрибутов ассоциации, значение которых позволяет выбрать для конкретного объектаквалифицированного класса множество целевых объектов на противоположном концесоединения. Например, если в папке может находиться не более одного файла с заданнымименем, то имя файла – квалификатор ассоциации папка -> файл. Соответствующиеатрибуты у целевых классов должны быть удалены.
Квалификатор не обязательно состоитиз одного атрибута (также как и потенциальный ключ записей в таблице). Указываются12типы множественных связей: множество, упорядоченное множество, мультимножество,упорядоченное мультимножество. Используются классы-контейнеры (список, хэштаблица и проч.). Классам с необязательными связями добавляются операции проверки,существования соединения между их экземплярами.Связи обобщения могут преобразовываться в ситуациях с так называемойметаморфозой подтипов, когда есть необходимость менять тип объектов (например,преобразовывать студента-заочника в студента дневного отделения или наоборот).В модели добавляются ограничения. Для их записи используется язык OCL,рассматриваемый на лекции 8.Проектирование баз данных производится, если используется реляционная БД, приэтом классы-сущности объектной модели отображаются в таблицы реляционной БД.Подробное рассмотрение вопросов проектирования БД содержится в лекции 9.Литература к лекции 71.
Вендров А. М. Проектирование программного обеспечения экономическихинформационных систем. 2-е изд. – М.: Финансы и статистика, 2005. – Глава 4.2. Рамбо Дж., Блаха М. UML 2.0. Объектно-ориентированное моделированиеи разработка. 2-е изд.: Пер. с англ. – СПб.: Питер, 2007. – Главы 14.3. Якобсон А., Буч Г., Рамбо Дж.
Унифицированный процесс разработки программногообеспечения.: Пер. с англ. – СПб.: Питер, 2002. – Глава 9.4. Коналлен Дж. Разработка Web-приложений с использованием UML.: Пер. с англ. –М.: Вильямс, 2001. – Глава 10.13Лекция 8. Объектный язык ограничений (OCL)Ограничение (constraint) – это условие, накладываемое на значения одного илинескольких элементов модели. Ограничение не является инструкцией или командой,которую следует выполнить, оно формулируется как утверждение, которое должно бытьистинным. Под элементом модели здесь имеется в виду объект, или класс, или пакет, илиподсистема, или атрибут, или операция, или связь.Рассмотрим пример:ГрузовойРейсПассажирскийРейс0..*0..*«redefine»Рейс0..*1«redefine»Самолет1ГрузовойСамолет1ПассажирскийСамолетДиаграмма содержит большое количество связей (ассоциаций и обобщений)необходимых для указания, что тип самолета должен соответствовать типу рейса, т.
е. чтопассажиров нельзя перевозить грузовым самолетом. Это ограничение можнозафиксировать иначе, упростить диаграмму, сделать ее более наглядной:тип самолета должен соответствовать типу рейсаСамолетРейстип : enum of грузовой, пассажирский 0..*1 тип : enum of грузовой, пассажирскийОграничение, записанное на естественном языке, неформально, его можнонеправильно трактовать (например, что чартерные рейсы должны выполняться старымисамолетами, а регулярные – новыми). Поэтому имеет смысл использовать для записиформальный язык, который не допускает произвольных толкований и имеет стандартныйсинтаксис и семантику.
Таковым является объектный язык ограничений OCL (ObjectConstraint Language), являющийся одним из расширений UML. С использованием OCLдиаграмма будет выглядеть так:{context Рейсinv: тип = #грузовой implies самолет.тип = #грузовойinv: тип = #пассажирский implies самолет.тип = #пассажирский}СамолетРейстип : enum of грузовой, пассажирский 0..*11тип : enum of грузовой, пассажирскийСлово implies означает логическую операцию импликации (a → b, читается так: из aследует b, это выражение ложно лишь при a – истина и b – ложь, в остальных случаях оноистинно). Вообще говоря, для записи ограничений можно использовать и другиеформальные языки, например, языки программирования. Основное неудобство при этом– ограничение, записанное на языке программирования, похоже на часть программы, чтопридает ограничению посторонний смысл (может сложиться впечатление, что происходяткакие-либо манипуляции над элементами модели, а это противоречит определениюпонятия ограничения).Классификация ограничений:• Инвариант класса – условие, которое всегда справедливо для всех экземпляров класса(ключевое слово inv:).• Предусловие операции – условие, которое должно быть истинно перед выполнениемоперации (ключевое слово pre:).• Постусловие операции – условие, истинное всегда после выполнения операции(ключевое слово post:).• Тело запроса – описание результата операции-запроса, не модифицирующей объекты(ключевое слово body:)• Начальное значение атрибута или соединения (ключевое слово init:)• Правило вывода, описывающее производные атрибуты, связи или классы (ключевоеслово derive:).В примере мы описали инварианты класса Рейс.Характеристики OCL:• текстовый (невизуальный) язык описания ограничений;• формальный язык, часть стандарта UML;• язык со строгой типизацией;• декларативный язык (для ограничений не определяется конкретная процедураих проверки);• платформо-независимый.Никакое ограничение OCL не меняет состояния элементов модели (у него нетпобочных эффектов), но с его помощью можно добавлять производные атрибуты иоперации (def:).Синтаксис OCL-выражения<OCL-выражение> ::=<указание контекста>[(inv | pre | post | body | init | derive | def) : <тело выражения>]В записи использованы символы языка БНФ: <> выделяют нетерминалы, ( | ) –вхождение одной из указанных альтернатив, [] вхождение 1 или более раз, {} – вхождение0 или более раз.
Терминалы записаны жирным шрифтом.Контекст. В любом OCL-выражении указывается определенный контекст. Какправило, контекстом является элемент модели (пакет, класс, атрибут, операция),с которым связано ограничение.<указание контекста> ::= context <имя элемента модели>В примере контекстом является класс Рейс.Для того чтобы сослаться на контекст в теле выражения используется слово self.Чтобы много раз не писать self, оно часто опускается. По смыслу self аналогично this в C++. В примере тип – сокращенная запись self.тип.В теле выражения используются• выражения простых типов (boolean, integer, string, real);• элементы модели, для которой составлено ограничение;• коллекции.Логический тип OCL почти таков как в языках программирования.