DZ_2KYRS (Готовое ДЗ неизвестного варианта (1))
Описание файла
Файл "DZ_2KYRS" внутри архива находится в следующих папках: Готовое ДЗ неизвестного варианта (1), [ООП - ДЗ] хрень. Документ из архива "Готовое ДЗ неизвестного варианта (1)", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "DZ_2KYRS"
Текст из документа "DZ_2KYRS"
6
ООП – Большаков С.А. 2009/2010 2-й курсМетодические указания к выполнению комплексной лабораторной работы (КЛР) ПО КУРСУ
"Объектно-ориентированное программирование"
2-й курс 3 семестр.
-
Цель КЛР (домашнего задания):
Целями КЛР (домашнего задания) является: освоение технологии объектно-ориентированного проектирования программного обеспечения; самостоятельная разработка системы классов; получение навыков работы с системами программирования, ориентированными на объектный подход, в частности с системой программирования на языке С++. Получение навыков оформления технической документации для программ ориентированных на объекты.
-
Темы заданий
Каждый студент выполняет КЛР (домашнее задание) индивидуально (варианты тем заданий представлены в отдельном файле). Студенту предлагается тема задания в соответствии с вариантом по журналу группы. По договоренности с преподавателем вариант может быть изменен на любой, соответствующий тематике задания, но не входящий в список вариантов групп (утвердить новую тему можно не позднее 4-й недели текущего семестра).
Первым шагом в выполнении КЛР (ДЗ) должно быть осмысление поставленной задачи, и, в частности, новых типов объектов, для которых нужно разработать обобщенные описания объектов в виде классов на языке СИ++. Нужно определить свойства объектов каждого класса и его поведение. Другими словами, необходимо первоначально выделить основные данные для объектов класса и перечень методов/функций, которые эти данные изменяют. На первом этапе это делается на некотором уровне абстракции объектов.
(Пример. Предположим тема задания следующая - разработать систему классов для описания строений/домов улиц и класса улиц. Предусмотреть операции: добавления строений, переименования улиц, сноса строений, печати списка домов, добавления строений и т.д.
-
В нашем случае, на первом этапе мы должны выделить следующие понятия: дома/строения и улицы, как упорядоченной совокупности домов.
-
Понятие дома - объекта, возможно, будет обладать следующими свойствами: номер дома, этажность дома, число жителей дома, расположение на левой или правой стороне улицы, название дома, характеристика строения и т.д.
-
Понятие улицы – объекта, возможно, будет содержать следующие свойства: название улицы, перечень домов улицы, число проживающих на улице, число домов, район расположения, город улицы и т.д.
-
Поведение дома – набор методов, возможно, будет содержать следующие действия: создание дома, разрушение дома, чтение параметров, изменение номера дома и название, установка число проживающих, изменение этажности – перестройка дома, распечатка дома и т.д.
-
Поведение улицы – набор методов, возможно, будет содержать следующие действия: создание улицы, удаление улицы, добавление дома на улицу, удаление дома с улицы, новая нумерация домов на улице, распечатка домов улицы, изменение названия улицы, чтение параметров улицы, объединение двух улиц, деление улиц на две и т.д.
-
Уже сейчас, можно придумать название для классов этих объектов: дом House, а улица – Street. Так как это описание на языке, то мы должны давать названия латиницей.
)
В каждом варианте должно быть выделено, по крайней мере, два слжержательных класса: один класс представляет собой описание конкретного материального или осмысленного объекта, а другой класс хранилище (список, массив, множество - контейнер) объектов первого класса с определенным порядком хранения, занесения и удаления объектов из него. Нужно придумать свойства и алгоритмы работы с этими объектами, продумать и вложить конкретный смысл в операции над ними. Над основными объектами и объектами контейнерных классов должны быть определены операции (объединения, сложения, удаления и т.д.). Требования к классам: один класс должен быть контейнерным (допускается разная организация, но предпочтительней списковая), а второй класс описывать объекты, включаемые в контейнерный класс.
(Пример. В нашем случае материальный объект – дом/строение. Контейнерный объект улица, как совокупность домов. На первом этапе необходимо очень внимательно на понятийном уровне продумать смысл каждого свойства и каждого действия над выделенными типами объектов. Кроме того, как опытные разработчика, уже сейчас Вы должны "догадываться" во что в программе будут выливаться выделенные свойства и методы. К примеру:
-
Номер дома – целочисленная переменная (int HouseNumber), а операции по изменению номера дома и чтению этих параметров (SetHouseNumber и GetHouseNumber). И т.д. Придуманные обозначения желательно поместить в таблицу, в которой будут перечислены понятия/методы, их названия и типы.
-
Название улицы – символьный массив (char NameStreet[30]) или указатель на имя (char * pNameStreet). Для добавления дома на улицу придумаем метод (AddHouse), а для удаления дома с улицы (DeleteHouse). И т.д. Придуманные обозначения желательно поместить в таблицу, в которой будут перечислены понятия/методы, их названия и типы.
)
Одновременно с разработкой классов должна быть разработана проектная документация в виде: диаграмм классов, диаграмм объектов тестового примера, техническое описание классов, программа методика испытаний и другая необходимая проектная документация, а также документация для эксплуатации программного продукта (см. ниже).
(Пример. Уже сейчас можно нарисовать диаграмму классов и пример диаграммы объектов возможного тестового примера. Соотношение между классами улица и дом – отношение включения. Отметьте для себя, что это не наследование.
)
На втором этапе необходимо запрограммировать классы на языке С++ (все используют систему программирования BC++ 3.1). Отладить программы описания классов (обязательно использование отладчика), разработав для этого тестовый, демонстрационный пример, который иллюстрирует работу всех методов всех разработанных классов, а также использование всех свойств/атрибутов объектов всех разработанных классов.
На третьем этапе завершается разработка эксплуатационной документации, документации оформляется и выполняется защита домашнего задания у преподавателя на ЭВМ с предоставлением всех необходимых материалов, включая исходные и загрузочные тексты системы и тестового примера.
-
использование языковых средств четвертого поколения ( 4GL) для разработки классов ( типа SAL SQLWindows GUPTA ).
Перечень вариантов заданий представлен в файле приложении к методическим указаниям КЛР (в отдельном файле). В качестве прототипов для выбора тематики КЛР можно рассматривать любые классы современных систем программирования СИ++( BCPP, MVC, DELPHI и других), однако все классы при выполнении домашнего задания разрабатываются самостоятельно: запрещено наследование новых классов от стандартных классов систем программирования.
Замечание : В некоторых темах предметом разработки могут быть новые классы или система классов, которые сходны со стандартными. В этом случае имена и назначение свойств и методов классов должны быть уникальными и они должны быть придуманы студентами самостоятельно. Контроль структуры класса, свойств и методов и их названий выполняет преподаватель. Если при именовании классов и разработке их содержания обнаружено совпадения со стандартными классами, то домашнее задание к защите не допускается.
2. Требования к выполнению домашнему заданию
При выполнении задания должны быть учтены следующие требования, которые являются методическими указаниями, а не функциональными требованиями технического задания (эти требования надо выполнять, а не копировать через буфер обмена в свои отчеты):
-
Студентом должны быть разработаны, по крайней мере, три новых класса, отличных от стандартных классов систем программирования;
(Пример. Два класса дом и улица уже есть. Третий класс может быть определен как абстрактный класс для строений или улиц, для того чтобы иметь возможность развития классов: строения могут быть не только жилыми домами, но и магазинами, учреждениями и т.д.
)
-
Для классов объектов явно определяются и разрабатываются: конструкторы (не менее двух для каждого класса) и деструктор (для каждого класса);
(Пример. Конструкторы могут с первоначальным заданием параметров или нет, например, с заданием названия улицы и т.д.
)
-
В каждом классе помимо конструкторов и деструкторов должно быть определено не менее пяти методов (функций членов класса) и не менее пяти свойств (данных класса);
(Пример. Методы для улиц могут быть такими: добавление дома, удаление дома, распечатки домов улицы, нумерация домов, сложение улиц, деление улиц и т.д. Например, деление улицы на две может интерпретироваться так: первые N домов переносятся на "улицу Горького", а остальные на "Тверскую". Т.е., другими словами, из одного объекта мы получаем два других объекта с определенными свойствами. Разрабатывая такую операцию нужно продумать вопросы: где создаются новые объекты, как они заполняться, уничтожается ли исходный объект и т.д.
)
-
Должен быть продемонстрированы механизмы наследования классов, как минимум один класс должен быть базовым, а другой производным;
(Пример. Наследование, если это не определяются по-другому характером задачи желательно сделать от абстрактного класса.
)
-
В одном классе по выбору определяется как минимум одна чистая виртуальная функция (это предопределяет использование одного абстрактного класса) и демонстрируется ее переопределение в других классах, для этого может быть создан дополнительный класс (типа Object).
(Пример. Чистые виртуальные функции задаются в абстрактном классе и переопределяются в производных классах. Например, функция печати объекта на cout.
)
-
Один из разрабатываемых классов должен быть контейнерного типа (массив, список, множество и т.д.), в нем должны быть определены операции добавления, удаления и распечатки из контейнера. И дополнительные требования к данному классу, которые выделены в вариантах задания.
(Пример. В контейнерном классе улица предусматриваются операции добавления домов, их удаления, печати всех домов улицы и т.д.
)
-
В одном классе по выбору, в зависимости от варианта, определяется как минимум одна перегружаемая операция (обязательная операция, обозначенная знаком "+" ).
(Пример. В нашем случае лучше определить операцию сложения двух улиц или операцию добавления дома на улицу. В первом случае это может выглядеть так: @Street3= Street1+ Street2;", а во втором – "Street1+House1;".
)
-
Должен быть разработан, описан в отчете и представлен демонстрационный (тестовый) пример, иллюстрирующий работу всех составляющих разработанной системы классов (свойств и методов/функций членов), который является основой для сдачи домашнего задания (в соответствии с ПИМ);
(Пример. В демонстрационном примере должны быть показано использование всех классов, на основе определения объектов и работу всех методов этих классов. Например, для классов улиц: создание улиц статическое и динамическое через операцию new, уничтожение улиц через операцию delete, добавление домов на улицу, их удаление, распечатку домов, слияние улиц и т.д.
)
-
Описания классов должны быть вынесены в отдельные файлы (*.h или *.hpp). При этом необходимо исключить повторное включение описаний в исходный текст.
(Пример. Например, с помощью переменных этапа компиляции (define __STREET_H):
#if !defined( __STREET_H )
#include <Street.h>
#endif //
)
10. ВНИМАНИЕ: Контейнерные классы в домашнем задании должны быть реализованы на основе структур данных типа двунаправленные списки. Задания реализованные на основе массивов приниматься к защите не будут.
11. ВНИМАНИЕ: В домашнем задании должно быть продемонстрировано использование шаблонов (template).
3. Требования к документации по КЛР
Документация по КЛР выполняется студентом индивидуально и должна включать стандартный набор документации на программное изделие (состав и требования к документации соответствуют требованиям 6-го семестра, размещено на сайте):
-
ТЗ на систему классов, в котором первыми пунктами в ТТ (Технические Требования – 5-й раздел ТЗ) должны стоять собственные требования к разрабатываемой системе классов.
-
Описание применения системы классов, поясняющее, как и для чего может использоваться Ваша система классов. Возможно
-
Подробное Техническое описание системы классов. Оно должно включать: диаграммы классов, подробное описание каждого класса. Описание классов должно быть сделано на понятийном уровне (в отдельном разделе) и на техническом уровне, желательно в виде таблиц. Обязательно, кроме подробного, вначале должно быть выделено краткое смысловое описание каждого класса – одной фразой. Например: "класс изображений служить для описания объектов – изображений на экране компьютера в форматах …".
-
Руководство пользователя системы классов, а не тестового примера, где должно быть описано, как и для чего, программист может использовать вашу систему классов. Должны быть даны простые примеры описания объектов и их использования, продемонстрировано применение всех методов, разработанных классов. Описание классов должно быть сделано на понятийном уровне (в отдельном разделе) и на техническом уровне, желательно в виде таблиц.
-
Руководство системного программиста должно определять действия системного программиста для установки (удаления) системы классов, проверки правильности установки, требуемые ресурсы для работы и т.д.
-
Листинг программ системы классов (распечатка всех файлов, включая и заголовочные).
-
Описание тестового примера (включает подробное описание тестового примера, включая и диаграмму объектов примера и особенности применения разработанных классов.)
-
Листинг программ и результатов работы тестового примера
-
Программа методика испытаний на основе тестового примера
Замечание: Документы разрабатываются в соответствии с ГОСТ, должны содержать всю необходимую информацию, написаны ясно и конкретно, соответствовать основной цели написания каждого конкретного документа. Документы разрабатываются отдельно, каждый документ сопровождается титульным листом с обязательным указанием варианта, темы и исполнителя (NB – каждый все должен сделать самостоятельно!!!)
Примечание: Для того чтобы задания каждого студента были индивидуальными введены дополнительные требования для каждой из групп:
гр. ИУ5-31 – обязательным требованием является использование дополнительной, перегруженной операций. Операция выполняет удаление объектов для контейнерного класса (использовать знак "-" - минус). (Пример. Удаление дома с улицы).
гр. ИУ5-32 - обязательным является перегрузка операции ввода (>>) из стандартного потока CIN для предметного класса. (Пример. Класс домов).