Аргерих Л. О языке РНР. Часть 1. Страница 109
Зная, как моделируется базовый класс, посмотрим, как моделировать более сложные классы, содержащие другие классы. Мы не станем включать их в список членов класса. Используя символы UML, мы соединим их ромбиком и прямой линией (рис.

Эта диаграмма показывает, что класс 2 содержится в классе В ООП это принято называть включением (containment). Для нашего примера класса Саг можно создать такую модель (рис. 5.8).
Эта диаграмма показывает, что класс Са г «включает в себя» классы Key и Engine. Черные ромбики показывают, что для того, чтобы обеспечить функционирование автомобиля, эти компоненты должны строиться вместе с ним. Помните, на конструкторы возлагается обязанность создать экземпляры всех компонентов, входящих в класс. Глядя на приведенную диаграмму классов, программист легко определит, экземпляры каких объектов он должен создать, чтобы сделать доступными все сервисы.

Существует еще белый ромбик, тоже обозначающий отношение включения, но в нем создавать экземпляр включаемого класса при создании объекта не надо. Вот пример, в котором в класс Саг добавляется функция CDPlayerQ (рис. 5.9).
Не во всех автомобилях должны быть CD-плейеры, что и обозначает новый символ - белый ромбик. Если при создании объекта не надо строить его компоненты, то для создания объекта CDPlayer необходимо предоставить ме-
Моделирование объектов с помощью UML
тод фабрики (обсуждавшийся ранее), например метод createCdPlayer() в нашем классе Саг. Класс плейера отличается от Engine RequiredKey в том отношении, что в классе Саг мы не создавали фабричные методы createEngine() и сге- ateRequiredKey(). На практике предоставлять эти сервисы тоже нет смысла.
Иногда класс «пользуется» другим классом в своих локальных методах, но не содержит его. Например, мы можем воспользоваться классом Date для действий с временными метками (times- tamps) UNIX. Мы отмечаем это сплошной линией без ромбиков (рис. 5.10).
Зная, как моделировать включение, займемся моделированием структур наследования. В нашем примере интернет- магазина был целый ряд носителей, например CD, фильмы и книги. Мы создали родительский класс Media и породили различные его подтипы, исходя из различных типов носителей, имеющихся в магазине. Чтобы показать, что Cd, Book и другие классы наследуют классу Media, используется черный треугольник, обращенный вершиной к родительскому классу, основание которого соединено со всеми дочерними классами. Вот UML-модель нашего магазина (рис. 5.11).
Все больше людей на сегодняшний день предпочитают зарабатывать в интернете. Поскольку
заработок в интернете может быть и высоким и стабильным. Как правильно зарабатывать деньги таким образом, вы сможете узнать у нас на сайте.