- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Пояснительная записка
- •Содержание дисциплины
- •1. Лабораторные занятия, их характеристика
- •2. Контрольные работы, их характеристика
- •3. Курсовые работы (проекты), их характеристика
- •4. Литература
- •4.1.Основная
- •4.2.Дополнительная
- •5. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Тема 2. Классы. Объекты. Конструкторы и деструкторы. Методы.
- •Тема 3. Свойства. Методы получения и установки значений свойств. Свойства-массивы. Свойство-массив как основное свойство объекта. Методы, обслуживающие несколько свойств.
- •Тема 4. Наследование. Прародитель всех классов. Перекрытие атрибутов в наследниках. Совместимость объектов различных классов. Контроль и преобразование типов.
- •Тема 5. Виртуальные методы. Механизм вызова виртуальных методов. Абстрактные виртуальные методы. Динамические методы. Методы обработки сообщений.
- •Тема 6. Классы в программных модулях. Разграничение доступа к атрибутам объектов. Указатели на методы объектов
- •Тема 7. Метаклассы. Ссылки на классы. Методы классов. Виртуальные конструкторы. Информация о типе времени выполнения программы - rtti.
- •Тема 9. Защита от утечки ресурсов. Приемы надежного программирования
- •Тема 10. Интерфейс. Описание интерфейса. Расширение интерфейса. Глобально-уникальный идентификатор интерфейса.
- •Тема 12. Совместимость интерфейсов. Совместимость класса и интерфейса. Получение интерфейса через другой интерфейс
- •Тема 13. Подсчет ссылок. Механизм подсчета ссылок. Представление интерфейса в памяти. Применение интерфейса для доступа к объекту dll-библиотеки.
- •Тема 15. Перегрузка идентификаторов. Предопределенные аргументы в подпрограммах.
- •Тема 18. Множественное наследование. Проблема повторяющихся базовых классов. Типовой пример применения множественного наследования - observer.
- •Тема 19. Виртуальные методы. Абстрактые методы и классы. Подстановочные функции
- •Тема 21. Ссылки. Рекомендации по работе со ссылками. Типичные ошибки при работе со ссылками.
- •Тема 23. Перегрузка операторов. Перегрузка бинарных операторов. Перегрузка унарных операторов. Перегрузка операторов преобразования типа.
- •Тема 24. Шаблоны функций. Перегрузка шаблонов функций. Шаблоны классов. Специализации шаблонов. Создание новых типов данных на базе шаблонов
- •Тема 26. Перспективные технологии ооп.
- •Практический раздел Контрольные работы
- •Контрольная работа №1 Указания по выбору варианта
- •Теоретическая часть (вопросы)
- •Практическая часть Контрольное задание №1. Пример использования объектно-ориентированного программирования в языке Delphi
- •Исходные данные к контрольному заданию №1
- •Контрольная работа №2 Указания по выбору варианта
- •Теоретическая часть (вопросы)
- •Практическая часть
Контрольная работа №2 Указания по выбору варианта
Выбор вариантов теоретических вопросов и контрольного задания осуществляется студентом самостоятельно на основании двух последних цифр номера зачетной книжки из данных табл. 1.
Теоретическая часть (вопросы)
Принципы модульного программирования на языке C++. Пространства имен.
Перегрузка идентификаторов. Предопределенные аргументы в подпрограммах.
Классы в языке C++. Наследование. Конструкторы и деструкторы. Создание объектов по значению (на стеке) и по ссылке (в динамической памяти). Стандартные конструкторы.
Порядок конструирования и разрушения объектов. Агрегирование объектов. Операторы new и delete. Размещающий оператор new. Вложенные определения классов. «Друзья» класса. Статические члены класса.
Множественное наследование. Проблема повторяющихся базовых классов. Типовой пример применения множественного наследования — observer.
Виртуальные методы. Абстрактые методы и классы. Подстановочные функции.
Операторы приведения типа в языке C++. Информация о типе времени выполнения программы — RTTI.
Ссылки. Рекомендации по работе со ссылками. Типичные ошибки при работе со ссылками.
Обработка исключительных ситуаций на языке C++. Защита от утечки ресурсов. Оболочечные объекты (auto_ptr).
Перегрузка операторов. Перегрузка бинарных операторов. Перегрузка унарных операторов. Перегрузка операторов преобразования типа.
Шаблоны функций. Перегрузка шаблонов функций. Шаблоны классов. Специализации шаблонов. Создание новых типов данных на базе шаблонов.
Стандартная библиотека шаблонов. Потоковый ввод-вывод. Строки. Контейнеры. Итераторы. Алгоритмы. Утилиты. Диагностика. Локализация. Определения для языка программирования C++. Числовые шаблоны.
Перспективные технологии объектно-ориентированного программирования.
Практическая часть
Контрольное задание №1. Пример использования объектно-ориентированного программирования в языке C++
Спроектировать и реализовать программное средство на языке C++. В данном программном средстве должен быть реализован механизм (концепция) из таблицы 2.
Методические указания
Цель данной работы состоит в знакомстве с основными концепциями ООП: инкапсуляцией, полиморфизмом, наследованием. Создание классов, реализующих интерфейсы. Реализация системы со сложно спроектированными функциональными зависимостями. Использование сложного полиморфизма, агрегации классов и интерфейсов, а так же других механизмов межклассового взаимодействия. Изучение приемов проектирования на примере фабрики классов.
Для выполнения работы использовать язык программирования C++.
При работе использовать материал представленный в теоретической части данного ЭУМКД.
Индивидуальные практические работы
Рабочей программой дисциплины «Объектно-ориентрированное программирование» предусмотрено выполнение двух индивидуально практических работ. Каждая индивидуально-практическая работа состоит из практической части. В этой части необходимо выполнить поставленное задание. Обычно это проектирование и реализация программного средства.
Индивидуальная практическая работа №1
Указания по выбору варианта
Для данной индивидуальной практической работы выбор варианта не предусмотрен.
Практическая часть
Контрольное задание №1. Основы ООП – сложный полиморфизм. Инкапсуляция. Наследование (расширение). Полиморфизм. Понятие Интерфейса и Реализации.
Разработать иерархию классов для представления геометрических фигур: прямая, ломанная, прямоугольник, эллипс, многоугольник. Разработать контейнер для хранения фигур.
Контейнер для хранения фигур реализовать в виде интерфейса с общими методами для всех фигур. Классы каждой из фигур должны быть реализацией данного интерфейса.
Главный код программы должен содержать создание экземпляров каждого из классов, и сохранение их в одномерном массиве типа интерфейса (коллекции фигур). Написать код работы с массивами, который проверяет работу каждого экземпляра.
Методические указания
При работе использовать материал представленный в теоретической части данного ЭУМКД.
Индивидуальная практическая работа №2
Указания по выбору варианта
Для данной индивидуальной практической работы выбор варианта не предусмотрен.
Практическая часть
Контрольное задание №1. Полиморфизм в иерархии классов. Множественное наследование. Агрегация. Механизмы взаимодействия между объектами. Приемы проектирования: фабрики классов.
Разработать иерархию классов для организации виртуальной файловой системы. Иерархия включает проектирование не менее четырех интерфейсов: IVFSObject, IFile, IDirectory, IVFS. IVFSObject – является предком IFile и IDirector, а так же содержит общий для них набор методов. Каждый экземпляр записи виртуальной файловой системы реализует методы интерфейса IVFSObject. В свою очередь интерфейсы IFile и IDirectory расширяют набор методов IVFSObject, каждый согласно своей функциональности. Интерфейс IVFS содержит методы доступа к метаинформации конкретного драйвера виртуальной файловой системы. В частности, он должен содержать методы получения таких данных как название используемого драйвера файловой системы, используемая кодировка в именах файлов и т.д. Кроме того, IVFS содержит метод доступа к корневому элементу файловой системы.
Разработка виртуальной файловой системы включает создание не менее трех драйверов в виде соответствующего набора классов. Это означает, что необходимо создать группу классов, реализующих каждый спроектированный интерфейс для своего типа драйвера представления данных. Таким образом, основной код программы не будет зависеть от типа драйвера, способа представления, хранения и организации файловой системы в памяти, так как будет ориентирован на использование экземпляров интерфейсных типов переменных. За счет такого подхода достигается полиморфизм исходного кода, который использует экземпляры разработанных классов. В качестве примера типов драйверов можно выбрать следующие представления реализаций файловой системы в памяти: native -работа с системными вызовами ОС, block – хранение файловой системы в виде одной записи (бинарного файла) на логическом диске ОС, ftp – доступ к файловой системе с использование сетевого протокола передачи файлов.
Для реализации выбора при создании экземпляра класса конкретного типа драйвера представления файловой системы необходимо использовать фабрику классов. Решение о выборе типа возвращаемого экземпляра фабрика принимает на основании входных параметров или внешнего конфигурационного файла.
Дополнительно рекомендуется реализовать методы монтирования и демонтирования различных файловых систем между собой по аналоги с UFS (файловой системы unix), таким образом, что каждый объект файловой системы может также является точкой монтирования IMountPoint, которая также является расширением IVFSObject.
При проектировании системы необходимо самостоятельно принять решение о целесообразности использования того или иного подхода для организации взаимодействия между объектами. Обосновать свой выбор теоретически.
Методические указания
При работе использовать материал представленный в теоретической части данного ЭУМКД.