Как наследуются отношения в UML-диаграмме классов?
Мне было интересно, как Ассоциации, зависимости и такие отношения наследуются в UML (или, скажем, в целом). Итак, в подобной ситуации:
┌──────────┐ ┌──────────┐
│ ClassA │ │ ClassB │
├──────────┤ ├──────────┤
│ │─────────"One kind of relation"────────>│ │
├──────────┤ ├──────────┤
│ │ │ │
└──────────┘ └──────────┘
^
/┬
│
│
│
│
┌─────┴────┐
│ ClassC │
├──────────┤
│ │
├──────────┤
│ │
└──────────┘
Примечание:
- ClassA-ClassC находится в обобщающем отношении, стрелка должна быть сплошной
- класса-classb является одним из [зависимость, ассоциация, агрегация, композиция]
- Unicode классный, но с редактором шрифта смотрится намного лучше:)
Спасибо.
3 ответа:
Вы задаете не UML-вопрос, а более общий вопрос.
Что означает наследование?
ClassC-это подкласс ClassA. В каждом языке программирования, реализующем наследование, ClassC будет иметь все возможности ClassA.
В языке, который не поддерживает наследование, необходимо создать иллюзию правильного наследования, убедившись, что все функции ClassA также являются частью ClassC.
Таково определение наследования. Всегда и навсегда. Даже в UML-диаграммах.
Простой ответ-да (и вам не нужно смотреть дальше этого для большей практической цели).
Но дело обстоит сложнее, чем кажется; цитируя справочное руководство по унифицированному языку моделирования, второе издание:
Я помню довольно длинную лекцию, еще в 2003 году, о разнице между обобщением и наследованием. Короче говоря, эти две концепции принадлежат к разным уровням проектирования программного обеспечения, или цитируя Мартина Фаулера в UML Distilled, третье издание, " различные перспективы моделирование":Слова обобщение и наследование часто используются взаимозаменяемо, но есть на самом деле два родственных но разных концепция. Обобщение-это таксономическая связь между моделированием элементы. Оно описывает, что такое элемент - это . Наследование-это механизм объединения общих инкрементных данных. описания, чтобы сформировать полный описание элемента. В большинстве объектно-ориентированные системы, наследование основан на обобщении, но наследование может основываться на другом концепции, такие как делегирование указатель собственного языка. Базирующийся механизм наследования на отношение обобщения позволяет факторинг и обмен описаниями и полиморфное поведение. Этот это подход, принятый большинством объектно-ориентированных языки и по UML. Но имейте в виду что есть и другие подходы, которые могли быть взяты и такие используется некоторыми языками программирования.
Концептуально мы можем сказать, что a Корпоративный клиент - это подтип Клиент, если все экземпляры корпоративного Клиент также, по определению, примеры клиента. Корпоративный Клиент - это тогда особый вид Покупатель.Понятие обобщения относится к концептуальному, проектному уровню.Но наследование-это понятие, которое относится к перспективе реализации:
С точки зрения программного обеспечения, очевидная интерпретация-это наследование: Корпоративный клиент - это подкласс клиента. В мейнстриме ОО языки, подкласс наследует все особенности суперкласса и мая переопределять методы суперкласса.
Я помню пример, где различие между обобщением и наследованием действительно имело смысл:
Квадрат-это прямоугольник. Это следует из их определений в математике:
- прямоугольник-это четырехугольник с четырьмя правыми сторонами. углы
Квадрат-это многоугольник с четырьмя равными сторонами и угламиНа уровне проектирования существует обобщающее отношение между квадратом и прямоугольником.
Но на уровне реализации все выглядит иначе:
- прямоугольник можно определить двумя мерами: его шириной и высотой
Квадрат может быть определен одной мерой, так как все стороны равныБыло бы контрпродуктивно наследовать ширину и высоту класса прямоугольника в классе квадрата, что потребует дополнительных ограничений для обеспечения того, чтобы одно и то же значение предоставлялось сеттеру для ширины и сеттеру для высоты.
Это случай (несколько резкий, я признаю), когда вы не переводите отношение обобщения на использование наследования на уровне реализации.
Ну, это были те дни.