Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек_ООП_1_4_1 Основи об'єктно-орієнтованого про...doc
Скачиваний:
0
Добавлен:
11.11.2019
Размер:
188.93 Кб
Скачать

5. Діаграми класів, асоціації, атрибути, операції, узагальнення, обмеження, агрегація і композиція.

Диаграмма классов описывает типы объектов и различного рода статические отношения, которые существуют между ними.

Име­ется два основных вида статических отношений:

ассоциации (например, клиент может взять напрокат ряд видео­кассет);

подтипы (медсестра является разновидностью личности).

На диаграммах классов изображаются также атрибуты классов, опе­рации классов и ограничения, которые накладываются на связи меж­ду объектами.

Пример диаграммы классов.

Ассоциации представляют собой отношения между экземплярами классов (сотрудник работает в компании, компа­ния имеет несколько офисов).

С концептуальной точки зрения ассоциации представляют концепту­альные отношения между классами.

На диаграмме показано, что За­каз может поступить только от одного Клиента, а Клиент в течение не­которого времени может сделать несколько Заказов. Каждый из этих Заказов может содержать несколько Строк заказа, причем каждая Строка заказа должна соответствовать единственному Товару.

Каждая из ассоциаций имеет два конца ассоциации; при этом каждый из концов ассоциации присоединяется к одному из классов этой ассо­циации. Конец ассоциации может быть явно помечен некоторой мет­кой. Такая метка называется именем роли.

Конец ассоциации также обладает кратностью, которая показывает, сколько объектов может участвовать в данном отношении. Символ «*» возле класса Заказ для ассоциации между классами Заказ и Клиент показывает, что с одним клиентом может быть связано много заказов; напротив, символ «1» показывает, что каждый из заказов мо­жет поступить только от одного клиента.

С точки зрения спецификации ассоциации представляют собой ответ­ственности классов.

Например, существует один или более методов, связанных с классом Клиент, с помощью которых можно узнать, ка­кие заказы сделал конкретный клиент. Аналогично в классе Заказ су­ществуют методы, с помощью которых можно узнать, какой Клиент сделал конкретный Заказ и какие Строки заказа входят в этот Заказ.

Если же модель рассматривается с точки зрения реализации, можно исходить из предположения, что между связанными классами сущест­вуют указатели в обоих направлениях.

Атрибуты обозначают информацию, которой располагают объекты класса.

На концептуальном уровне атрибут «имя Клиента» указывает на то, что клиенты обладают име­нами. На уровне спецификации этот атрибут указывает на то, что объ­ект Клиент может сообщить вам свое имя и обладает некоторым спосо­бом для установления имени. На уровне реализации объект Клиент со­держит некоторое поле для своего имени (называемое также перемен­ной экземпляра или элементом данных).

Операции представляют собой процессы, реализуемые некоторым классом.

Существует очевидное соответствие между операциями и ме­тодами класса. На уровне спецификации операции соответствуют об­щедоступным методам над некоторым типом. Обычно можно не пока­зывать такие операции, которые просто манипулируют атрибутами, поскольку они и так подразумеваются. Однако иногда возникает необ­ходимость показать, что данный атрибут предназначен только для чтения (read-only) или является неизменным (frozen), то есть его зна­чение никогда не изменяется. В модели реализации можно также ука­зать защищенные и закрытые операции.

видимость может принимать одно из трех значений: «+» общедос­тупная (public), «#» защищенная (protected) или «-» закрытая (private).

имя представляет собой строку символов.

список-параметров содержит разделенные запятой параметры, синтаксис которых аналогичен синтаксису атрибутов: <направление> <имя>: <тип> = <значение по умолчанию>. При этом допол­нительным элементом является направление, которое применяет­ся, чтобы показать характер использования параметра - для входа (in), выхода (out) или в обоих направлениях (inout). Если значение направления отсутствует, оно предполагается входным (in).

выражение-возвращающее-значение-типа содержит список разде­ленных запятой значений типов. Большинство разработчиков ис­пользует только один тип возвращаемого значения, но допускается использование и нескольких таких типов.

строка-свойств указывает значения свойств, которые применяют­ся к данной операции.

Пример записи операции для счета клиента: + показатъСостояние (дата: Дата): Деньги.

Обобщение указывает отношение между общим и частным.

Одинаковые свойства можно поместить в общий класс Клиент (супер- тип), при этом класс Индивидуальный клиент и класс Корпоративный клиент будут выступать в качестве подтипов.

В модели уровня спецификации обобщение означает, что интерфейс подтипа должен включать все элементы интерфейса супертипа. Гово­рят, что интерфейс подтипа согласован с интерфейсом супертипа.

Другая сторона обобщения связана с принципом замещения. Можно подставить класс Корпоративный клиент в любой код, где требуется класс Клиент, и при этом все должно работать прекрасно. По сущест­ву, это означает, что если я написал код, предполагающий использова­ние класса Клиент, то могу свободно использовать экземпляр любого подтипа класса Клиент. Класс Корпоративный клиент может реагиро­вать на некоторые команды отличным от класса Клиент образом (ис­пользуя полиморфизм), но это отличие не должно беспокоить вызыва­ющий объект.

С точки зрения реализации обобщение связано с понятием наследова­ния в языках программирования. Подкласс наследует все методы и поля суперкласса и может переопределять наследуемые методы.

Язык UML разрешает использовать для записи ограничений все что угодно. При этом необходимо лишь придерживаться правила: ограни­чения следует помещать в фигурные скобки ({}).

Полезные советы:

Выбор точки зрения для построения модели должен соответство­вать конкретному этапу работы над проектом:

На этапе анализа стройте концептуальные модели.

Если вы работаете с программным обеспечением, сосредоточьте свое внимание на моделях спецификации.

Применяйте модели реализации только в тех случаях, когда ил­люстрируете конкретный способ реализации.

Не надо строить модели для всего на свете; вместо этого следует сконцентрироваться на главных аспектах. Лучше иметь мало диа­грамм, которые постоянно используются в работе и отражают все внесенные изменения, чем иметь дело с большим количеством за­бытых и устаревших моделей.

Самая большая опасность, связанная с диаграммами классов, заклю­чается в том, что вы можете слишком рано увязнуть в деталях реали­зации. Чтобы этому противостоять, концентрируйте внимание на кон­цептуальной точке зрения и точке зрения спецификации.

15