Могу ли я нарисовать несколько специализаций для класса в диаграмме классов UML?
Я ищу рисунок диаграммы UMLclass для базы данных, которую я буду реализовывать в Oracle.
В этой базе данных у меня есть класс, который может быть специализирован более чем одним способом. В качестве примера: существует класс Publication, который может специализироваться на Book и Magazine, в свою очередь это может быть цифровая или печатная копия.
Как правильно это представить, учитывая, что у моей второй специализации примерно одиннадцать детей?
Я думаю об этом решении: Вы думаете, что это правильно? Публикация может быть специализированной как цифровая книга одновременно? Есть ли совпадение этих двух специализаций?
2 ответа
первая версия вопроса
Конечно, класс может наследоваться (обобщаться) несколькими.
Издание может быть цифровой книгой?
На вашей диаграмме ничего не сказано об этом, потому что:
Book ---|> Publication
означает, что книга - это публикация, а не публикация - это книгаDigital ---|> Publication
означает, что цифровое издание является публикацией, а не публикация является цифровым
Чтобы сделать что-то похожее на "Публикация - это цифровая книга", можно изменить направление наследования:
при этом Публикация - это Книга и Цифровая, но не совсем Цифровая Книга, потому что Цифровая и Книга - это два разных класса
вторая версия вопроса
Публикация может быть специализированной как цифровая книга одновременно?
Если в то же время означает , что в одном и том же случае ответ отрицательный, поскольку на вашей диаграмме книга не может быть также цифровой, поэтому экземпляр не может быть одновременно экземпляром книги и экземпляром цифровой
Ваше решение в порядке. Может быть, вы должны переименовать некоторые классы, как Digital Publication
потому что кто-то может подумать Digital
не особенный Publication
,
Чтобы сделать его еще лучше, вы должны рассмотреть возможность использования Generalization Sets
, В настоящее время все четыре обобщения являются одним набором по умолчанию, хотя они показаны с двумя деревьями. Этот набор по умолчанию перекрывается и не является полным. Это означает, что экземпляр Publication
может быть экземпляром всех четырех специализаций одновременно или быть чем-то совершенно другим. Думаю для твоих целей два Generalization Sets
будет необходимо:
- Публикация
Book
а такжеMagazine
- PublicationMeans с
Digital Publication
а такжеHard Publication
Оба будут отмечены свойствами {disjoint, complete}.
Многократное обобщение имеет свои достоинства. Просто используйте это с умом.