Выдержки и откровенные копипасты из книги РНР. Объекты, шаблоны и методики программирования*.
Диаграммы классов — это один из аспектов UML (Unified Modeling Language - унифицированный язык моделирования), и именно они чаще всего употребляются в объектно-ориентированном проектировании. Очень полезны для описания объектно-ориентированных связей.
Описание классов
Как и следовало ожидать, классы являются главными составными элементами диаграмм классов. На такой диаграмме класс представлен в виде именованного прямоугольника.
Прямоугольник, представляющий класс, делится на три части, в первой из которых отображается имя класса, во второй - атрибуты, в третьей - методы, а точнее, вызовы класса. Разделительные линии необязательны, если больше никакой дополнительной информации, кроме имени класса, не предоставляется. На диаграмме классов совсем не обязательно обозначать все поля и методы, и даже все классы.
Обозначения имён классов
Для представления абстрактных классов на диаграмме имя класса выделяется курсивом, или же оно дополняется обозначением {abstract}.
Обозначение {abstract} — это пример ограничения. На диаграммах классов ограничения служат для описания порядка применения отдельных элементов. Специальных правил для указания текста в фигурных скобках не установлено. Он просто должен ясно давать пояснение каких-нибудь условий, устанавливаемых для элемента.
Интерфейсы определяются таким же образом, как и классы, за исключением того, что они должны включать стереотип <<interface>>
Обозначения атрибутов классов
Атрибуты перечисляются в той части диаграммы, которая располагается непосредственно под именем класса.
Первый знак в обозначении атрибута обозначает уровень видимости атрибута или управления доступом к нему:
Знак | Уровень видимости | Описание |
---|---|---|
+ | Общедоступный | Доступность для всего кода |
- | Закрытый | Доступность только для текущего класса |
# | Защищенный | Доступность только для текущего класса и его подклассов |
После знака уровня видимости указывается имя атрибута. Двоеточие служит для отделения имени атрибута от его типа, а возможно, и от его стандартного значения. Следует еще раз подчеркнуть, что в описание атрибута можно включить столько подробностей, сколько потребуется для ясности.
Обозначения методов классов
Операции описывают методы, а точнее, вызовы, которые могут быть сделаны для экземпляра класса. Для обозначения операций служит такой же синтаксис, что и для обозначения атрибутов. Знак уровня видимости предшествует имени метода. Список параметров заключается в круглые скобки, а тип значения, возвращаемого методом (если оно вообще возвращается), отделяется двоеточием.
Параметры разделяются запятыми, и для их обозначения употребляется такой же синтаксис, как и для атрибута: имя атрибута отделяется от его типа двоеточием.
Параметры часто обозначаются только их типом, поскольку имя аргумента обычно не имеет особого значения.
Описание отношений
Наследование и реализация
В языке UML отношения наследования описываются в виде обобщений. Это отношение обозначается сплошной линией, оканчивающейся незаполненной замкнутой стрелкой, ведущей от подкласса к родительскому классу.
Связь между интерфейсом и классами, в которых он реализован, обозначается прерывистой линией, оканчивающейся незаполненной замкнутой стрелкой, ведущей от класса к интерфейсу.
Ассоциация
Наследование — это только одно из отношений в объектно-ориентированной системе. Ассоциация происходит в том случае, когда в классе объявляется свойство, где содержится ссылка на экземпляр (или экземпляры) другого класса.
Стрелки на диаграмме классов служат для описания направления ассоциации. Так, если в классе Teacher имеется ссылка на экземпляр класса Pupil, то их ассоциацию следует определить с помощью стрелки, направленной от класса Teacher к классу Pupil. Такая ассоциация называется однонаправленной.
Если в каждом классе имеется ссылка на другой класс, то для обозначения двунаправленного отношения служит двунаправленная незамкнутая стрелка.
Имеется также возможность указать количество экземпляров класса, на которые ссылается другой класс в ассоциации. Для этого достаточно указать число или диапазон чисел рядом с каждым классом. Можно также употребить знак звездочки (*), обозначающий любое число.
Явный вызов метода объекта из другого объекта, в котором первый объект внедрен как свойство, называется делегированием, а внедрённый объект является делегатом ссылающегося класса.
Агрегирование и композиция
Агрегирование и композиция похожи на ассоциацию. Все эти термины служат для описания ситуации, когда в классе содержится постоянная ссылка на один или несколько экземпляров другого класса. Но с помощью агрегирования и композиции экземпляры, на которые ссылаются, формируют внутреннюю часть ссылающегося объекта.
При агрегировании объекты, на которые ссылаются, составляют основную часть объекта-контейнера, который их содержит, но они могут одновременно содержаться и в других объектах. Отношение агрегирования обозначается линией, которая начинается с незаполненного ромба. (Например: Класс Pupil состоит из учеников, но на один и тот же объект типа Pupil могут одновременно ссылаться различные экземпляры класса Schoolclass. Если же понадобится распустить школьный класс, для этого необязательно удалять ученика, который может посещать другие классы.)
Композиция представляет собой еще более сильное отношение, чем описанное выше агрегированиие. В композиции на содержащийся объект может ссылаться только содержащий его объект-контейнер. И он должен быть удален вместе с удаляемым объектом-контейнером. Отношения композиции обозначаются линией, которая начинается с заполненного ромба. Экземпляр ссылаемого объекта может принадлежать только содержащему его объекту.
Описание отношений использования
В языке UML отношение использования описывается в виде зависимости. Это самое неустойчивое из всех отношений, рассматриваемых в данном разделе, потому что оно не описывает постоянную связь между классами. При этом отношении используемый класс может передаваться в качестве аргумента или быть получен в результате вызова метода.
Отношение использования обозначается пунктирной линией со стрелкой, имеющей незамкнутый контур на конце.
Использование примечаний
На диаграммах классов отображается структура системы, но иногда они не дают достаточного представления о самом процессе. В таких случаях используются примечания, которые помогают немного прояснить эту ситуацию.
Примечание обозначается на диаграмме прямоугольником с уголком, загнутым справа вверху. Обычно в примечании содержатся фрагменты псевдокода.
* Зандстра М. - РНР. Объекты, шаблоны и методики программирования. 5-е издание - 2019
Оставить комментарий