#design-patterns #uml #software-design #class-diagram #ooad
#шаблоны проектирования #uml #проектирование программного обеспечения #диаграмма классов #ooad
Вопрос:
Я пытаюсь понять «Общий шаблон иерархии», но, несмотря на мои усилия, он остается неясным:
- Почему он используется и как он работает?
- Как смоделировать это на диаграмме классов UML?
- Каких преимуществ мы достигнем, используя этот шаблон?
Комментарии:
1. image.slidesharecdn.com/patterns-msc-110923034042-phpapp02/95/…
2. image.slidesharecdn.com/patterns-msc-110923034042-phpapp02/95/…
3. image.slidesharecdn.com/patterns-msc-110923034042-phpapp02/95/…
4. Привыкайте к отрицательным голосам: -/ Я лично никогда не слышал об этом шаблоне, но первая ссылка Бруно была тем, что я получил (и единственная, действительно использующая этот термин). Вероятно, вам следует указать, почему вы после этого и откуда вы взяли этот термин.
5. @saliksaleem это тоже не я, но если вы начнете объяснять, что ищете что-то в Интернете, многие здесь не дочитают до конца и сделают вывод, что вы запрашиваете ресурсы (здесь это выходит за рамки). Кроме того, ваш вопрос очень расплывчатый: откуда вы узнали об этом шаблоне, что бы вы хотели знать? Речь идет о моделировании или реализации? Di у вас есть конкретная проблема, которую вы намерены решить? Поэтому я бы посоветовал вам соответствующим образом отредактировать свой вопрос 🙂
Ответ №1:
Откуда взялся этот шаблон?
Этот вопрос привлек мое внимание, поскольку название шаблона ни о чем не говорит, но элементы, представленные в комментариях, настоятельно предлагали какой-то вариант хорошо известного составного шаблона. Некоторые быстрые исследования показывают, что этот шаблон не широко известен под этим именем. Кажется, только пара книг описывает это:
- Разработка программного обеспечения — принципы и практика, В.С. Джавадекар (описание в разделе 16.2.2), опубликованный в 2004 году
- Объектно-ориентированная программная инженерия: практическая разработка программного обеспечения с использованием UML и Java, Т. Летбридж и Р. Лаганьер (описание в разделе 6.3), опубликованная в 2001 году (второе издание в 2004 году).
- Встраиваемые системы реального времени, Xiaocong Fan (пример в разделе 6.3.4, где он ассимилирован с составным шаблоном), опубликованный в 2015 году
Я не смог найти ни одной академической статьи, ссылающейся на этот шаблон, по крайней мере, под этим именем.
Что такое общий шаблон иерархии?
Более известный составной шаблон описывает общую иерархическую структуру, в которой компонент может быть создан из иерархической совокупности узлов, специализирующихся на компоненте, некоторые из которых являются конечными узлами. Это очень общий шаблон проектирования, который охватывает многие формы иерархических структур.
Однако композит сам по себе является специализацией более общего «общего шаблона иерархии«. По словам Т. Летбриджа и Р. Лаганьера:
- аннотация
Node
определяет функции и предоставляет интерфейс, который является общим для каждого узла в иерархии. Каждый узел может иметь «вышестоящий»; - существует по крайней мере две специализации общего узла,
SuperiorNode
иNonSuperiorNode
в зависимости от того, должны ли они иметь подчиненного или нет (т. Е. Быть начальником другого узла). - связь между узлами может быть любого рода ассоциацией (т.Е. Не Только агрегацией, как в composite), с множеством необязательных для многих (как в composite) или многие ко многим
В UML это будет выглядеть так:
Лично я немного озадачен тем, что многие ко многим превосходят. На примере менеджеров и сотрудников это будет выглядеть как матрица, а матрица на самом деле больше не иерархия. Авторы упоминают, что это решетка, но не спорят о значимости для иерархий.
Оставшиеся вопросы об этом шаблоне
Он используется для представления любого вида иерархической структуры. Например:
- Иерархия менеджер / сотрудник, где менеджер может нести ответственность за набор сотрудников, некоторые из этих сотрудников сами являются менеджерами с обязанностями в группе сотрудников.
- Иерархия отдела / сотрудника может быть смоделирована с использованием композита, потому что отдел состоит из подразделений, которые в конечном итоге состоят из людей.
Основное преимущество этого шаблона заключается в том, что аннотация Node
предоставляет интерфейс, который можно использовать для всех узлов. Это облегчает разработку алгоритмов, которые могут беспрепятственно перемещаться по иерархии, не заботясь о конкретных деталях на каждом отдельном иерархическом уровне.