Создание обобщений в UML 2

Авторы: Майкл Джесси Чонолес, Джеймс А. Шардт

Естественно классифицировать объекты по категориям и организовывать категории по подкатегориям. Если вы ищете место для жизни, вы обнаруживаете, что классифицируете жилую единицу как дом, квартиру, таунхаус, кондоминиум, особняк и так далее. Дома, в свою очередь, могут быть дополнительно организованы по стилям, таким как ранчо, многоуровневые, колониальные и солончаковые. UML предоставляет вам нотацию для захвата этих типов классификаций - также известных как обобщение и специализация - и использования их в качестве разработчика моделей и программиста.

Некоторые объектно-ориентированные разработчики идут на все, чтобы сэкономить немного времени. Когда они могут смоделировать что-то один раз и повторно использовать это, им это интересно. Если они могут написать метод (программный код для операции) для класса только один раз и использовать его много раз, то зарегистрируйте их для повышения производительности. Если вы хотите сэкономить время, указав атрибуты и операции один раз, а затем повторно используя их много раз, читайте дальше.



При определении классов вы можете заметить, что некоторые классы имеют одинаковые атрибуты или одинаковые операции. В этом случае вы помещаете эти общие функции (атрибуты, операции и т. Д.) В более общий класс, называемый суперкласс. Классы, которые имеют общие черты, известны как подклассы суперкласса. Например, длина записанного материала на видеокассете, аудиокассете, компакт-диске или кинофильме является атрибутом всех четырех видов записанных носителей. Эти классы также могут иметь общие атрибуты, такие как их физические размеры и дата, когда каждый из них использовался для создания записи. В этом случае суперкласс будет RecordedMedia, подклассами будут Videotape, Audiotape, CompactDisc и MovieFilm, а некоторые общие атрибуты могут включать recordLength и totalLength.

Этот процесс поиска похожих атрибутов или операций в классах известен как обобщение. Например, вы обобщаете атрибут recordLength в более общий класс под названием RecordedMedia. Процесс отображения обобщения в UML прост:

1. Определите подклассы.

Найдите классы с одинаковыми атрибутами и / или операциями. Эти классы являются вашими подклассами.

2. Создайте суперкласс.

Предоставьте суперкласс для хранения общих атрибутов и / или операций подклассов. Дайте суперклассу имя, которое классифицирует все подклассы. Размещение суперкласса над подклассами на диаграмме упрощает чтение, но это не обязательно.)

r 214 зеленая таблетка

3. Добавьте общие черты в суперкласс.

Удалите общие атрибуты и операции из подклассов и поместите их (один раз) в суперкласс.

4. Нарисуйте обобщающее отношение.

Вы проводите линию обобщения от каждого подкласса к суперклассу. В UML линия обобщения представлена ​​сплошной линией с полой стрелкой на конце суперкласса. В UML линия с полой стрелкой, которая соединяет подкласс с суперклассом, называется отношением обобщения.

После создания суперкласса с общими функциями, такими как атрибуты и операции, подклассы наследовать эти функции из суперкласса. Таким образом, вам нужно написать общие функции только один раз в суперклассе, а не много раз в каждом из подклассов.

Вы можете определить, есть ли у вас обобщение, посмотрев на язык, который вы (или другие) используете для описания отношений между классами. Обратите внимание, что при описании записанных носителей и их различных типов, таких как видеокассета, ранее в этом разделе появилась фраза четыре типа записанных носителей. Если вы обнаружите, что используете такие фразы, как тип или тип, то, скорее всего, у вас есть обобщение.

Скажите, что один из ваших клиентов занимается отслеживанием материалов в архиве. У этого клиента накопились разные виды записанные носители, такие как видеокассеты и аудиокассеты. Как моделисты, вы должны уловить различия между этими носителями, а также их сходство. Диаграмма на рисунке 1 показывает начало нескольких обобщений, расположенных в виде иерархия наследования.

Фигура 1: Простая иерархия наследования.

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

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

белая таблетка 93350

У вас есть только один объект из класса в отношении обобщения. Несмотря на то, что вы показываете два класса, подкласс и суперкласс, у вас есть только один объект, который создается. Вы можете думать, что объект класса Videotape также является объектом класса RecordedMedia из-за наследования. На рисунке 2 показан объект, созданный из класса Videotape, со всеми его атрибутами. (Экземпляр класса представлен как символ объекта.) У вас нет двух разных объектов (один для RecordedMedia и один для видеокассеты), только один объект. При создании объекта vtu83-1023 были установлены значения всех его атрибутов. Продолжительность записи на кассете 57 минут. Общая длина физической ленты составляет 60 минут. Лента представляет собой видеокассету Umatic с высотой 10 дюймов, шириной 7 дюймов и глубиной 1,5 дюйма. Запись является аналоговой, и к ней прилагается журнал содержимого ленты, чтобы архивист мог сослаться на нее.

Фигура 2: Экземпляр, показывающий все унаследованные атрибуты.

У вас есть только один экземпляр, определенный подклассом и его суперклассом. Подкласс и суперкласс могут иметь операцию конструктора (для создания экземпляра) и операцию деструктора (для уничтожения экземпляра). Когда ваше программное обеспечение запускается и вы создаете экземпляр подкласса, сначала выполняется конструктор суперкласса, а затем конструктор подкласса. Когда приходит время удалить созданный вами экземпляр, сначала вызывается деструктор подкласса, а затем деструктор суперкласса. Если все обстоит сложнее, потому что у вас есть подклассы подклассов, просто помните: конструкторы вызываются сверху вниз по иерархии наследования; деструкторы вызываются в порядке от низшего подкласса до высшего суперкласса.