Описание методов и данных классов ПО
СОДЕРЖАНИЕ
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; | свойство | Имя для поиска элемента в списке |
Отдельного пояснения методов классов в данном техническом описании не приводиться. В колонке таблицы “Примечания” указана расшифровка необходимых параметров и их значения.
(В данном разделе дано описание всех методов и свойств классов, разработанных в ДЗ. Смотрите методические указания к лабораторной работе.)