Документирование объектных разработок в среде Delphi

Документация простейших объектных разработок в среде Delphi должна включать:

· эскизы форм приложения с указанием типов визуальных интерфейсных компонентов;

· диаграммы состояний интерфейса в целом;

· диаграмму объектов приложения;

· диаграмму состояний каждой формы;

· диаграмму классов для каждой формы;

· диаграмму классов предметной области программы;

· диаграмма последовательностей действий для каждой функции, доступной пользователю.

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

Пример 8.В качестве примера рассмотрим описание разработки приложения «Записная книжка». Приложение должно обеспечивать ввод имени, фамилии и телефона, а также поиск абонента по имени и/или фамилии.

Эскиз главной формы приложения приведен на рисунке 17.

Рисунок 17 - Внешний вид главного окна приложения

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

 

Рисунок 18 - Диаграмма состояний интерфейса приложения

Если каждый режим реализован на своей форме, то получаем диаграмму объектов интерфейса, представленную на рисунке 19. (Если файл записей реализовывать как объект, то объектная декомпозиция будет включать объект Файл).

Рисунок 19 - Объектная декомпозиция приложения

1. Проектирование объекта Главная форма

Проектирование объекта Главная форма включает уточнение внешнего вида с указанием компонентов экранной формы (см. рисунок 20).

 

Рисунок 20 - Экранная форма Главное меню

Для объекта формы прорабатываем диаграмму состояний и привязываем изменение состояния к событиям Delphi (см. рисунок 21).

Рисунок 21 - Диаграмма состояний интерфейса формы Главное меню

Далее проектируем диаграмму классов формы (см. рисунок 22).

 

 

Рисунок 22 - Диаграмма классов для TMainForm

2. Проектирование вспомогательных форм

Проектирование вспомогательных форм выполняем аналогично. Так проектирование формы Поиск записей показано на рисунках 23–25.

 

Рисунок 23 - Экранная форма Поиск записей

 

Рисунок 24 - Диаграмма состояний формы Поиск записей

 

Рисунок 25 - Диаграмма класса TFindForm

Взаимодействие между объектами приложения покажем с помощью диаграммы последовательностей действий (см. рисунок 26).

Рисунок 26 - Диаграммы последовательностей действий при выполнении функций:

а – создать/открыть книжку; б – записать телефон; в – найти телефон

Для метода, обрабатывающего событие FindButtonClick(), приведем диаграмму деятельности с уточнением ответственности объектов (см. рисунок 27, а) и схему алгоритма (см. рисунок 27, б). Сравнение показывает очевидное сходство этих схем, хотя, как уже упоминалось ранее, диаграмма деятельностей более информативна. В качестве упражнения сравните эту диаграмму также с диаграммой состояний формы FindForm (см. рисунок 24) и диаграммой последовательностей действий для функции Найти (см. рисунок 26, в). Хорошо видно, что данные диаграммы уточняют друг друга.

Рисунок 27 - Диаграмма активностей (а) и схема алгоритма (б) метода FindButtonClick()

2.5 Документирование объектных разработок на языке С++

В качестве примера рассмотрим программу создания движущихся изображений

Пример 9.В качестве примера рассмотрим программу создания движущихся изображений. Пусть на экране в окне программы вращаются две фигуры: Линия и Квадрат (см. рисунок 28). Единственная кнопка должна иметь название Завершить и соответственно должна закрывать окно и завершать приложение.

Рисунок 28 - Внешний вид окна приложения во время работы программы

Проектирование программы начнем с разработки диаграммы объектов. Анализ показывает, что приложение может состоять из 6 объектов:

· Окна приложения,

· Холста, на котором будет выполнено рисование,

· Кнопки завершения приложения,

· фигур Линия и Квадрат,

· Таймера.

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

Холст будет отвечать за создание, перерисовку и уничтожение фигур. Он также должен запускать Таймер, обрабатывать сигналы от него и отключать Таймер при своем уничтожении.

Диаграмма объектов приложения показана на рисунке

Рисунок 29 – Диаграмма объектов приложения

Для уточнения взаимодействия объектов построим диаграмму последовательностей (см. рисунок 30).

Реализация объектов потребует использования классов и соответственно разработки диаграммы классов.

Классы Окна (Window) и Холста (Area) наследуем от класса QWidget. Класс Кнопки (QPushButton) используем непосредственно. Классы Линии (MyLine) и Квадрата (MySquare) наследуем от абстрактного класса Figura, содержащего общие поля и методы вращающихся фигур. Для реализации Таймера класс создавать не надо. В результате получаем диаграмму классов, представленную на рисунке 31.

Рисунок 30 – Диаграмма последовательностей

Рисунок 31 – Диаграмма классов приложения

Особый интерес для С++ представляет компоновка программы. В нашем случае целесообразно использовать отдельные модули для описания классов Window и Area, а также классов предметной области. Диаграмма компоновки программы представлена на рисунке 32.

Рисунок 32 – Диаграмма компоновки приложения