3315
.pdfМинистерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«Воронежский государственный лесотехнический университет имени Г.Ф. Морозова»
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Методические указания для самостоятельной работы студентов по направлению подготовки
09.03.02 – Информационные системы и технологии
Воронеж 2016
УДК 681.3.06 (076)
Лавлинский, В. В. Объектно-ориентированное программирование Текст : методические указания для самостоятельной работы студентов по направлению подготовки 09.03.02 – Информационные системы и технологии / В.В. Лавлинский, О.В.Оксюта, Ю.Г. Табаков; М-во образования и науки РФ, ФГБОУ ВО «ВГЛТУ им. Г.Ф. Морозова». – Воронеж, 2016. – 22 с.
Печатается по решению учебно-методического совета ФГБОУ ВО «ВГЛТУ им. Г.Ф. Морозова» (протокол № __ от _______ 2016 г.)
Рецензент заведующий кафедрой электротехники и автоматики ФГБОУ ВПО ВГАУ д-р.техн.наук., проф. Д.Н. Афоничев
|
© Оксюта О.В., 2016 |
ISBN |
© ФГБОУ ВО «Воронежский государственный |
|
лесотехнический университет имени |
|
Г.Ф. Морозова», 2016 |
ВВЕДЕНИЕ
Методические указания подготовлены в соответствии с рабочей программой дисциплины «Объектно-ориентированное программирование» для студентов по направлениям подготовки 09.03.02 – Информационные системы и технологии. Целью изучения данной дисциплины является формирование у студентов знаний и умений применения основных приемов объектноориентированного решения задач и способы построения объектноориентированных алгоритмов, объектно-ориентированного программирования, отладки и испытания объектно-ориентированных программ.
В результате освоения дисциплины студент должен:
–знать: концепцию объектно-ориентированного программирования, основные ее понятия (класс, объект), свойства (инкапсуляция, наследование, полиморфизм), методику анализа и проектирования объектноориентированных программ, основные понятия, синтаксис и семантику конструкций языка программирования С++, способы составления объектноориентированных программ на языке программирования С++, возможности интегрированной среды программирования на языке С++;
–уметь: проектировать, программировать и отлаживать объектноориентированные программы на языке С++;
–владеть: навыками самостоятельной разработки, отладки, испытаний
идокументирования программ на языке объектно-ориентированного программирования для решения задач обработки числовой и текстовой информации, организации диалога с пользователем, моделирования.
СОДЕРЖАНИЕ ДИСЦИПЛИНЫ
Раздел 1. Объектно-ориентированная методология изучения предметной области
Объектно-ориентированный подход, применяемый при проектировании и создании сложных систем. Составные части объектноориентированной методологии. История развития объектноориентированных языков. Примеры объектно-ориентированных языков.
Раздел 2. Принципы структурного и объектно-ориентированного программирования
Парадигма программирования. Модульное программирование. Нисходящее программирование. Структурное программирование.
3
Раздел 3. Объектно-ориентированное программирование как технология программирования
Понятия объекта, класса объектов. Основные понятия объектноориентированного программирования: инкапсуляция, наследование и полиморфизм на примере языка СИ++.
Раздел 4. Расширение языка Си++
Прототипы функций. Перегрузка функций. Значения формальных параметров по умолчанию. Ссылки и параметры-ссылки. Объявления переменных. Встраиваемые функции. Операции new и delete.
Раздел 5. Структура класса
Функции-члены и данные-члены. Интерфейсы и реализация. Конструкторы и инициализация. Конструктор без параметров (по умолчанию). Деструкторы и очистка. Конструктор копирования. Указатель this. Статические члены: функции и данные. Указатели на члены. Структуры и объединения. Константные члены-функции и константные объекты.
Раздел 6. Дружественные функции и перегрузка операций
Функции-друзья. Перегрузка бинарных и унарных операций. Перегруженные операции индексирования, вызова функций, инкремента и декремента префиксных и постфиксных. Перегрузка new, delete. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования. Неявное преобразование типов. Друзья-функции и друзьяклассы.
Раздел 7. Производные классы
Наследование классов и производные классы. Конструкторы, деструкторы и наследование. Множественное наследование. Виртуальные базовые классы. Иерархия классов. Виртуальные функции. Полиморфизм. Абстрактные классы и чистые виртуальные функции.
Раздел 8. Обработка исключительных ситуаций
Обработка ошибок в стандартном Си. Использование assert, кодов возврата, сигналов, setjmp и longjmp. Использование matherr() и set_new_handler(). Объектно-ориентированная обработка исключений. При-
менение try, catch, throw.
Раздел 9. Библиотеки классов
Библиотека для организации ввода вывода в потоки. Библиотека контейнерных классов CLASSLIB в BORLAND C++. Библиотека OWL. Библио-
4
тека MFC. Понятие программного обеспечения. Жизненный цикл программы. Документирование программы.
СОДЕРЖАНИЕ ПРАКТИЧЕСКИХ ЗАНЯТИЙ
Дисциплина «Объектно-ориентированное программирование» предусматривает лабораторные занятия, темы которых приведены в табл. 1. Студенты после выполнения каждой работы составляют письменный отчет, который устно защищается.
|
5 |
|
Таблица 1 |
|
|
№ п/п |
Наименование практических работ |
|
|
1 |
2 |
|
|
1 |
Создание и хранение шаблонов компонентов |
|
|
2 |
Объявление и описание классов |
|
|
3 |
Структура класса компонента |
|
|
4 |
Создание методов и событий |
|
|
Отчет лабораторных работ может включать выполнение индивидуальных практических заданий, выдаваемых преподавателем.
Примеры заданий к лабораторной работе № 1
По одному из приведенных ниже вариантов составить программу создания средствами ООП набора управляемых с клавиатуры графических объектов. Организовать управление движением объектов курсорными клавишами по вертикали, по горизонтали и по диагоналям. Ввести возможность менять цвет объектов (изменением кода цвета).
1.Набор из 30 пикселов разного цвета, двух ромбов с диагоналями, параллельными краям экрана, и двух эллипсов. Менять размеры ромба и эллипса по вертикали и по горизонтали.
2.Набор нз 40 пикселов одного цвета, двух прямоугольников со сторонами, параллельными краям экрана, и двух дуг окружности. Менять размеры прямоугольника по вертикали и по горизонтали, а для дуги менять радиус
иконечный угол (стартовый угол принять равным нулю).
3.Набор нз 50 пикселов разного цвета, двух прямоугольных треугольников с катетами, параллельными краям экрана, н двух отрезков толстой линии. Менять размеры треугольников по вертикали и по горизонтали. Для отрезков ввести возможность их врашения по или против часовой стрелки.
4.Набор из 60 пикселов одного цвета, двух прямоугольников со сторонами, параллельными краям экрана, и двух отрезков прямой. Менять размеры прямоугольника по вертикали и по горизонтали, а для отрезков задать вращение по или против часовой стрелки.
Примеры заданий к лабораторной работе № 2
6
1.Определить пользовательский класс в соответствии с вариантом за-
дания.
2.Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
3.Определить в классе деструктор.
4.Определить в классе компоненты-функции для просмотра и установки полей данных.
5.Определить указатель на компоненту-функцию.
6.Определить указатель на экземпляр класса.
7.Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).
8.Показать в программе использование указателя на объект и указателя на компоненту-функцию.
Варианты:
Описания членов - данных пользовательских классов
1.СТУДЕНТ имя – char*
курс – int
пол – int(bool)
2.СЛУЖАЩИЙ имя – char*
возраст – int рабочий стаж – int
3.КАДРЫ имя – char*
номер цеха – int разряд – int
4.ИЗДЕЛИЕ имя – char* шифр – char*
количество – int
5.БИБЛИОТЕКА имя – char*
автор – char*
7
стоимость – float
Примеры заданий к лабораторной работе № 3
1.Для определения иерархии классов связать отношением наследования классы, приведенные в приложении (для заданного варианта). Из перечисленных классов выбрать один, который будет стоять во главе иерархии. Это абстрактный класс.
2.Определить в классах все необходимые конструкторы и деструктор.
3.Компонентные данные класса специфицировать как protected.
4.Пример определения статических компонентов:
static person* begin; // указатель на начало списка static void print(void); // просмотр списка
5.Статическую компоненту-данное инициализировать вне определения класса, в глобальной области.
6.Для добавления объекта в список предусмотреть метод класса, т.е. объект сам добавляет себя в список. Например, a.Add() − объект a добавляет себя в список.
Включение объекта в список можно выполнять при создании объекта, т.е. поместить операторы включения в конструктор. В случае иерархии классов, включение объекта в список должен выполнять только конструктор базового класса. Вы должны продемонстрировать оба этих способа.
7.Список просматривать путем вызова виртуального метода Show каждого объекта.
8.Статический метод просмотра списка вызывать не через объект, а через класс.
9.Определение классов, их реализацию, демонстрационную программу поместить в отдельные файлы.
Варианты классов:
1) студент, преподаватель, персона, зав.кафедрой; 2) служащий, персона, рабочий, инженер; 3) рабочий, кадры, инженер, администрация; 4) деталь, механизм, изделие, узел;
5) организация, страховая компания, судостроительная компания, за-
вод.
8
Примеры заданий к лабораторной работе № 4
1. Выбрать группу объектов, которые будут обрабатывать события. 2.Для выбранной группы объектов определить перечень операций, ко-
торые должны выполняться по командам пользователя.
3.Определить вид командной строки <код_операции><параметры>. Решить вопросы: как кодируются операции? какие передаются пара-
метры?
4.Определить иерархию объектов. Если необходимо, добавить новые объекты (группы объектов).
5.Определить иерархию классов. Если необходимо, добавить новые
классы.
6.Определить, какой объект в программе играет роль приложения. В случае необходимости добавить в иерархию классов класс TApp. Решить, в каком классе будет метод Execute, организующий главный цикл обработки событий.
7.Определить и реализовать необходимые для обработки событий ме-
тоды.
8.Написать основную функцию (main).
ВОПРОСЫ К ЭКЗАМЕНУ
1.Объектно-ориентированный подход, применяемый при проектировании и создании сложных систем.
2.Составные части объектно-ориентированной методологии.
3.История развития объектно-ориентированных языков.
4.Примеры объектно-ориентированных языков.
5.Принципы структурного и объектно-ориентированного программирования.
6.Парадигма программирования.
7.Модульное программирование.
8.Нисходящее программирование.
9.Структурное программирование.
10.Объектно-ориентированное программирование как технология программирования.
11.Понятия объекта, класса объектов.
9
12.Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм на примере языка СИ++.
13.Прототипы функций.
14.Перегрузка функций.
15.Значения формальных параметров по умолчанию.
16.Ссылки и параметры-ссылки.
17.Объявления переменных. Встраиваемые функции.
18.Операции new и delete.
19.Структура класса.
20.Функции-члены и данные-члены.
21.Интерфейсы и реализация.
22.Конструкторы и инициализация.
23.Конструктор без параметров (по умолчанию).
24.Деструкторы и очистка.
25.Конструктор копирования.
26.Указатель this.
27.Статические члены: функции и данные.
28.Указатели на члены.
29.Структуры и объединения.
30.Константные члены-функции и константные объекты.
31.Функции-друзья.
32.Перегрузка бинарных и унарных операций.
33.Перегруженные операции индексирования, вызова функций, инкремента и декремента префиксных и постфиксных.
34.Перегрузка new, delete.
35.Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
36.Неявное преобразование типов.
37.Друзья-функции и друзья-классы.
38.Наследование классов и производные классы.
39.Конструкторы, деструкторы и наследование.
40.Множественное наследование.
41.Виртуальные базовые классы.
42.Иерархия классов.
43.Виртуальные функции.