МУ_ДЗ_2014 (Методические указания к лабораторным работам)
Описание файла
Файл "МУ_ДЗ_2014" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Онлайн просмотр документа "МУ_ДЗ_2014"
Текст из документа "МУ_ДЗ_2014"
284
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
Большаков С.А. , к.т.н., доц. Каф. ИУ5
Методические указания для выполнения ДЗ/КЛР
по дисциплине Программирование на основе классов и шаблонов кафедры ИУ5
Москва - 2014
________________________________________________________________
ОГЛАВЛЕНИЕ
1. Введение 3
2. Цель и задачи КЛР/ДЗ 4
3. Классы, наследование и перегрузка операций 6
4. Методические пояснения к темам ДЗ 62
5. Обязательные требования к ПО КЛР/ДЗ 75
6. Требования к документации КЛР/ДЗ 82
7. Порядок выполнения КЛР/ДЗ 86
8. Варианты КЛР/ДЗ 93
9. Программная документация на КЛР/ДЗ 98
10. Вопросы для самопроверки 131
11. Литература для ДЗ 133
Приложение 1 Образцы документов 134
Техническое задание 135
Описание применения 140
Техническое описание 146
Программа и методика испытаний 159
Руководство системного программиста 176
Руководство пользователя 181
Описание тестового примера 197
Приложение 2 Титульный лист 225
Приложение 3 Образцы программ 227
Пример программ для ДЗ/КЛР (массив и список) 228
Модуль - DZ.H (для массивов и списков) 228
Модуль - DZ_Class.H (для массивов и списков) 228
Модуль - DZ_LIB.H (для массивов) 230
Модуль - DZ_Array.cpp (для массивов) 241
Модуль - DZ_LIB.H (для списков) 255
Модуль - DZ_List.cpp (для списков) 266
1 Введение
Данные методические указания предназначены для студентов кафедры ИУ5 обучающихся во 2-м семестре и изучающих дисциплину “Программирование на основе классов и шаблонов”. Для выполнения комплексной лабораторной работы (КЛР) или домашнего задания (ДЗ) по курсу необходим определенный набор базовых знаний и умений, но, к сожалению, не все студенты ими обладают. Я надеюсь, что для большинства студентов в этот материал не будет содержать много новых сведений по курсу: основные знания они должны быть получены на лекциях и при самостоятельной проработке литературы. С другой стороны я надеюсь, что для части студентов данная информация будет, несомненно, полезна и они с успехом будут использовать данный материал для выполнения и защиты лабораторных работ и домашнего задания по дисциплине.
В данных методических указаниях рассмотрены основные теоретические вопросы, необходимые студентам для выполнения задания, шаги выполнения задания, рассмотрен пример выполнения задания и требования к заданию. Кроме этого, рассмотрены требования к документации для выполнения задания и даны примеры ее оформления.
2 Цель и задачи КЛР/ДЗ
Целями КЛР (домашнего задания) является: освоение технологии объектно-ориентированного проектирования программного обеспечения; самостоятельная разработка системы классов; получение навыков работы с системами программирования, ориентированными на объектный подход, в частности с системой программирования на языке С++. Получение навыков разработки и оформления технической документации для программ ориентированных на объекты. Домашнее задание выполняется студентами в учебные часы самостоятельной работы (17 академических часов) и цикла специальных лабораторных работ (ЛР12 – ЛР15). Методические указания по ЛР КЛР размещены на сайте дисциплины.
Темы заданий
Каждый студент выполняет КЛР (домашнее задание) индивидуально (варианты тем заданий представлены в отдельном файле). Кроме этого для каждой из групп предъявляются специальные требования. Студенту назначается тема задания в соответствии с вариантом по журналу группы. Сильные студенты могут выполнить домашние задания с учетом дополнительных требований. Варианты заданий студентов и варианты групп представлены на сайте в отдельном файле. По договоренности с преподавателем вариант может быть изменен на любой, соответствующий тематике задания, но не входящий в список вариантов групп (утвердить новую тему можно не позднее 4-й недели текущего семестра). Эту тему можно выбрать из списка тем с дополнительными требованиями или придумать самому. Степень сложности таких новых тем должен соответствовать степени сложности тем с дополнительными требованиями.
В каждом задании разрабатывается минимум один контейнерный класс и один элементный класс (см. ниже п.3).
3 Классы, наследование и перегрузка операций
В объектно-ориентированном программировании центральное место занимает понятие класса. Классы служат своеобразным эталоном (шаблоном) для создания объектов. Объекты являются основными конструктивными элементами (“строительными блоками”), из которых строиться программа.
4 Класс и его составляющие
Класс это новый тип данных, который объявлен пользователем. Класс описывает новое понятие предметной области для программирования задач на основе объектов. Класс включает описания переменных класса (“членов-данных класса”) и методов класса (“членов функций класса”). Члены-данные класса копируются в каждом новом объекте и составляют его сущность. Методы класса (функции) описаны один раз и служат для работы с членами-данными класса. Иногда говорят, что методы класса определяют поведение объектов.
Формально описание класса имеет вид (здесь приводиться упрощенное описание):
class <имя класса >: <список базовых классов> {
< тело класса>
};
Таким образом, описание класса состоит из заголовка описания и тела класса. Более детально формальное описание класса выглядит так:
class <имя класса > <список базовых классов> {
public:
< описания членов класса>
…
private:
< описания членов класса>
…
protected:
< описания членов класса>
…
< повторение предыдущих описаний в любом порядке>
};
Под членами класса понимаются члены-данные класса и члены-функции класса. Список базовых классов строиться на основе следующего формального правила:
<список базовых классов> ::= <пусто> | :<[ private | public | protected ] базовый класс> … [ , <[ private | public | protected ] базовый класс> ] …
5 Члены-данные класса
Члены-данные класса(свойства объектов класса) – это любые описание переменных за исключением описания переменных класса, описываемого в данном случае (однако, можно описывать указатели и ссылки на типы этого класса). Например, класс, содержащий только данные:
class Student {
public:
char Name[14]; // Фамилия студента
int kurs; // Курс обучения
bool pol; // true - women, false – men
private:
float Stipen; // Размер стипендии
};
6 Методы класса
Члены-функции класса это любые функции, которые получают доступ непосредственно к членам-данным класса. В теле класса могут размещаться описания функций класса и их прототипов. Во втором случае производится внешнее описание метода с указанием того, к какому классу это описание принадлежит. Пример описания методов класса:
class Student {
public:
char Name[14]; // Фамилия студента
int GetKurs();
void Print(){ // Метод описан в теле класса
cout<< "Фамилия: " << Name <<endl;
cout<< "Курс: " << kurs <<endl; };
private:
int kurs; // Курс обучения
…
};
…
// Внешнее описание метода класса
int Student::GetKurs(){ return kurs;};
Описания методов может быть произведено и в другом исходном модуле, но данные модули должны быть подключены в проект и исходный модуль с описанием классов.
7 Описание объектов класса
После описания классов мы можем производить описания объектов данного класса наравне с описаниями стандартных типов. Объект - это переменная данного типа класса (экземпляр класса). Можно описывать массивы объектов, указатели и ссылки на объекты. Примеры описания объектов и массивов:
Student Petrov; // Описание объекта типа Student
Student Group22[30]; // Описание массива объектов типа Student в 30 элементов
Student * pStud; // Описание указателя на тип Student
Student & rStud = Petrov; // Описание ссылки на тип Student и инициализация
…
pStud = new Student; // Динамическое создание объекта типа Student
8 Конструкторы объектов
Для создания объектов класса используются специальные методы, которые называются конструкторами. Эти методы используются для вычисления начальных значений членов данных объекта, выделения дополнительной динамической памяти под данные объекта и других действий. Все конструкторы возвращают по-умолчанию тип ссылка на объект (Student &), поэтому в их описаниях и прототипах тип возврата не задается. Название функции конструктора совпадает с именем класса. Конструкторов может быть много, но они должны отличаться числом и типами параметров (перегрузка функций). По умолчанию в каждом класса существует конструктор без параметров. Он не содержит операторов. Если такой конструктор описан явно, то используется пользовательский конструктор. Примеры описания конструкторов:
class Student {
public:
…
Student(){ kurs = 1; Stipen = 1500.0f; pol = true;};
Student(int k, float s){ kurs = k; Stipen = s; };
Student(int k, float s, bool p){ kurs = k; Stipen = s; pol = p;};
…};
Конструкторы целесообразно размещать в области public, так как только в этом случае доступно внешнее описание объектов. Примеры описаний с параметрами:
Student Petrov; // Описание объекта типа Student без параметров
Student Ivaniv(2 , 2000.0f); // Описание объекта типа Student с двумя параметрами
Student Sidorov(5, 3000.0f, true); // Описание объекта типа Student с тремя параметрами
…
Student * pS = new Student (5, 3000.0f, true); // Динамический вызов конструктора
При каждом описании объекта конструкторы вызываются до его первого использования.
9 Деструкторы объектов
При удалении объектов также могут быть использованы специальные методы класса. Они называются деструкторами. В деструкторе параметров не задается, поэтому можно объявить только один деструктор. По умолчанию предусмотрен деструктор, который удаляет объект и используется в том случае, когда явно деструктор не объявлен. В деструкторе может освобождаться память, выделенная динамически, или производиться другие действия, связанные с удалением данного объекта (например, изменяться счетчики объектов данного типа). Название функции деструктора также совпадает с именем класса, но ему предшествует специальный знак тильда (“~”). Пример описания деструктора:
class Student {
public:
…
~Student(){ GlobalCount--;};
…};
Если объект создан динамически, то выполняется вызов деструктора явно при выполнении операции delete. Пример:
Student * pS = new Student (5, 3000.0f, true); // Динамический вызов конструктора
…
delete pS;
В других случаях (при явном описании объекта), деструкторы объектов вызываются при выходе из блока (составного оператора) в котором эти объекты описаны. Можно считать, что они вызываются при прохождении закрывающей скобки блока (“}”). Деструкторы глобальных объектов вызываются после завершения функции main, а конструкторы вызываются до ее начала!
10 Работа с данными и методами объектов вне класса
Доступ к данным класса в методах класса выполняется непосредственно, то есть мы можем использовать имена переменных без дополнительной ссылки на объект. Вне класса для доступа нужно использовать имя объекта (либо ссылка) или указатель на объект. Рассмотрим примеры для класса Student, описанного выше:
Student Sidorov(5, 3000.0f, true); // Описание объекта типа Student с тремя параметрами
Student * pS = new Student (5, 3000.0f, true); // Указатель на динамический объект
Student & rS = *new Student (5, 3000.0f, true); // Ссылка на динамический объект
Student Group22[30]; // Описание массива объектов типа Student в 30 элементов
…
cout << "Name: " << Sidorov.Name << endl; //Квалицированная ссылка
cout << "Name: " << pS->Name << endl; // Указатель
cout << "Name: " << rS.Name << endl; // Динамическая ссылка