Требования к содержанию лабораторных работ по программированию

В рамках лабораторной работы №1 необходимо ознакомиться с текстом задания и на основе анализа предметной области выявить основную сущность, которая подлежит учету и анализу по смыслу задачи. Далее необходимо разработать ее объектно-информационную модель и реализовать класс, соответствующий данной модели.

В данном классе необходимо определить поле (или совокупность полей), значения которого, по смыслу задачи, будет уникально идентифицировать конкретный объект данного класса. Например, студент идентифицируется номером зачетной книжки, назначенная встреча – датой и временем проведения. Все поля класса должны быть объявлены как закрытые; обращение к полям, доступ к которым может быть открыт по смыслу задачи, должно осуществляться посредством запроса к соответствующим методам класса.

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

В рамках лабораторной работы №2 необходимо расширить объектно-информационную модель предметной области: выделить две взаимодействующие сущности, между которыми определено отношение «один ко многим».

На основе данной модели следует создать два класса, один из которых в качестве поля должен инкапсулировать список объектов второго класса, реализованный с использованием динамического массива.

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

Все поля объявляются закрытыми; обращение к полям, доступ к которым может быть открыт по смыслу задачи, должно осуществляться посредством запроса к соответствующим методам класса. Необходимо также реализовать все виды конструкторов и деструктор.

В классе, инкапсулирующем список объектов, должны быть реализованы методы, обеспечивающие их добавление и удаление, а также методы их поиска по индексу и идентификационным полям.

В рамках лабораторной работы №3 необходимо реализовать шаблонный класс связного списка. Для обеспечения корректной работы с полями-указателями на динамические области памяти необходимо реализовать конструктор по умолчанию, конструктор копирования, деструктор, оператор присваивания (перегрузить стандартный метод).

Для предотвращения аварийных ситуаций (несоответствие индекса границам списка), необходимо использовать механизм обработки исключений C++.

В результате выполнения лабораторной работы №3 необходимо модифицировать код разработанного ранее проекта: вместо массивов для представления списков объектов необходимо использовать реализованный шаблонный класс связного списка.

В рамках лабораторной работы №4 необходимо расширить созданную ранее объектно-информационную модель: добавить класс, реализующий логику управления поведением объектов предметной области.

Управляющий класс должен содержать закрытое поле, хранящее список управляемых объектов предметной области, а также методы, которые реализуют проверку соответствия множества элементов данного списка условиям, изложенным в тексте задачи. Любые изменения состояний объектов предметной области, которые должны контролироваться согласно смыслу задачи, должны осуществляться через запрос к методам управляющего класса.

Чтобы управляющий класс корректно исполнял функции контроля, необходимо гарантировать, что в системе существует только один его экземпляр. С этой целью при реализации управляющего класса следует применить паттерн объектно-ориентированного проектирования «одиночка» ( singleton).

Аварийные ситуации (например, попытка добавить в список объект с недопустимыми значениями полей), должны обрабатываться с использованием механизма исключений С++.

В рамках лабораторной работы №5 необходимо провести анализ предметной области и определить алгоритм формирования аналитической информации, на основе которой принимаются управленческие решения, представленные в тексте задания. Подразумевается, что к анализу представляется упорядоченный список объектов, отвечающих определенным критериям. Для формирования данного списка должны быть разработаны критерии поиска интересующих аналитика объектов, а также критерии сортировки полученного в результате поиска списка объектов.

Необходимо модифицировать созданный ранее управляющий класс: в него должны быть добавлены методы, реализующие алгоритмы поиска объектов предметной области, соответствующих разработанным критериям поиска, а также методы, реализующие алгоритмы сортировки списка объектов предметной области в соответствии с разработанными критериями сортировки.

При необходимости, в класс управляемого объекта предметной области должны быть внесены изменения: реализованы методы, вычисляющие значение сложных параметров сортировки и поиска. Сложным является параметр, который вычисляется на основе значений нескольких полей объекта, либо учитывает отношения объекта с другими объектами данного или другого класса.

В рамках лабораторной работы №6 необходимо модифицировать шаблонный класс связного списка: добавить метод, реализующий обобщенный алгоритм сортировки, независимый от типа элементов списка и критериев сортировки.

С этой целью необходимо применить паттерн «стратегия» (strategy): инкапсулировать алгоритм сравнения объектов по определенному критерию в специальный класс-компаратор и передавать объект данного класса в качестве параметра метода сортировки связного списка. Таким образом, обеспечивается взаимозаменяемость алгоритмов сравнения двух объектов по различным критериям при реализации обобщенного алгоритма сортировки.

Чтобы унифицировать прототипы методов сравнения в различных классах-компараторах и гарантировать единообразный механизм их применения, следует использовать такие принципы ООП, как наследование и полиморфизм (динамическое связывание). В классах-компараторах должен замещаться виртуальный метод сравнения, унаследованный от общего родительского класса. Чтобы обеспечить возможность применения компаратора к любым типам, в качестве параметров метод сравнения должен принимать указатели на пустой тип данных.



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



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