Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 23
Текст из файла (страница 23)
Диаграмма состояний и переходов 4.9. Ограничения 103 ЗиЬвтвпсе виьвгвпсеывпе Воплощение: атрибут становится классом вава . Зиьвтепсейвтв виьв1апсемате ЗиЬвтвпсв Рис. 4.22. Воплощение 4.9. Ограничения Ограничение (сонэ(гагат) — это логическое условие, накладываемое на элементы модели, такие как объекты, классы, атрибуты, связи, ассоциации и наборы обобщений. Ограничение действует на значения, которые могут принимать элементы. Ограничения можно записывать на естественном или на формальном языке (например, ОСЪ ['тЧагшег-991).
4.9.1. Ограничения на объекты На рис. 4.23 приведены несколько примеров ограничений, наложенных на объекты. Зарплата сотрудника не может превышать зарплату босса (ограничение наложено одновременно на два объекта). Ни у какого окна соотношение сторон (длины к ширине) не может быть меньше 0.8 нли больше 1.5 (ограничение на атрибуты одного объекта). Приоритет задачи нельзя повысить (ограничение на один и тот же объект в разные моменты времени).
В моделях классов ограничения могут быть достаточно простыми. УУ1 пав»т 1епдт ш1ЕГЬ Ьовв Етр!оуее В 1 вв1вгу (вв1вгу 3 Ьовв.ва1вгу) (О.В З 1епдягГтибгь З 1Л) (Приоритет никогда не повышается) Рис. 4.23. Ограничения на объекты может использоваться для задания схемы управления и последующей реализации этой схемы при написании соответствующего кода. Альтернативный подход заключается в подготовке метамодели, в которой модель состояний и переходов будет храниться как данные. Универсальный интерпретатор будет считывать содержимое метамодели и выполнять его, реализуя нужную последовательность управления. На рис.
4.22 атрибут еибзтапсе(сгате был сделан классом для того, чтобы описать отношение многие-ко-многим между 5иЫгапсеМате и 5иЫапсе. Химическое вещество может быть известно под несколькими названиями. Например, пропилеи можно назвать пропиленом или С,Не И наоборот: под одним и тем же названием может скрываться несколько химических веществ. Различные смеси этиленгликоля с присадками имеют общее название «антифриз».
104 Глава 4 ° Углубленное моделирование классов 4.9.2. Ограничения на наборы обобщений Модели классов содержат множество ограничений в самой своей структуре. Например, семантика обобщения подразумевает некоторые структурные ограничения. При единичном наследовании подклассы являются взаимоисключающими. Более того, каждый экземпляр абстрактного суперкласса является экземпляром ровно одного его подкласса. Каждый экземпляр конкретного суперкласса является экземпляром не более, чем одного из его подклассов.
На рис. 4.16 и 4.17 ограничения используются в качестве вспомогательных средств для описания множественного наследования. ()М1. разрешает использовать с наборами обобщений следующие ключевые слова; ° о1з)о(пс (несовместные). Подклассы взаимно исключают друг друга. Лю- бой объект принадлежит ровно одному из них. ° очег!арр(пя (перекрывающиеся). Подклассы могут иметь общие объекты. Объект может принадлежать сразу нескольким подклассам. ° сошр!е1е (полное).
В обобщении перечислены все возможные подклассы. ° 1псошр!еее (неполное). Некоторые подклассы могли быть пропущены. 4.9.3. Ограничения на связи Кратность — это ограничение на количество элементов множества. Кратность ассоциации ограничивает количество объектов, которые могут быть связаны с одним конкретным объектом. Кратность атрибута определяет количество значений, которые может принимать конкретный экземпляр атрибута. Квалификаторы также являются ограничениями для ассоциации. Атрибут квалификатора не просто описывает связи ассоциации.
Он полезен для различения множества объектов у противоположного полюса. Класс ассоциации подразумевает некоторое ограничение. Он является классом во всех отношениях: может иметь атрибуты и операции, участвовать в ассоциациях и обобщениях. Ограничение заключается в том, что его индивидуальность возникает из экземпляров связываемых им классов. Обычная ассоциация не предполагает никакого порядка объектов на полюсе с кратностью «много». Ограничение (огс(егер указывает, что элементы у этого полюса имеют определенный порядок, который должен сохраняться. На рис.
4.24 показано явное ограничение, не являющееся частью структуры модели. Председатель комитета должен быть одним из его членов — ассоциация СЬа1гО~ является подмножеством ассоциации Метбег07. Рис 4.24. Отношение подмножества накладывает ограничение на ассоциации 4.10. Производные данные 105 4.9.4. Использование ограничений Мы рекомендуем выражать ограничения в явном виде, то есть объявлять их в модели. Объявление дает вам возможность выразить суть ограничения без всяких предположений о возможной реализации. Обычно ограничения приходится преобразовывать в форму процедур перед тем, как реализовывать их иа язьгке программироваиия, ио это преобразование чаще всего бывает достаточно простым. Ограничения позволяют оценить качество модели классов: в «хорошей» модели значительная часть ограничений заложена в саму структуру.
Часто требуется несколько итераций проектирования, чтобы структура получилась правильной с точки зрения ограничений. На практике чаще всего ие получается заложить все ограничения в структуру, ио нужно стараться добиться этого по крайней мере для наиболее важных из иих. В ПМЕ имеется две альтернативные системы обозначения ограничений. Ограиичеиие можно отделить фигурными скобками или поместить его в прямоугольиик комментария с подогнутым краем (так называемое псобачье ухо» вЂ” рис.
4.26). В любом случае нужно стараться размешать ограничения около тех элементов, к которым оии относятся. Для соединения элементов можно использовать пуиктириые линии. Пунктирная линия может связывать элемент, иа который наложено ограничение, с тем элементом, от которого это ограничение зависит. 4.10.
Производные данные Производный элемент (г)ег1чег1 е1егпепг) — это функция одного или нескольких элементов, которые, в свою очередь, тоже могут быть производными. Производный элемент является избыточным, поскольку ои полностью определяется другими элементами. Дерево вывода заканчивается базовыми элементами. Производиыми могут быть классы, ассоциации и атрибуты. Перед именем производного элемента ставится косая черта, Необходимо также указать ограничение, определяющее порядок вычисления элемента. На рис. 4.25 показан пример производного элемента.'Возраст можно рассчитать по дате рождения и текущей дате.
Спггвпгоагв Регвпп ьгппппгп / аде (аое = сппепгпаГе — Ьмьса!е) Рис. 4.25. Производный атрибут На рис. 4.26 ставок состоит из нескольких агрегатов, которые, в свою очередь, состоят из деталей. Агрегат характеризуется смещением относительно координат станка. Каждая деталь смещена относительно координат агрегата. Мы можем определить систему координат для каждой детали, которая будет определяться координатами станка, смещением агрегата и смещением детали. Эта система координат будет представлена в модели производным классом ООзес, связанным с каждой деталью производной ассоциацией №гООзег.
106 Глава 4 ° Углубленное моделирование классов ЮЛЪе~ Рис. 4.26. Производный объект и производная ассоциация Полезно отделять операции с побочными эффектами от операций, возвращающих некоторое значение, но не создаюших побочных эффектов. Последние называются запросами (цвету). Запросы без аргументов (за исключением целевого объекта) могут рассматриваться как производные атрибуты. Например, ширину прямоугольника можно вычислить по координатам его сторон. Во многих случаях объект обладает множеством атрибутов со связанными между собой значениями, из которых лишь некоторые могут быть определены независимо.
Модель классов должна описывать отличие независимых базовых атрибутов (Ьазе агсПЬцгез) от зависимых производных атрибутов (деггееб аггПЬцгез). Выбор базовых атрибутов произволен, но его необходимо сделать, чтобы не переопределять состояние объекта. Некоторые разработчики включают в модель много производных элементов. Обычно это не приносит никакой пользы и перегружает модель. Производные элементы стоит включать только в том случае, если они отражают важные для приложения концепции или значительно упрощают реализацию. Поддерживать согласованность производных элементов с базовыми может быть довольно затруднительно, поэтому использовать их для реализации нужно с осторожностью.
4.11. Пакеты Модель классов можно уместить на одной странице, если вы решаете задачу небольшого или среднего размера. Большую модель бывает трудно охватить целиком. Мы рекомендуем разбивать большие модели на части, чтобы другим людям было проще понять их. Пакет — это группа элементов (классов, ассоциаций, обобщений и вложенных пакетов), объединенных общей темой. Пакеты разбивают модель на части, что упрощает ее понимание и поддержку. Для крупных приложений может потребоваться несколько уровней пакетов. Пакеты образуют дерево, уровень абстрактности которого увеличивается в направлении корня — приложения, которое одновременно является пакетом верхнего уровня. Пакет обозначается прямоугольником с закладкой (рис. 4.27).