======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. {{:mdd:123.png|}}\\ На рисунке ниже можно увидеть перевозку партии в случае Responsibility-driven design.\\ {{:mdd:1234.png|}}\\ //На объекты, которые используются другими объектами, указывает стрелка. Объекты, заключенные в прямоугольник, представляют работу. Объекты, состояние которых установлено или запрошено, заключены в овал// ====Ниже приведена таблица сравнения соответствующих классов двух методов:==== ^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)** число атрибутов класса, взвешенных по их размеру {{:mdd:снимок_экрана_2016-12-24_в_21.38.57.png|}}\\ На рисунке ниже мы можем явно увидит разницу в количестве требуемых сообщений\\ {{:mdd:снимок_экрана_2016-12-24_в_21.40.58.png|}}\\ Это происходит из-за того, что в 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.\\