СОДЕРЖАНИЕ
1. Общие сведения о программном обеспечении. 3
2. Модульная структура программного обеспечения. 3
3. Диаграмма классов ПО.. 4
4. Описание методов и данных классов ПО.. 4
5. Данные и файлы данных программного обеспечения. 11
6. Основные алгоритмы методов классов ПО.. 12
6.1. Алгоритм вычисления признака ремонта. 12
7. Описание процедур и функций ПО.. 13
8. Описание процесса отладки классов. 13
9. Классы и методы, переопределяемые в ПО.. 13
Общие сведения о программном обеспечении
В данном документе дано техническое описание программного продукта: система классов для работы с улицами и домами. Шифр разработки программной системы – DZ_OOP. Техническое описание включает: описание модулей; описание классов, их методов и свойств; описание диаграммы классов; описание алгоритмов методов и процедур.
Данная система классов предназначена для решения задач, в которых необходимо учитывать объекты типа улица и дом с соответствующими свойствами. В частности система классов может обеспечивать решение задач: оценки ремонта домов и улиц, подсчета числа жителей, квартир и этажей в домах. Система классов предназначена для обеспечения удобной работы с этими объектами, высокий уровень надежности программ, функциональных возможностей, а также сокращение сроков разработки и реализации программных продуктов, где необходимо использовать подобные объекты.
(В данном разделе дается шифр программной системы, перечень материала, включенного в документ. Характеризуется кратко назначение системы классов. Смотрите методические указания к лабораторной работе.)
Модульная структура программного обеспечения
Система классов включена в один основной и один вспомогательный модуль, характеристики которых приведены в таблице, расположенной ниже.
Состав набора исходных файлов:
Название | Размер и тип | Описание | Примечание |
DZ_2kurs.h | 32,4 Кб, текстовый файл | Описания классов, методов и общих данных | Содержит все необходимые описания для использования программного продукта |
DZ_2kurs.cpp | 12,9 Кб, текстовый файл | Тестовая программа | Программа предназначена для проверки работоспособности системы классов и проведения приемно-сдаточных испытаний |
DZ_2kurs.exe | 114,7 Кб, исполнимый файл | Тестовая программа | Содержит все необходимое для автономного выполнения в режиме командной строки. |
(В данном разделе приведена модульная структура ПО и основные характеристики ПО. Смотрите методические указания к лабораторной работе.)
Диаграмма классов ПО
Ниже приставлена диаграмма классов системы классов улиц и домов разработанного программного обеспечения (ПО).
Классы имеют следующее назначение:
Класс Obj - абстрактный класс для наследования общих свойств объектов системы классов.
Класс listElem - класс для организации списков, задающий объекты, которые будут включаться в списки.
Класс List - класс для создания объектов, которые обеспечивают построение и работу со списками (включение, просмотр, удаление, печать и др.).
Класс AbsStreet - абстрактный класс, в котором учтены общие свойства улиц.
Класс AbsHome - абстрактный класс, в котором учтены общие свойства домов, размещаемых на улицах.
Класс Street - класс улиц, для создания объекта типа улица, позволяющий создавать объекты, учитывающие свойства: название, список домов, число домов и др.
Класс Home - класс дома, позволяющий создавать объекты описывающие дома, в которых учтены свойства: номер, число квартир, число жителей, признак ремонта и др.
(В данном разделе приведена диаграмма класоов ПО и назначенеи отдельных классов на содержательном уровне. Смотрите методические указания к лабораторной работе.)
Описание методов и данных классов ПО
Описание классов, их свойств и методов приведены в таблице.
№ | Прототип функции или описание свойства | Тип члена | Назначение |
Общие описания | |||
enum BOOL {false=0, true}; | перечисление | ||
static BOOL DestructorDeleteObj; | Глобальная переменная | Признак удаления объектов | |
enum HomeType{fast, multiple, complex}; | перечисление | Тип дома: простой, многокорпусный, сложный | |
enum StreetType{one, two, more }; | перечисление | Тип улицы: односторонняя, двухсторонняя, много полос | |
enum TypeAddDel {tail, head, Number,NumbAfter, NumbCurrent, NumbBefore, AssbAfter, AssCurrent, AssBefore, createObj, nocreateObj, deleteObj, nodeleteObj }; | перечисление | Режим удаления объектов: голова, хвост, номер. | |
#define StreetClass 1 | Переменная этапа компиляции | Номер класса улицы (1) | |
#define HomeClass 2 | Переменная этапа компиляции | Номер класса дома (2) | |
Класс Obj –абстрактный класс для наследования объектами, включаемыми в списки | Абстрактный класс | Для наследования объектов включаемых в списки | |
char *name | свойство | Имя для поиска | |
int no | свойство | Номер для поиска | |
Obj() | конструктор | ||
~Obj(){ | деструктор | ||
virtual char *className() = 0; | Чистая виртуальная функция | Имя класса | |
virtual void printOn(ostream &) = 0; | Чистая виртуальная функция | Печать объекта | |
virtual int classType() = 0; | Чистая виртуальная функция | Тип объекта | |
КлассAbstrHome –абстрактный класс для наследования классов домов | Абстрактный класс | Задает общие свойства всех домов | |
virtual int classType() = 0; | Чистая виртуальная функция | Имя класса | |
virtual char *className() = 0; | Чистая виртуальная функция | Печать объекта | |
virtual void printOn(ostream &) = 0; | Чистая виртуальная функция | Тип объекта | |
AbstrHome(): Obj(){}; | конструктор | ||
~AbstrHome(){}; | деструктор | ||
Класс AbstrStreet –абстрактный класс для наследования классов улиц | Абстрактный класс | Задает общие свойства всех улиц | |
virtual int classType() = 0; | Чистая виртуальная функция | Имя класса | |
virtual char *className() = 0; | Чистая виртуальная функция | Печать объекта | |
virtual void printOn(ostream &) = 0; | Чистая виртуальная функция | Тип объекта | |
AbstrStreet (): Obj(){}; | конструктор | ||
~AbstrStreet (){}; | деструктор | ||
Класс Home –класс для создания объектов домов, включаемыхых в объекты улиц | Класс | Создание объектов типа дом | |
virtual int classType(){ return HomeClass; } | виртуальная функция | Задает тип дом числовой | |
virtual char *className(){ return "Home"; } | виртуальная функция | Задает класс дом символьный | |
virtual void printOn(ostream & out) | виртуальная функция | Печать в стандартный поток | |
Home() | конструктор | ||
Home(Home & H) | конструктор | Новый на основе ссылки на объект типа дом | |
Home(Home * pH) | конструктор | Новый на основе указателя на объект типа дом | |
Home(const char *HomName, const char *Number) | конструктор | Новый с параметрами: имя и номер для поиска | |
Home(const char *HomName, const char *Number, int Numb) | конструктор | Новый с параметрами: имя дома, номер дома и номер для поиска | |
Home(const char *HomName, const char *Number, int Numb, int Etag, int Men=0,HomeType Type = fast,int Apart=0) | конструктор | Новый с параметрами: имя дома, номер дома, номер для поиска, этажность, число жителей, тип и число квартир | |
~Home() | деструктор | ||
void setName(const char *HomName, const char *Number=NULL) | метод | Установить имя дома | |
const char *getName() | метод | Получить имя дома | |
const char *getNumb() | метод | Получить номер дома | |
int getNo() | метод | Получить номер дома для поиска | |
void getParam(int & iH, int & Etag,int & Men,HomeType & Type, int & Apart) | метод | Получить параметры: номер дома, этажность, число жителей, тип и число квартир | |
void setParam(int iH, int Etag,int Men,HomeType Type, int Apart) | метод | Задать параметры: номер дома, этажность, число жителей, тип и число квартир | |
void setAllParam(const char *HomName, const char *Number, int iH, int Etag, int Men,HomeType Type, int Apart, BOOL rem = false) | метод | Задать все параметры: имя дома, имя дома для поиска номер дома, этажность, число жителей, тип, число квартир и признак ремонта | |
friend Home & operator +(Home & H1, Home & H2) | Дружественная функция - операция | Складываются два дома | |
Home operator =(Home & H); | Операция | Перегрузка оператора присваивания домов | |
char*Home_Number | свойство | Номер дома (имя) | |
intiHome | свойство | Номер дома числовой | |
intEtagCount | свойство | Число этажей | |
intMenCount | свойство | Число жителей | |
HomeType TypeHome | свойство | Тип дома (перечисление: простой, многокорпусный, сложный) | |
intNumbApartament | свойство | Число квартир | |
BOOLHomeRemont; | свойство | Признак необходимости ремонта дома | |
friendStreet | Дружественный класс | ||
Класс Street –класс для создания объектов улиц, в которых можно размещать в определенной последовательности дома и устанавливать свойства улиц. | Класс | Объекты класса имеют набор свойств и методов для реализации задач учета улиц с домами | |
Street(); | конструктор | ||
Street(const char *sName); | конструктор | Создание улицы с названием | |
Street(const char *sNumbSearch, const char *sName); | Конструктор | Создание улицы с названием и именем для поиска | |
Street(int Num); | Конструктор | Создание улицы с номером | |
Street(const char *sName, int Num); | Конструктор | Создание улицы с именем и номером | |
Street(Street & S); | Конструктор | Создание улицы на основе другой (на основе ссылки) | |
~Street() { }; | Деструктор | ||
void add(Home *pH, TypeAddDel = tail, int Numb = 1, TypeAddDel = createObj); | метод | Добавление дома на улицу с учетом режима добавления (голова, хвост и номер) и признака удаления объектов | |
void del(Home *pH, TypeAddDel = tail, int Numb = 1, TypeAddDel = nodeleteObj); | метод | Удаления дома с улицы с учетом режима удаления (голова, хвост и номер) и признака удаления объектов | |
virtual int classType() { return StreetClass; } | виртуальная функция | Тип класса числовой | |
virtual char *className() { return "Street"; } | виртуальная функция | Тип класса символьный | |
virtual void printOn(ostream & out); | виртуальная функция | Печать объекта улицы в стандартный поток | |
int GetNumberHome(); | метод | Получить число домов на улице | |
int GetNumberMens(); | метод | Получить число жителей на улице | |
int GetNumberApart(); | метод | Получить число квартир на улице | |
char * GetNameStreet(){ return Name_Street;}; | метод | Получить название улицы | |
char * GetKeyNameStreet(){ return name;}; | метод | Получить номер дома символьный | |
int GetNumbStreet(){ return NumberStreet;}; | метод | Получить номер дома числовой | |
int GetKeyNumbStreet(){ return no;}; | метод | Получить номер дома числовой для поиска | |
void SetNameStreet(const char * NameStr); | метод | Установить название улицы | |
void SetKeyNameStreet(const char * sName); | метод | Установить имя улицы для поиска | |
void SetNumbStreet(int n); | метод | Установить номер улицы | |
void SetKeyNumbStreet(int k); | метод | Установить номер улицы для поиска | |
BOOL GetRemont(); | метод | Получить признак ремонта домов на улице | |
BOOL GetRemontStr(){ return RemontStreet;}; | метод | Получить признак ремонта улицы | |
void SetRemontStr(BOOL rS); | метод | Установить признак ремонта улицы (false, true) | |
StreetType GetStreetType(); | метод | Получить тип улицы: one (односторонняя), two (дванаправления), more (много полос) | |
void SetStreetType(StreetType t); | метод | Установить тип улицы: one, two, more | |
friend Street & operator +(Street & X, Street & Y); | Дружественная функция | Операция сложения двух улиц | |
Street operator =(Street & S); | Операция | Перегрузка операции присваивания двух улиц | |
char *Name_Street; | свойство | Название улицы | |
int NumberStreet; | свойство | Номер улицы | |
int Homes_num; | свойство | Число домов на улице | |
BOOL Remont; | свойство | Признак необходимости ремонта домов улицы | |
BOOL RemontStreet; | свойство | Признак ремонта самой улицы | |
StreetType StrType; | свойство | Тип улицы:one (односторонняя), two (дванаправления), more (много полос) | |
Street * ListOfNear; | свойство | Список соседних улиц (зарезервировано) | |
Класс List –класс для создания объектов списков предназначенных для сохранения и выборки элементов списка. | Класс | Контейнерный класс для упорядоченного хранения домов, добавляемых на улицу | |
List (); | Конструктор | Пустого объекта | |
List (List & d); | Конструктор | Создание списка на основе другого | |
~List (); | Деструктор | ||
void AddHead(listElement * ElemList, TypeAddDel t=createObj); | Метод | Добавить в голову списка элемент в режиме создания объекта: createObj(Новый объект для элемента создается), nocreateObj (Новый объект для элемента не создается) | |
void RenumberList(); | Метод | Новая нумерация списка | |
void AddTail(listElement * ElemList, TypeAddDel t=nodeleteObj); | Метод | Добавить в хвост списка элемент в режиме создания объекта: createObj(Новый объект для элемента создается), nocreateObj (Новый объект для элемента не создается) | |
void AddNumber(listElement * ElemList, int Numb, TypeAddDel t=createObj); | Метод | Добавить в список по номеру элемент в режиме создания объекта: createObj(Новый объект для элемента создается), nocreateObj (Новый объект для элемента не создается) | |
void AddAfterNumb(listElement * ElemList, int Numb, TypeAddDel t=createObj); | Метод | Добавить в список после номера элемент в режиме создания объекта: createObj(Новый объект для элемента создается), nocreateObj (Новый объект для элемента не создается) | |
void UpdateNumb(listElement * ElemList, int Numb) | Метод | Изменить номер элемента | |
void AddBeforeNumb(listElement * ElemList, int Numb, TypeAddDel t=createObj); | Метод | Добавить в список перед номером элемент в режиме создания объекта: createObj(Новый объект для элемента создается), nocreateObj (Новый объект для элемента не создается) | |
Obj * GetElemNumb(Obj ** pO, int Numb); | Метод | Получить элемент списка по номеру (Numb) | |
Obj * GetFirst(Obj ** pO); | Метод | Взять первый элемент списка | |
Obj * GetLast(Obj ** pO); | Метод | Взять последний элемент списка | |
void DelHead(Obj ** pO, TypeAddDel t=nodeleteObj); | Метод | Удалить из головы списка элемент в режиме удаления объекта: deleteObj (объект удаляемого элемента списка удаляется), nodeleteObj (объект удаляемого элемента списка не удаляется) | |
void DelTail(Obj ** pO, TypeAddDel t=nodeleteObj); | Метод | Удалить из хвоста списка элемент в режиме удаления объекта: deleteObj (объект удаляемого элемента списка удаляется), nodeleteObj (объект удаляемого элемента списка не удаляется) | |
void DelNumb(Obj ** pO,int Numb, TypeAddDel t=nodeleteObj); | Метод | Удалить из списка элемент по номеру в режиме удаления объекта: deleteObj (объект удаляемого элемента списка удаляется), nodeleteObj (объект удаляемого элемента списка не удаляется) | |
void ClearList(TypeAddDel t=nodeleteObj); | Метод | Очистка списка в режиме удаления объектов:deleteObj (объект удаляемого элемента списка удаляется), nodeleteObj (объект удаляемого элемента списка не удаляется) | |
listElement * GetPrevElem(listElement * pCurr); | Метод | Получить предыдущий элемент списка на основе текущего (pCurr) | |
listElement * GetCurrElemForNumber(int Numb); | Метод | Получить элемент списка по номеру (Numb) | |
int GetNubmerElem(); | Метод | Получить число элементов списка | |
BOOL TestInList(Obj * ob); | Метод | Проверка наличия в списке объекта (ob) | |
void printOn(ostream & out); | Метод | Распечатать список | |
List operator=(List & d); | Операция | Перегрузка оператора присваивания двух списков | |
int CurrentNumb; | Свойство | Текущий номер элемента списка | |
char * CurrentAssName; | Свойство | Текущий имя для поиска элемента списка | |
listElement *Head; | Свойство | Указатель на голову списка | |
listElement *Tail; | Свойство | Указатель на хвост списка | |
int NumberElem; | Свойство | Число элементов в списке | |
Класс listElement –класс для создания элементов списка, используемых в классе List и предназначенных для сохранения ссылок на дома | Класс | Элемент списка. Вспомогательный класс для организации списков. В данной версии зависит от типа объекта включаемого в список (Home) | |
listElement() | конструктор | ||
listElement(Home *d) | конструктор | Конструктор копирования нового элемента на основе указателя на другой элемент | |
~listElement() | деструктор | ||
void printOn(ostream & out) | метод | Вывод содержимого элемента в стандартный поток | |
listElement *next; | свойство | Следующий элемент списка, если NULL,то нет следующего | |
listElement *prev; | свойство | Предыдущий элемент списка, если NULL,то нет следующего | |
Home *Elem; | свойство | Указатель на тип объекта | |
int nElem; | свойство | Номер элемента в списке | |
char * AssNum; | свойство | Имя для поиска элемента в списке | |
Отдельного пояснения методов классов в данном техническом описании не приводиться. В колонке таблицы “Примечания” указана расшифровка необходимых параметров и их значения.
(В данном разделе дано описание всех методов и свойств классов, разработанных в ДЗ. Смотрите методические указания к лабораторной работе.)