Небольшой урок UML

Где-то в конце декабря нашел интересное видео об UML на сайте modelmakertools.com и расписал совместно со своим преподавателем все действия, на русском языке в виде практической работы. Но только сейчас руки добрались до опубликования этого труда.

ModelMaker — это инструмент для визуального моделирования и рефакторинга, основанный на технологии UML 2. ModelMaker позволяет создавать и редактировать классы, создавать шаблоны кода для обеспечения создания классов с похожей функциональностью, легко создавать классы-оболочки. Возможно визуальное проектирование классов при помощи UML — подобных диаграмм классов. Имеется оригинальный редактор кода. Поддерживаются средства документирования создаваемых классов. Также есть средства просмотра зависимостей между модулями, визуализации различий в коде.

Для начала работы, необходимо:

— установить систему Delphi либо RAD Studio;

— скачать с официального сайта (http://www.modelmakertools.com/) ModelMaker и установить приложение.

Следует обратить внимание, что ModelMaker разрабатывается отдельно для C# и Pascal (Delphi). В данной статье рассматривается проектирование на примере Pascal edition, версия 11.5. Pascal edition поддерживает интеграцию с системами Delphi 4-7, Delphi 2007-2010 и Delphi XE-XE5.

В ModelMaker используется понятие модели как аналог проекта в Delphi. Рассмотрим пример разработки печи с термометром и нагревательным элементом, в котором покажем возможности прямого и обратного проектирования. Ниже перечислены основные этапы работы с ModelMaker.

1. Создается новая модель.

2. В модель помещается новый класс. При этом определяется родительский класс и указывается имя нового класса.

3. В классе определяются новые и (или) перекрываются старые свойства, методы и события.

4. Для каждой новой сущности класса программист кодирует только операторы исполняемого кода.

5. Новый класс помещается в модуль.

6. Выполняется генерация вновь созданной модели, в результате которой получается полный исходный текст модуля (прямое проектирование). Модель и файл модуля сохраняются на диске.

7. Производится синхронизация модели из файла модуля (обратное проектирование).

Рассмотрим каждый из указанных этапов более подробно.

Внимание! Перед началом работы с ModelMaker, запустите IDE Delphi (RAD Studio).

Для начала мы создаем новую модель. По умолчанию, она создается автоматически при запуске программы. Либо мы можем выбрать в меню: File -> New -> Delphi project.

uml-lesson1-1

После создания нового проекта, появляется окно, показанное ниже. Для продолжения работы нам необходимо создать новую диаграмму. Создадим диаграмму классов.

uml-lesson1-2

Для этого необходимо выбрать Add New Diagram -> Structure Diagram -> New Class Diagram. После чего появится модальное окно, в котором необходимо вписать название диаграммы – назовем ее ovens (печи).

uml-lesson1-3

После нажатия на кнопку ОК, вид окна программы немного изменится.

uml-lesson1-4

Кружком и цифрой 1 выделена область, отображающая название диаграммы Ovens. Если в проекте будут созданы еще диаграммы, то нажав на кнопку выпадающего списка, можно быстро перейти к нужной диаграмме.

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

uml-lesson1-5

В поле Class name впишем название класса TOven и нажмем кнопку OK. Таким же образом добавим еще два класса Theater и TThermometer. В итоге, наш холст проектирования будет выглядеть примерно так:

uml-lesson1-6

Далее, установим между классами ассоциацию по свойствам. Для этого нажмем на кнопку Property Association, щелкнем левой кнопкой мыши по классу TOven и протянем ассоциацию до класса THeater, где левую кнопку мыши нужно опустить.

uml-lesson1-7

На экране появится модальное окно редактирования ассоциации по свойству. Нам необходимо на вкладке стандарт указать, что класс TOven будет считывать данные с класса THeater по параметру Heater. При этом, записывать данные он не сможет. Для этого установим Read Access: Field, Write Access: None. Не нажимая на кнопку ОК, перейдем на вкладку Creational Wizard, где установим, чтобы THeater создавался и уничтожался вместе с компонентом TOven. На вкладке нам нужно нажать на кнопку Composition в графе Presets (заготовки). Не нажимая кнопки ОК, перейдем на вкладку Visualization.

uml-lesson1-8

На вкладке визуализации нам необходимо выбрать стиль отображения – композиция. После чего, нажать на кнопку ОК. После чего может выскочить окошко с предупреждающей надписью, на которой нужно нажать на кнопку Yes, после чего снова нажать на кнопку ОК.

uml-lesson1-9

Вы можете заметить, что класс TOven пополнился одним новым атрибутом Heater от класса THeater и операциями создания и уничтожения класса.

uml-lesson1-10

На следующем шаге установим ассоциацию по полю между классами TOven и TThermometer. В классе TOven будет создано поле с типом TThermometer. Для этого необходимо нажать на кнопку Field Association, на холсте проектирования левой клавишей мыши щелкнуть по классу TOven и протянуть связь до класса TThermometer, после чего отпустить левую кнопку мыши. В появившемся модальном окне выберем вкладку Creational wizard, где выберем заготовку Composition. Не нажимая кнопку ОК, перейдем на вкладку Visualization. На вкладке визуализации нам необходимо выбрать стиль отображения – композиция. После чего, нажать на кнопку ОК.

uml-lesson1-11

Теперь добавим новые методы классу THeater. Для этого выделим класс THeater и нажмем на кнопку добавления метода Add Method.

uml-lesson1-12

По нажатию на кнопку Add Method выйдет модальное окно редактирования метода, в котором необходимо указать название метода SwitchOn и нажать кнопку ОК. Аналогичным образом необходимо добавить метод SwitchOff. Таким образом в последующем в этих методах можно будет реализовать функции включения и выключения кипятильника.

uml-lesson1-13

В результате добавления методов мы получим следующий вид на холсте проектирования.

uml-lesson1-14

Следующим шагом добавим классу TThermometer новое свойство Temperature, через которое планируется в последующем снимать показания с термометра. Для этого выделим класс TThermometer и нажмем на кнопку добавления свойства Add Property.

uml-lesson1-15

По нажатии на кнопку Add Property появится модальное окно редактирования свойств, в котором необходимо указать название свойства и указать права доступа на чтение и на запись. В данном случае должны быть доступны права на чтение данных, но не на запись.

uml-lesson1-16

После нажатия на кнопку ОК, мы получим следующую картину на холсте проектирования:

uml-lesson1-17

Теперь, когда взаимодействие между классами организовано, нам необходимо сгенерировать код на основе нашей модели.

uml-lesson1-18

Для этого нужно выбрать вкладку модели, на которой мы видим список классов, не хранящихся в модулях. Для распределения классов по модулям, нам необходимо создать новый модуль. Для этого нажмем на кнопку добавления модуля.

uml-lesson1-19

После нажатия на кнопку добавления модуля выйдет окно редактирования модуля, в котором необходимо указать Алиас-путь сохранения модуля, название самого модуля и список классов, которые должны в нем содержаться. Для переноса классов в наш модуль, необходимо выделить нужные классы и нажать на кнопку добавления классов в модуль. После чего необходимо нажать на кнопку ОК.

uml-lesson1-20

После всех этих операций мы увидим на панели модулей, что все классы хранятся в модуле Ovens. Теперь разблокируем возможность генерации кода, нажав на кнопку в виде амбарного замка. Для, включения автогенерации кода, необходимо выделить модуль Ovens и нажать на кнопку Enable Auto Generation, после чего будет произведена генерации кода, а точнее сказать, скелета будущей программы. В случае наличия большого числа классов, по нажатию на значок Delphi можно перейти к нужному классу в системе RAD Studio. Это достигается благодаря глубокой интеграции программ ModelMaker и RAD Studio.

uml-lesson1-21

Пример сгенерированного кода можно рассмотреть в среде Delphi, открыв указанный файл.

uml-lesson1-22

Таким образом мы произвели прямое проектирование кода. Давайте теперь попробуем организовать обратное проектирование. Для этого добавим новый тип данных THeaterState, а также свойство State классу THeater и сохраним модуль.

uml-lesson1-23

Теперь, перейдя в ModelMaker и нажав на кнопку Synchronize model, мы увидим, что модель изменилась и у класса THeater добавилось новое свойство.

uml-lesson1-24

Теперь осталось только сохранить проект и наполнить модуль ovens.pas необходимой логикой для его полноценной работы.

При желании, вы можете скачать файл в формате MS Word по ссылке

JohnnySuperb

Человек с разными склонностями и потребностями..

Добавить комментарий