How Designs Differ
Оригинал: Rebecca J. Wirfs-Brock
http://www.wirfs-brock.com/PDFs/How%20Designs%20Differ.pdf
Введение
В данной статье мы рассмотрим как, чем и почему отличаются между собой Responsibility-Driven design метод и немного улучшенная версия Shlaer/Mellor метода, Data-Drive design метод.
Постановка проблемы разработки Пивоваренного завода
Различия в методах будем искать на примере работы пивоваренного завода.
Приложение пивоварни управляет инвентаризацией, библиотекой пивных рецептов, а также производством пива. Производственная система контролирует создание, движение и розлив пива. Пиво изготавливается по рецепту, все ингредиенты смешиваются в чане. После того, как партия смешана, он перемещается в бродильный чан. После того, как закончилось брожение, пиво перемещается в другой чан для розлива. Пивоваренный завод включает в себя сеть взаимосвязанных труб и чанов, перечень ингредиентов, коллекцию рецептов, и партии пива.
Дизайнеры спроектировали упрощенную систему пивоварни. Они намеренно не брали в внимание пользовательский интерфейс и операционную систему. Они ограничили модель только поведениями объектов системы, которые имели тип int, bool, char или string.
Сравнение классов и ответственностей
Имена объектов одинаковы для обоих методов: Чан, Партия, Клапан, Рецепт, Ингредиент. Даже классы, управляющие передвижениями партий, имеют схожие имена. Однако, процессы выполнений заданий сильно отличаются.
На рисунке ниже можно увидеть перевозку партии в случае Data-driven design.
На рисунке ниже можно увидеть перевозку партии в случае Responsibility-driven design.
На объекты, которые используются другими объектами, указывает стрелка. Объекты, заключенные в прямоугольник, представляют работу. Объекты, состояние которых установлено или запрошено, заключены в овал
Ниже приведена таблица сравнения соответствующих классов двух методов:
Responsibility-Driven Class | Стереотипы | Data-Driven Class | Стереотипы |
---|---|---|---|
Порядок перевозки | Координатор | Запланированная перевозка | Контролер |
Система труб | Обсепечивает сервис | Контейнер | Владеет информацией |
Чан | Владеет информацией | Чан | Обеспечивает сервис |
Клапан | Владеет информацией Обеспечивает сервис | Клапан и cоединитель | Владеет информацией |
Партия | Владеет информацией | Действующая партия | Владеет информацией |
Насос | Обеспечивает сервис | Насос | Обеспечивает сервис |
Пивоварня | Координатор | Пивовар | Контролер |
Труба | Владеет информацией | Труба | Владеет информацией |
Количественные меры в дизайне
Chidamber и Kermerer предложили 7 базовых мер, которые сравнивают различные методы дизайна:
- Weighted Methods per Class (WMC) мера сложности класса, задается сложностью его атрибутов и методов
- Depth of Inheritance (DIT) для класса определяет число его классов-предков
- Number of Children (NOC) для класса определяет число его детей-классов
- Coupling between Objects (CBO) для класса показывает число классов, которые он использует
- Response For a Class (RFC) для класса показывает число его собственных методов и методов, которые он вызывает
- Lack of Cohesion in Methods (LCOM) является мерой степени сходства между методами
- Weighted Attributes per Class (WAC) число атрибутов класса, взвешенных по их размеру
На рисунке ниже мы можем явно увидит разницу в количестве требуемых сообщений
Это происходит из-за того, что в Data-Driven методе два класса Пивовар и Запланированная перевозка отправляют много сообщений и знают много о других объектах. В Responsibility-Driven методе основные задания распределены между несколькими классами. Как раз этот принцип с более высоким уровнем коммуникации привел к большинству различий в методах.
Вывод
Основные различия между этими методами:
Responsibility-driven design | Data-driven design |
---|---|
делегированный стиль управления | централизованная архитектура управления |
несколько 'умных' объектов, которые смешивают стереотипы | много простых 'владельцев информации' |
используют координаторы, а не контролеров | настройка контролеров и запрос к владельцам информации |
меньше сообщений | больше низкоуровневых сообщений |
наследственное поведение | наследственные атрибуты |
Список литературы
1. R. Sharble and S. Cohen, “The Object-Oriented Brewery: A Comparison of Two Object- Oriented Development Methods,” pp. 60-73, Software Engineering Notes, vol. 18 (2).
2. R. Sharble and S. Cohen “the Object-Oriented Brewery: A Comparison of Two Object- Oriented Development Methods,” Boeing Technical Report no. BC2-G4059, October, 1992.