Проектирование структуры программы

Составление начальной иерархии и структуры классов

Это шаг 1 этапа проектирования.

Б. Страуструп ввел термин компонента в качестве единицы проектирования: «Обычно разрабатывается сразу множество взаимосвязанных классов. Такое множество часто называют библиотекой классов или компонентой».

Все классы можно условно разделить на две группы: классы предметной (прикладной) области и системные классы (классы этапа реализации). Классы предметной (прикладной) области непосредственно отражают понятия из прикладной области, т.е. понятия, которые использует пользователь для описания задач.

Системные классы – это понятия, которые применяют программисты для описания этапа реализации программы.

Разработка компоненты включает следующие этапы:

- проектирование структуры компоненты, включающее проектирование структурной схемы программы, представляющей собой иерархию классов компоненты, и интерфейсов классов;

- реализация (программирование) компоненты.

Этап проектирования структуры компоненты представляет собой итерационный процесс и включает следующие подэтапы:

- выбор классов компоненты: в качестве имен классов взять названия планово-учетных документов.

- определение состава классов: в качестве элементов-данных взять реквизиты документа, в качестве элементов-функций - набор операций (задач) по обработке документа.

- составление начальной иерархии классов: выявить взаимозависимость документов и спроектировать структурную схему компоненты, используя наследование и полиморфизм.

Рассмотрим предметную область программы. Выберем в качестве имен классов входящие в условие задачи наименования документов. В нашем случае - это «Акты», «Справочник расценок», «Ведомость», и,следовательно, классы - это akt, cena, ved. Класс ved является производным классов akt и cena. Начальная модель построения программы представляет собой иерархию трех классов (рис.4.2).

CAkt CCena

\ /

CVed

Рис. 4.2. Начальная модель построения программы

Определим для каждого класса совокупность элементов-данных и элементов-функций для их обработки.

Во-первых, каждый класс содержит реквизиты документа:

- класс CAkt – CString Tabn, CString Razrjad, CString VidRab, CString Objem;

- класс CCena – CString Vid, CString Rascenka;

- класс CVed - CString Tabn, CString Razrjad, CString Vid, CString Objem.

Во-вторых, по условию задачи требуется хранить исходные документы (Акты и Расценки) в базе данных с индексной организацией. Следовательно, необходимо иметь в классах akt и cena структуры индексных массивов (struct tip_index) и элементы-функции для их обработки: init_ind (инициализация элемента), init_kol (инициализация количества элементов), dob_ind (добавление элемента), poisk_ind (поиск элемента), cor_ind (корректировка элемента. Необходимы функции открытия файлов данных и создания индексных массивов init().

В-третьих, необходимо выполнять с помощью подменю следующие операции над исходными документами ("Акт", "Расценка"): создание, просмотр, поиск, замена, удаление. Итак, для классов akt и cena необходимы функции sozdanie - для ввода нового документа в базу данных, функции zapis_zap(int) и chtenie_zap(int) для записи и чтения документов из базы данных, функции Zamena (int), Udalenie(int).

Реорганизация иерархии и структуры классов

Это шаг 2 этапа проектирования. При реорганизации иерархии и структуры классов применяют четыре процедуры:

- обобщение (декомпозиция классов);

- расщепление (локализация классов);

- слияние (объединение классов);

- использование библиотек классов.

Обобщение (декомпозиция классов) – это выявление в группе классов общих элементов и вынесение их в общий базовый класс. Признаками необходимости обобщения являются:

- общая схема использования;

- сходство между наборами операций;

- сходство реализации.

Расщепление (локализация классов) – это разделение класса на несколько классов. Расщепление применяется в следующих случаях:

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

- класс содержит ряд несвязанных между собой функций или набор независимых друг от друга данных.

Слияние (объединение классов) – это объединение нескольких небольших, но тесно взаимодействующих классов в один. Таким образом, взаимодействие будет скрыто в реализации нового класса.

Использование библиотек классов – это интегрирование классов в новый проект из существующего проекта. Чем больше готовых библиотечных классов будет использовано в программе, тем меньше кода придется писать при реализации программы.

Анализ структуры классов akt и cena позволяет выделить их общую часть, относящуюся к индексному массиву, в новый базовый класс ind. Класс ved, являясь производным от классов akt и cena, наследует элементы-данные этих классов. Поэтому, удалим их из класса ved.

Реорганизованная иерархия классов - на рис. 4.3.

CIndex

/ \

CAkt CCena

\ /

CVed

Рис. 4.3. Реорганизованная иерархия классов

Класс ved необходим только для создания выходной ведомости и не имеет никаких других функций. Поэтому, можно упростить структурную схему программы, упразднив класс ved, а выходная ведомость может быть реализована функцией диалогового окна вывода ведомости. Тогда выбранная иерархия классов может быть представлена на рис. 4.4.

CIndex

/ \

CAkt CCena

Рис. 4.4. Окончательная иерархия классов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: