Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_5588.html
 

UML моделирование в Delphi. Часть 2.

Опубликовано 13.09.2012 г. 18:44

В прошлой статье я начал рассматривать инструменты UML моделирования в Delphi с точки зрения человека, который ни UML моделирование ни эти инструменты ранее не использовал. Так что в этот раз продолжим.

В общем то остановились мы на том, что построили небольшую диаграмму классов, где автоматически проставились связи. Если на такую диаграмму необходимо добавить класс/тип данных из другого пространства имен, то добавляется ярлык. При этом на самой картинке появляется соответствующий графический значок. Так можно добавить ярлык на класс, или вложенный класс, а также типы данных из подключенных модулей (тех что находятся в группе References. Т.е. моделей, которых нет в дереве проекта, но они подключены в uses). Добавить ярлык можно через контекстное меню Add -> Shorcut, либо просто перетаскиванием объекта на диаграмму. В общем говоря ярлык сигнализирует нам о том, что связь с элементом данных есть, но сам этот элемент находится в другом пакете/пространстве имен. Напомню, что пространствами именн являются, например, непосредственно модули. Но если имя модуля само по себе будет содержать пространства имен, то появится вложенность. Например, если мы добавим в uses WinApi.ShellApi, то в ветке References у нас появятся сначала пакет WinApi, а затем вложенные пакеты Windows и ShellApi.

Контекстное меню ярылка снабжено специальной командой "Navigate to Element", которая находит нужный элемент в дереве ModelView. В принципе это весьма практично, поскольку иначе искать бы его пришлось совсем в другой части дерева, и могло бы вызвать затруднения. С помощью ярлыков на диаграмму можно добавлять родительские классы. Например, на картинке из прошлого примера кликнув в имя родителя TInterfacedObject у класса TMyAttribute, появится контекстное меню, позволяющее добавить родителя на диаграмму в виде ярылка, либо же добавить родителя вместе со всем его деревом наследования. Классы из системных модулей заблокированы от редактирования, и имеют соответствующий значок.

На диаграммы вы можете добавлять примечания и изображения, связывая их с элементами (или не связывая). Для связи используются элементы Note link или Image link доступные на панели инстурментов (сами заметки и изображения помимо панели инструментов можно добавить через контекстное меню). Такой функнционал имхо тоже достаточно полезен, когда над проектом работают и технические специалисты, и не совсем технические (: Т.е. увеличивает  наглядность схемы. Немного странным является начальные настройки изображений, свойство Сохранять пропорции отключено. Поэтому добавив добавив изображение, оно примет размеры элемента, и весьма искажается.

Вообще говоря, существует достаточно большое множетсво настроект отображения диаграмм. Вы можете настроить и вид "по-умолчанию" и каждую контректную диагрмму проекта/группы проектов. Различные заливки фона, изображения фона, шрифты, цвета и так далее. Это все хорошо и может, конечно, понадобится. Одна вещь при этом вызывает культурный шок. Чтобы открыть настройки диаграмм почему-то необходимо открыть Tools->Options->Modeling->Diagram->*, там далее выбрать нужную диаграмму и потом проводить настройки. Почему нельзя было просто в контекстное меню диаграммы добавить пункт "Options"?

Диаграммы имеют функционал автопозиционирование элементов. Доступны несколько вариантов позиционирования, автоматического подбора размеров и т.п. Есть весьма примечательная функция Brief View, в данном режиме отображаются лишь заголовки ваших элементов, без внутренностей. Вообще данный пункт меню должен работать как переключатель (если верить справке), однако он талько включает краткий режим работы. Чтобы вернуть все обратно придется использовать связку Expand All/Collapse All. Автоматическое размещение элементов применяется не только к диаграмме в целом, его можно применить к выбранной группе объектов. Тут, кстати, можно заметить, что при выделении группы объектов, пункт Brief View работает как надо. Стрелки связей на диаграмме можно изменять, добавляя промежуточные точки. А с помощью пунктов Route Links эти промежуточные точки можно быстро удалить. Если вы применяете авторазмещение ко всей диаграмме, то у вас есть на выбор несколько алгоритмов размещения. Выбор алгоритма производится все там жем в Tools->Options ... Layout. Доступны несколько вариантов. На маленьких диаграммах не особо понятно в чем различия, но древовидную диаграмму сразу можно отличить :) Кому интересно почитать о вариантах позиционирования и их настройках (а их весьма много) вам сюда. Как вывод - если вы захоите как то изменить вид диаграммы (визуально/позицинирование), у вас будет возможность это сделать, будьте уверены.

