- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
Лекция 22 Объектно-ориентированное программирование
Цели:
-
познакомиться с основными понятиями объектно-ориентированного программирования (ООП);
-
определить понятие класса, основные свойства классов.
1. Объектно-ориентированное программирование.
Объектно-ориентированное программирование (ООП) – это система принципов и способов организации и построения программ, которая основана на представлении программы в виде совокупности взаимодействующих некоторым образом объектов.
Для каждого объекта определяются конкретные характеристики, которые вытекают из условия задачи, то есть какие-то из них можно опустить, а какие-то оставить. Характеристики, которые определяются для конкретного объекта, называются свойствами. Сам объект может управлять своими свойствами при помощи методов – наборов функций, которые могут изменять состояние объекта (значения переменных в программе). Полностью объект описывается свойствами и методами управления свойствами.
Основным понятием ООП в языке Си++ является понятие класса.
Класс – это произвольный структурированный тип, включающий в себя свойства и методы. Класс будет соответствовать определённому объекту предметной области.
Классы обладают тремя свойствами (характеристиками как типа данных):
-
инкапсуляция,
-
наследование,
-
полиморфизм.
Инкапсуляция – это свойство класса как типа данных содержать в себе одновременно переменные и функции их обработки, то есть свойства и методы.
Наследование предполагает возможность использования свойств и методов уже созданного класса для определения нового класса, то есть можно создать так называемый базовый класс и производные классы, которые могут содержать свойства и методы базового класса. Таким образом, строится иерархия классов, или библиотека.
Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
-
Определить основные объекты предметной области и их свойства.
-
Определить принципы взаимодействия этих объектов, таким образом, для каждого объекта определить методы управления свойствами.
-
По первым двум пунктам построить иерархию класса, то есть должны быть использованы свойства инкапсуляции, наследования и полиморфизма.
В результате может быть создана библиотека классов.
Описание классов.
Классы описываются в отдельных головных файлах, затем эти файлы подключаются в главной функции с помощью директивы include.
Простейшим образом классы можно определить с помощью конструкции:
class <имя класса>
{
<компоненты класса< (свойства и методы класса)
};
где class – служебное слово; <имя класса> – произвольно выбираемый идентификатор; <компоненты класса> – определение и описание типизированных данных (объектов) и принадлежащих классу функций (методов).
В проекте стандарта языка Си++ указано, что компонентами класса могут быть данные, функции, классы, перечисления, битовые поля, дружественные функции, дружественные классы и имена типов. В простейшем случае компоненты класса – это типизированные данные (базовые и производные) и функции. Заключённый в фигурные скобки список компонентов называют телом класса.
Телу класса предшествует заголовок. В простом случае заголовок класса включает ключ класса и его имя. Определение класса всегда заканчивается точкой с запятой. В качестве простейшего примера класса можно использовать структуру, но класс отличается от обычного структурированного типа, по крайней мере, включением компонентных функций. Например, следующая конструкция вводит класс «комплексное число» :
class complex // Вариант класса «комплексное число»
{
float re; // Вещественная часть
float im; // Мнимая часть
// Определение значения комплексного числа
void def(float re1, float im1)
{
re=re1; im=im1;
}
// Вывести на экран значение комплексного числа
void disp( )
{
cout << “real=” << re;
cout << “,imag=” << im;
}
};
В отличие от структурного типа в класс (тип) complex, кроме компонентных данных (re, im), включены две компонентные функции def() и disp( ).
Класс (как и его частный случай – структура), определённый пользователем, обладает правами типа. Следовательно, можно определить и описать объекты класса и описать объекты класса и создавать производные типы.
Итак, класс – это тип, определённый программистом. Каждый тип служит для определения объектов. Для описания объектов класса используется конструкция:
<имя класса> <имя объекта>;
Например:
complex x1,x2,D; // При объявлении класса complex
complex *point=&D; // Указатель на объект класса complex
complex dim[8]; // Массив объектов класса complex
complex &Name=x2; // Ссылка на объект класса complex
В определении объекта (класса) входят данные (элементы), соответствующие компонентным данным класса. Компонентные функции класса позволяют обработать данные конкретных объектов класса. Но в отличие от компонентных данных компонентные функции не тиражируются при создании конкретных объектов класса. Если перейти на уровень реализации, то место в памяти выделяется именно для элементов каждого объекта класса. Определение объектов класса предусматривает выделение участка памяти и деление этого участка на фрагменты, соответствующие отдельным элементам объекта, каждый из которых отображает отдельный компонент данных класса. Таким образом, и в объекте x1, и в объекте dim[8] класса complex входит по два элемента типа float, представляющих вещественную и мнимую части комплексных чисел.
Как только объекты класса определены, появляется возможность обращения к его компонентам, во-первых, с помощью имён, каждое из которых имеет формат:
<имя объекта> . <имя класса> :: <имя элемента>
Имя класса с операцией уточнения области действия ‘::’ обычно может быть опущено, и чаще всего для доступа к данным конкретного объекта заданного класса (как и в случае структур) используется уточнённое имя:
<имя объекта> . <имя элемента>
При этом возможности те же, что и при работе с элементами структур. Например, можно явно присвоить значения элементам объектов класса complex:
x1. re=dim[8]. re=1.24;
x1. im=2.3; dim[8]. im=0.0;