Джим Арлоу, Айла Нейштадт - UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование (1037782), страница 43
Текст из файла (страница 43)
Мы узнали следующее:• Отношения – это семантические соединения между сущностями.• Соединения между объектами называются связями.• Связь возникает, когда объект сохраняет объектную ссылку надругой объект.• Объекты реализуют поведение системы через взаимодействие:• взаимодействие возникает, когда объекты обмениваются сообщениями по связям;• когда объект получает сообщение, он выполняет соответствующую операцию.226Глава 9.
Отношения••Диаграммы объектов отображают объекты и их связи в определенный момент времени.•Диаграммы – это моментальные снимки исполняющейся ООсистемы в определенный момент времени.•Объекты могут играть определенные роли по отношению другк другу; роль, исполняемая объектом в связи, определяет семантику его участия во взаимодействии.Nарные связи могут объединять более двух объектов; они отображаются в виде ромба, соединенного линиями с каждым объектом, но используются редко.•••Разные OO языки программирования реализуют связи поразному.Пути – это линии, соединяющие элементы модели UML:•прямоугольный стиль – прямые линии, располагающиеся подпрямым углом;••наклонный стиль – косые линии;криволинейный стиль – кривые линии;•необходимо следовать и придерживаться одного стиля, еслитолько сочетание стилей не повышает читаемость диаграммы(что обычно не наблюдается).Ассоциации – это семантические соединения между классами.•Если между двумя объектами есть связь, между классами этихобъектов должна существовать ассоциация.•Связи – это экземпляры ассоциаций, так же как объекты – экземпляры классов.•Ассоциации могут иметь (не обязательно) следующие элементы:•Имя ассоциации:•••перед или после него может стоять маленькая черная стрелка, обозначающая направление чтения этого имени;должно быть глаголом или глагольной группой;•записывается в стиле lowerCamelCase;•использует или имя ассоциации, или имена ролей, но неодновременно и то, и другое.Имена ролей на одном или обоих концах ассоциации:•••должны быть существительным или именной группой,описывающими семантику роли;записывается в стиле lowerCamelCase.Кратность:•показывает количество объектов, которые могут участвовать в отношении в любой момент времени;9.6.
Что мы узнали••••227объекты могут появляться и исчезать, но кратность ограничивает число объектов, принимающих участие в отношении в любой момент времени;• кратность задается разделенным запятыми списком интервалов, например 0..1, 3..5;• не существует применяемой по умолчанию кратности – если кратность не обозначена явно, значит, она не определена.• Возможность навигации:• обозначается стрелкой на конце отношения – если на отношении стрелки не обозначены, значит, оно двунаправленное;• возможность навигации показывает, что отношение можно пройти в направлении по стрелке;• вероятно, используя другой путь, можно пройти в обратном направлении, но это потребует больших вычислительных затрат.Ассоциация между двумя классами эквивалентна наличию у одного класса псевдоатрибута, который может хранить ссылку наобъект другого класса:• часто ассоциации и атрибуты взаимозаменяемы;• ассоциации следует применять, если на одном конце ассоциации находится важный класс и это необходимо подчеркнуть;• атрибуты используются, когда класс, участвующий в отношении, не очень важен (например, библиотечные классы, такиекак String или Date).Классассоциация – это ассоциация, которая является еще иклассом:• может иметь атрибуты, операции и отношения;• классассоциация может использоваться, когда между паройобъектов в любой момент времени существует только однаединственная связь;• если пара объектов в определенный момент времени можетиметь много связей друг с другом, тогда мы материализуемотношение, заменяя его обычным классом.Квалифицированные ассоциации используют квалификатор,чтобы выбрать из целевого набора один объект:• квалификатор должен быть уникальным ключом для целевого набора;• квалифицированные ассоциации понижают кратность отношения nкомногим до nкодному;• они являются полезным способом обратить внимание на уникальные идентификаторы.228Глава 9.
Отношения•Зависимости – это отношения, в которых изменение поставщикаоказывает влияние или поставляет информацию клиенту.•Клиент некоторым образом зависит от поставщика.•Зависимости изображаются в виде пунктирной линии со стрелкой, направленной от клиента к поставщику.•Зависимости использования:•••«use» – клиент некоторым образом использует поставщика –универсальная зависимость;•«call» – операция клиента инициирует операцию поставщика;•«parameter» – поставщик является параметром или возвращаемым значением одной из операций клиента;•«send» – клиент отправляет поставщика (который долженбыть сигналом) в заданную цель;•«instantiate» – клиент является экземпляром поставщика.Зависимости абстракции:•«trace» – клиент является историческим развитием поставщика;•«substitute» – клиент может замещать поставщика во времявыполнения;•«refine» – клиент является версией поставщика;•«derive» – клиент может быть производным от поставщика:•производные отношения могут быть показаны явно с помощью зависимости «derive»;•производные отношения могут быть показаны путем добавления слэша перед именем роли или отношения;•производные атрибуты можно обозначить путем добавления слэша перед именем атрибута.Зависимости доступа:•«access» – зависимость между пакетами, когда клиентскийпакет имеет доступ ко всему открытому содержимому пакетапоставщика; пространства имен пакетов остаются изолированными;•«import» – зависимость между пакетами, когда клиентскийпакет имеет доступ ко всему открытому содержимому пакетапоставщика; пространства имен пакетов объединяются;•«permit» – управляемое нарушение инкапсуляции, когда клиент имеет доступ к закрытым членам поставщика; эта зависимость не поддерживается широко, ее следует избегать по меревозможности.10Наследование и полиморфизм10.1.
План главыВ этой главе основное внимание уделено ключевым концепциям наследования (раздел 10.3) и полиморфизма (раздел 10.4). Но преждечем углубиться в эти вопросы, важно понять принцип обобщения, обсуждаемый в разделе 10.2.10.2. ОбобщениеОбобщение – это отношение между более общей сущностью и болееспециальной сущностью.Перед тем как мы сможем перейти к обсуждению наследования и полиморфизма, необходимо сформировать четкое представление об идееобобщения.
Обобщение – это отношение между более общим элементоми более специальным элементом, когда более специальный элементполностью совместим с более общим элементом, но содержит большее количество информации.Два элемента подчиняются принципу замещаемости: более специальный элемент может использоваться везде, где предполагается использование более общего элемента, без нарушения системы. Очевидно, чтообобщение – намного более прочный тип отношений, чем ассоциация.В самом деле, обобщение подразумевает самый высокий уровень зависимости (и, следовательно, связанности) между двумя элементами.10.2.1.
Обобщение классовС концептуальной точки зрения идея обобщения проста. Всем хорошоизвестны общие сущности, например дерево, и более специальные сущности, например дуб, который является конкретным типом дерева.230Глава 10. Наследование и полиморфизм10.2. Обобщение10.3. Наследование классовизучаем обобщение классов10.2.1.
Обобщение классовподробно рассматриваем наследование10.3.1. Переопределение10.3.2. Абстрактные операции и классы10.3.3. Уровень абстракции10.3.4. Множественное наследование10.4. Полиморфизмподробно рассматриваем полиморфизм10.5. Дополнительные аспекты обобщения10.5.1. Множества обобщения10.5.2. Множества всех типов10.6. Что мы узналиРис. 10.1. План главы10.4.1. Пример полиморфизма23110.3.
Наследование классовобобщениеспециализацияболее общий элемент«являетсяразновидностью»Square(квадрат)ShapeCircle(круг)Triangle(треугольник)более специальные элементыродительсуперклассбазовый класспредокдочерний классподкласспотомокнаследникИерархия обобщенияРис. 10.2. Иерархия обобщенияОбобщение применяется ко всем классификаторам. В этой книге намуже встречалось обобщение, применяемое к прецедентам и актерам.Теперь обсудим его применение к классам.На рис.