Следующей интересной функцией явялеются ссылки. Ссыкли достпны через контекстное меню диграммы или элемента Hyperlinks. Они бывают трех видов: 1) ссылки на диграмму или элемент 2) ссылка на файл (может быть относительным к папке проекта, что весьма удобно) 3) URL. Таким образом к диагрмме вы можете привязать ссылки на внешние данные. Либо создавать последовательность переходов между диаграммами, что упрощает навигацию, особенно при показе диагрммы кому-нбудь, и может служить для построения логических связей переходов, например, между общей диаграммой и более детальными и т.д.

OCL ограничения для меня пока что остаюся непонятной темой. Суть вроде как в том, что мы можем добавить ограничения на диаграмму в целом, или к классу. Варажаются они в текстовой форме, и отображаются на диграмме аналогично примечаниям. Ссылка на ограничение заносится в исходныйкод в виде тэга XML документации. Классы, имеющие ограничение, помечаются зеленым значком.

Вообще следует сказать, что в редакции Pro доступны только диагрммы класосв, а полная поддержка UML присутствует в старших редакциях Delphi (Enterprise+), где так же доступна библиотека паттернов объектного проектирования. Вы можете использовать существующие, а также создавать свои шаблоны (в какой то мере можно было для этих целей использовать репозиторий/сохраненные шаблоны). По использованию паттернов можно написать отдельную статью, так что заострять внимания на этом не буду. Все предсталвенные паттерны подробно описаны в книге "Приемы объекто ориентированного проектирования. Паттерны проектирования". Со списком можно ознакомиться в wiki. Мне, если честно, книга не понравилась (: Давно лежит на столе, но прочитал только треть. Не понравилась она тем, что авторы взяли одну задачу, и пробуют применить к ней разные паттерны. Имхо не самый удачный вариант изложения. Лучше  бы в каждый паттерн рассматривали на отдельном примере. В таком случае можно было бы и пример более удобный подобрать, и читатель не путался бы. В общем может когда-нибудь я доизучаю эти паттерны. Книга в оригинале, если мне память  не изменяет, от 1977 года, так что представляет классические подходы, котороые не теряют своей актуальности.

Для любителей использовать различные сочетания клавиш редактор диаграмм предосталвяет таковые. Отметить можно функции сворачивания/разорачивания узлов (стрелками вверх/вниз), Добавление нового класса  (Ctrl+L) или интерфейса (Ctrl+Shift+L) на диграмму,  добавление метода (Ctrl+M) или поля (Ctrl+W) для класса, ну и добавление новой диаграммы (Ctrl+Shift+D). Полный список сочетаний можно просмотреть в справке.

Среди типов диграмм (UML 1.5) доступны следющие:

  1. Use Case Diagrams - диаграмма вариантов использования (прецедентов). Данный тип диаграмм может быть полезен при определении функциональных возможностей и требований, общении с заказчиком/клиентом, формировании тестов.
  2. Class Diagrams - Диаграмма классов, отображает структурную схему системы, показывая классы, интерфейсы системы и т.п., а также зависимости и отношения между ними (но не то, как эти взаимодействия реализуются).
  3. Statechart Diagrams - диаграмма состояний, показывает возможные состояния объекта, и события которые к ним приводят.
  4. Activity Diagrams - диаграмма деятельности, по сути своей - всем хорошо известная блок схема выполнения процесса.
  5. Component Diagrams  - диаграмма компонентов представляет физическую архитектуру системы, разделяя ее на составляющие компоненты и показывая связи (предоставление и использование сервисов компонентов) между ними.
  6. Deployment Diagrams - диаграмма развертывания
  7. Interaction Diagrams 

Для интереса попробовал создать диаграмму одного из модулей рабочего проекта (модуль редактирования данных, который я упомянал в статье с вопросом про отладку анонимных методов). Диаграмма делает процесс изучения куда более наглядным и понятным. Так что если теперь потребуется разбираться в новых проектах, или объяснять кому либо существующие, то всегда буду строить диаграммы классов. Кстати, не встречал в документации упоминаний о том, что generic-классы маркируются литерой T в правом углу.

Метки:  UML 

Комментарии

Mike Sutton
26.09.2012 в 23:18
Hi is that Andrey Terekhov? Sorry for OT post. I'm offering a free copy of my MonkeyStyler FireMonkey style editor software to all MVPs. Email me if interested.
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно