Я создаю проекты с Symfony2 / Doctrine и пытаюсь реализовать черты.
Пока что нет проблем при небольших испытаниях, но я обычно делаю диаграммы классов и последовательностей UML, прежде чем углубляться в сложные проекты.
Какой объект (ы) дизайна UML следует использовать для символизации особенностей PHP, которые, насколько я знаю, можно рассматривать как поведение? Есть ли какой-нибудь чистый способ сделать это?
Большое спасибо за ваши ответы!
никола
PHP
Trait
в основном UML Абстрактный класс или же Шаблон класса UML подключен к используемому в классе с UML Отношения Обобщения используя множественное наследование обозначение
Смотрите также:
Рисунок «Диаграмма UML с чертой» в статье Брендан Бейтс: Черты: правильный путь
Программисты: Есть ли в UML представление для миксинов или черт?
Руководство по PHP → Справочник по языку → Классы и объекты → Черты
По состоянию на
PHP
5.4.0,PHP
реализует метод повторное использование кода называетсяTraits
,
Traits
механизм повторного использования кода в языках с одним наследованием, таких какPHP
,Trait
намеревается уменьшить некоторые ограничения одиночного наследования предоставляя разработчику возможность свободно использовать наборы методов в нескольких независимых классах, находящихся в разных иерархиях классов. Семантика сочетанияTraits
и классы определены таким образом, чтобы уменьшить сложность и избежать типичных проблем, связанных с множественным наследованием иMixins
,
Trait
похож на класс, но предназначен только для группирования функциональных возможностей детальным и последовательным образом. это невозможно создать экземплярTrait
сам по себе. Это дополнение к традиционному наследованию и позволяет горизонтальную композицию поведения; то есть применение членов класса без необходимости наследования
В самой ранней статье, в которой я видел объяснение ролей / черт, они представлены в UML линией, соединяющей роль / черту с методом / функцией внутри класса. http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf
На мой взгляд, черта PHP — это не что иное, как определение протокола, которое вы найдете в других языках. Протокол является некоторым функциональным расширением класса. Вы обычно моделируете это с интерфейсом (Черта) и классом, использующим его, где вы рисуете <> Отношение от класса к Черте.