Диаграммы классов языка UML. Категории связей и их отображение на диаграмме. Примеры.
Связью-обобщением называется связь между общей сущностью (суперкласс/родителем) и более специализированным типом этой сущности (подкласс/потомок). Полиморфизмом по включению – объекты потомка могут использоваться везде, где могут использоваться объекты предка. Потомок наследует все атрибуты и операции предка. У класса есть скрытое свойство isAbstract – может ли класс иметь объекты. Множественное наследование – подкласс определяется на основе нескольких суперклассов.
Ассоциацией называется структурная связь между объектами одного класса и объектами другого или того же самого класса (изображается линией). В ассоциации могут связываться два класса, и тогда она называется бинарной. Допускается создание ассоциаций, связывающих n классов – n-арные ассоциации.
С ассоциацией связаны 5 важных понятий: имя, роль, кратность, агрегация и навигация.
кратность (задается числом, интервалом, списком значений и интервалов, * - бесконечность) показывает, сколько объектов класса может/должно участвовать в экземпляре ассоциации.
С точки зрения библиотеки разумно произвести навигацию от объекта-библиотеки к связанным с ним объектам-книгам. Однако вряд ли потребуется по данному экземпляру книги узнать, в какой библиотеке она находится
Язык OCL. Инварианты OCL. Основные типы данных и выражения. В UML 2 способа определения ограничений: на естественном языке и на языке OCL. Более точный и лаконичный способ формулировки ограничений обеспечивает язык OCL (Object Constraints Language). Из языка UML в OCL заимствованы, в первую очередь, следующие концепции:
В OCL предопределены структурные типы, которые являются разновидностями типов коллекций (collection):
OCL может применяться для определения ограничений, описывающих пред- и постусловия операций классов, и ограничений, представляющих собой инварианты классов. Инвариант класса – это логическое выражение, вычисление которого должно давать true при создании любого объекта данного класса и сохранять истинное значение в течение всего времени существования этого объекта. Синтаксис определения инварианта: context <class_name> inv: <OCL-выражение> Пример (существует человек, обладающий контрольным пакетом акций) Context Компания inv: Self.акционер =>Exists (a:человек|a.количествоакций >= self.количествоакций div 2 +1)
|