Прикладное программирование. Основные принципы объектно-ориентированного программирования

Содержание

Слайд 2

Понятие ООП Объектно-ориентированное программирование — это стиль кодирования, который позволяет разработчику

Понятие ООП

Объектно-ориентированное программирование — это стиль кодирования, который позволяет разработчику группировать

схожие задачи в классы. Таким образом код соответствует принципу DRY (don't repeat yourself – не повторяй самого себя) и становится лёгким для сопровождения.
Слайд 3

Понятие ООП Одним из преимуществ DRY программирования является то, что если

Понятие ООП

Одним из преимуществ DRY программирования является то, что если некоторая

информация требует изменения программы, то нужно изменять код лишь в одном месте, чтобы обновить алгоритм.
ООП является очень чётким и чрезвычайно простым подходом к программированию.
Слайд 4

Понятие класса и объекта В основе объектно-ориентированного языка программирования лежат два

Понятие класса и объекта

В основе объектно-ориентированного языка программирования лежат два основных

понятия: объект и класс.
Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).
Слайд 5

Понятие класса и объекта С точки зрения программирования класс можно рассматривать

Понятие класса и объекта

С точки зрения программирования класс можно рассматривать как

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

Понятие класса и объекта Представьте себе, что вы проектируете автомобиль. Вы

Понятие класса и объекта

Представьте себе, что вы проектируете автомобиль. Вы знаете,

что автомобиль должен содержать двигатель, подвеску, две передних фары, 4 колеса, и т.д. Ещё вы знаете, что ваш автомобиль должен иметь возможность набирать и сбавлять скорость, совершать поворот и двигаться задним ходом.
Слайд 7

Понятие класса и объекта И, что самое главное, вы точно знаете,

Понятие класса и объекта

И, что самое главное, вы точно знаете, как

взаимодействует двигатель и колёса, согласно каким законам движется распредвал и коленвал, а также как устроены дифференциалы. Вы уверены в своих знаниях и начинаете проектирование.
Слайд 8

Понятие класса и объекта Вы описываете все запчасти, из которых состоит

Понятие класса и объекта

Вы описываете все запчасти, из которых состоит ваш

автомобиль, а также то, каким образом эти запчасти взаимодействуют между собой. Кроме того, вы описываете, что должен сделать пользователь, чтобы машина затормозила, или включился дальний свет фар. Результатом вашей работы будет некоторый эскиз. Вы только что разработали то, что в ООП называется класс.
Слайд 9

Понятие класса и объекта В нашем случае, класс будет отображать сущность

Понятие класса и объекта

В нашем случае, класс будет отображать сущность –

автомобиль. Атрибутами класса будут являться двигатель, подвеска, кузов, четыре колеса и т.д. Методами класса будет «открыть дверь», «нажать на педаль газа», а также «закачать порцию бензина из бензобака в двигатель». Первые два метода доступны для выполнения другим классам (в частности, классу «Водитель»). Последний описывает взаимодействия внутри класса и не доступен пользователю.
Слайд 10

Понятие класса и объекта Вы отлично потрудились и машины, разработанные по

Понятие класса и объекта

Вы отлично потрудились и машины, разработанные по вашим

чертежам, сходят с конвейера. Вот они, стоят ровными рядами на заводском дворе. Каждая из них точно повторяет ваши чертежи. Все системы взаимодействуют именно так, как вы спроектировали. Но каждая машина уникальна. Они все имеют номер кузова и двигателя, но все эти номера разные, автомобили различаются цветом, а некоторые даже имеют литьё вместо штампованных дисков. Эти автомобили, по сути, являются объектами вашего класса.
Слайд 11

Понятие класса и объекта Объект (экземпляр) – это отдельный представитель класса,

Понятие класса и объекта

Объект (экземпляр) – это отдельный представитель класса, имеющий

конкретное состояние и поведение, полностью определяемое классом.
Объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе. В данном примере, если класс – это некоторый абстрактный автомобиль из «мира идей», то объект – это конкретный автомобиль, стоящий у вас под окнами.
Слайд 12

Интерфейс Когда мы садимся за руль, мы начинаем взаимодействие с ним.

Интерфейс

Когда мы садимся за руль, мы начинаем взаимодействие с ним. Обычно,

взаимодействие происходит с помощью некоторого набора элементов: руль, педали, рычаг коробки переключения передач в автомобиле. Всегда существует некоторый ограниченный набор элементов управления, с которыми мы можем взаимодействовать.
Интерфейс – это набор методов класса, доступных для использования другими классами.
Слайд 13

Интерфейс Очевидно, что интерфейсом класса будет являться набор всех его публичных

Интерфейс

Очевидно, что интерфейсом класса будет являться набор всех его публичных методов

в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.
Слайд 14

Интерфейс Хорошим примером интерфейса может служить приборная панель автомобиля, которая позволяет

Интерфейс

Хорошим примером интерфейса может служить приборная панель автомобиля, которая позволяет вызвать

такие методы, как увеличение скорости, торможение, поворот, переключение передач, включение фар, и т.п. То есть все действия, которые может осуществить другой класс (в нашем случае – водитель) при взаимодействии с автомобилем.
Слайд 15

Интерфейс При описании интерфейса класса очень важно соблюсти баланс между гибкостью

Интерфейс

При описании интерфейса класса очень важно соблюсти баланс между гибкостью и

простотой. Класс с простым интерфейсом будет легко использовать, но будут существовать задачи, которые с помощью него решить будет не под силу.
Слайд 16

Интерфейс В то же время, если интерфейс будет гибким, то, скорее

Интерфейс

В то же время, если интерфейс будет гибким, то, скорее всего,

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

Основными характеристическими свойствами понятий классов и объектов являются: Абстракция Инкапсуляция; Наследование; Полиморфизм.

Основными характеристическими свойствами понятий классов и объектов являются:
Абстракция
Инкапсуляция;
Наследование;
Полиморфизм.

Слайд 18

Абстракция Абстракция — это мощнейшее средство программирования. Именно то, что позволяет

Абстракция

Абстракция — это мощнейшее средство программирования. Именно то, что позволяет нам

строить большие системы и поддерживать контроль над ними.
Процесс создания уровней абстракции распространяется практически на все области знаний человека. Так, мы можем делать суждения о материалах, не вдаваясь в подробности их молекулярной структуры.
Слайд 19

Абстракция Или говорить о предметах, не упоминая материалы, из которых они

Абстракция

Или говорить о предметах, не упоминая материалы, из которых они сделаны.

Или рассуждать о сложных механизмах, таких как компьютер, турбина самолёта или человеческое тело, не вспоминая отдельных деталей этих сущностей.
Во-вторых, абстракции в программировании были всегда, начиная с записей Ады Лавлейс, которую принято считать первым в истории программистом.
Слайд 20

Инкапсуляция Объекты моделируют характеристики и поведение элементов мира, в котором мы

Инкапсуляция

Объекты моделируют характеристики и поведение элементов мира, в котором мы живем.

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

Инкапсуляция Инкапсуляция - комбинирование записей с процедурами и функциями, манипулирующими полями

Инкапсуляция

Инкапсуляция - комбинирование записей с процедурами и функциями, манипулирующими полями этих

записей, формирует новый тип данных - объект (под записью понимается переменная типа "запись").
Слайд 22

Наследование Не менее важным является и тот факт, что объекты могут

Наследование

Не менее важным является и тот факт, что объекты могут наследовать

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

Наследование Процесс, с помощью которого один тип наследует характеристики другого типа,

Наследование

Процесс, с помощью которого один тип наследует характеристики другого типа, называется

наследованием. Наследник называется порожденным (дочерним) типом, а тип, которому наследует дочерний тип, называется порождающим (родительским) типом.
Слайд 24

Наследование Наследование - определение объекта и его дальнейшее использование для построения

Наследование

Наследование - определение объекта и его дальнейшее использование для построения иерархии

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

Полиморфизм Полиморфизм - присваивание действию одного имени, которое затем совместно используется

Полиморфизм

Полиморфизм - присваивание действию одного имени, которое затем совместно используется вниз

и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим.
Слайд 26

Структура класса Класс имеет имя, состоит из полей, называемых членами класса

Структура класса

Класс имеет имя, состоит из полей, называемых членами класса и

функций - методов класса.
Описание класса имеет следующий формат:
class name // name – имя класса
{
private:
Слайд 27

Структура класса // Описание закрытых членов и методов класса protected: //

Структура класса

// Описание закрытых членов и методов класса
protected:
// Описание защищенных членов

и методов класса
public:
// Описание открытых членов и методов класса
}
Слайд 28

Открытые и закрытые члены класса В отличии от полей структуры доступных

Открытые и закрытые члены класса

В отличии от полей структуры доступных всегда,

в классах могут быть члены и методы различного уровня доступа:
открытые public (публичные), вызов открытых членов и методов
класса осуществляется с помощью оператора . ("точка");
Слайд 29

Открытые и закрытые члены класса закрытые private (приватные), доступ к которым

Открытые и закрытые члены класса

закрытые private (приватные), доступ к которым возможен

только с помощью открытых методов.
защищенные методы (protected).
После описания класса необходимо описать переменную типа class.
Слайд 30

Открытые и закрытые члены класса Например: name_class name; здесь name_class –

Открытые и закрытые члены класса

Например: name_class name;
здесь name_class – имя класса,

name – имя переменной.
В дальнейшем переменную типа class будем называть «объект» или «экземпляр класса». Объявление переменной типа class (в нашем примере переменная name типа name_class) называется созданием (инициализацией) объекта (экземпляра класса).
Слайд 31

Открытые и закрытые члены класса После описания переменной можно обращаться к

Открытые и закрытые члены класса

После описания переменной можно обращаться к членам

и методам класса.
Обращение к членам и методам класса осуществляется аналогично обращению к полям структуры с помощью оператора «.» (точка).
Слайд 32

Открытые и закрытые члены класса name.p1; //Обращение к полю p1 экземпляра

Открытые и закрытые члены класса

name.p1; //Обращение к полю p1 экземпляра класса

name.
name.f1(par1,par2,…parn); //Обращение к методу f1 экземпляра класса name,
//par1, par2, …, parn – список формальных параметров функции f1.
Члены класса доступны из любого метода класса и их не надо передавать в качестве параметров функций-методов.
Слайд 33

Пример работы с классами Рассмотрим класс complex для работы с комплексными

Пример работы с классами

Рассмотрим класс complex для работы с комплексными числами1.
В

классе complex будут члены класса:
double x – действительная часть комплексного числа;
double y – мнимая часть комплексного сила.
Слайд 34

Пример работы с классами методы класса: double modul() – функция вычисления

Пример работы с классами

методы класса:
double modul() – функция вычисления модуля комплексного

числа;
double argument() – функция вычисления аргумента комплексного числа;
void show_complex() – функция выводит комплексное число на экран.
Слайд 35

Пример работы с классами #include #include #include #define PI 3.14159 using

Пример работы с классами

#include
#include
#include
#define PI 3.14159
using namespace std;
class

complex //Определяем класс complex
Слайд 36

Пример работы с классами { public: double x; //Действительная часть комплексного

Пример работы с классами

{
public:
double x; //Действительная часть комплексного числа.
double y; //Мнимая

часть комплексного числа.
Слайд 37

Пример работы с классами //Метод класса complex – функция modul, для

Пример работы с классами

//Метод класса complex – функция modul, для вычисления

модуля комплексного числа.
double modul()
{
return pow(x*x+y*y,0.5);
}
Слайд 38

Пример работы с классами //Метод класса complex – функция argument, для

Пример работы с классами

//Метод класса complex – функция argument,
для вычисления

аргумента комплексного числа.
double argument()
{
return atan2(y,x)*180/PI;
}
Слайд 39

Пример работы с классами //Метод класса complex – функция show_complex, для

Пример работы с классами

//Метод класса complex – функция show_complex, для вывода

комплексного числа.
void show_complex()
{
if (y>=0)
//Вывод комплексного числа с положительной мнимой частью.
Слайд 40

Пример работы с классами cout else //Вывод комплексного числа с отрицательной //мнимой частью. cout } };

Пример работы с классами

cout<else
//Вывод комплексного числа с отрицательной
//мнимой частью.
cout<}
};

Слайд 41

Пример работы с классами int main() { //Определяем переменную chislo типа

Пример работы с классами

int main()
{
//Определяем переменную chislo типа complex.
complex chislo;
//Определяем действительную

часть комплексного числа.
chislo.x=3.5;
//Определяем мнимую часть комплексного числа.
chislo.y=-1.432;
Слайд 42

Пример работы с классами //Вывод комплексного числа, chislo.show_complex() – обращение к

Пример работы с классами

//Вывод комплексного числа, chislo.show_complex() – обращение к методу

класса.
chislo.show_complex();
//Вывод модуля комплексного числа, chislo.modul() – обращение к методу класса.
cout<<"Modul' chisla="<
Слайд 43

Пример работы с классами //Вывод аргумента комплексного числа, //chislo.argument() – обращение

Пример работы с классами

//Вывод аргумента комплексного числа,
//chislo.argument() – обращение к методу

класса.
cout<
Слайд 44

Пример работы с классами Результат работы программы: 3.5-1.432i Modul chisla=3.78162 Argument chisla=-22.2516

Пример работы с классами

Результат работы программы:
3.5-1.432i
Modul chisla=3.78162
Argument chisla=-22.2516

Слайд 45

Пример работы с классами Использование открытых членов и методов позволяет получить

Пример работы с классами

Использование открытых членов и методов позволяет получить полный

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

Пример работы с классами Если в описании элементов класса отсутствует указание

Пример работы с классами

Если в описании элементов класса отсутствует указание метода

доступа, то члены и методы считаются закрытыми (private). Принято описывать методы за пределами класса.
Изменим рассмотренный ранее пример класса complex.
Слайд 47

Пример работы с классами Добавим метод vvod, предназначенный для ввода действительной

Пример работы с классами

Добавим метод vvod, предназначенный для ввода действительной и

мнимой части числа, члены класса и метод show_complex сделаем закрытыми, а остальные методы открытыми. Текст программы будет иметь вид:
#include
#include
#include
#define PI 3.14159
Слайд 48

Пример работы с классами using namespace std; class complex { //Открытые

Пример работы с классами

using namespace std;
class complex {
//Открытые методы.
public:
void vvod();
double modul();
double

argument();
Слайд 49

Пример работы с классами //Закрытые члены и методы. private: double x; double y; void show_complex(); };

Пример работы с классами

//Закрытые члены и методы.
private:
double x;
double y;
void show_complex();
};

Слайд 50

Пример работы с классами //Описание открытого метода vvod класса complex. void

Пример работы с классами

//Описание открытого метода vvod класса complex.
void complex::vvod()
{
cout<<"Vvedite x\t";
cin>>x;
cout<<"Vvedite

y\t";
cin>>y;
Слайд 51

Пример работы с классами // Вызов закрытого метода show_complex из открытого

Пример работы с классами

// Вызов закрытого метода show_complex из открытого метода

vvod.
show_complex();
}
//Описание открытого метода modul класса complex.
double complex::modul()
{
return pow(x*x+y*y,0.5);
}
Слайд 52

Пример работы с классами //Описание открытого метода argument класса complex. double complex::argument() { return atan2(y,x)*180/PI; }

Пример работы с классами

//Описание открытого метода argument класса complex.
double complex::argument()
{
return atan2(y,x)*180/PI;
}

Слайд 53

Пример работы с классами //Описание закрытого метода modul класса complex. void

Пример работы с классами

//Описание закрытого метода modul класса complex.
void complex::show_complex()
{
if (y>=0)
cout<else

cout<}
Слайд 54

Пример работы с классами int main() { complex chislo; chislo.znach(); cout cout chisla=" return 1; }

Пример работы с классами

int main()
{
complex chislo;
chislo.znach();
cout<<"Modul kompleksnogo chisla="<cout<chisla="<return 1;
}

Слайд 55

Пример работы с классами Результат работы программы: Vvedite x 3 Vvedite

Пример работы с классами

Результат работы программы:
Vvedite x 3
Vvedite y -1
3-1i
Modul kompleksnogo

chisla=3.16228
Argument kompleksnogo chisla=-18.435
Слайд 56

Слайд 57

Слайд 58

Слайд 59

Слайд 60

Слайд 61

Слайд 62

Слайд 63

Слайд 64

Слайд 65

Слайд 66

Слайд 67

Слайд 68

Слайд 69

Слайд 70

Слайд 71

Слайд 72

Слайд 73

Слайд 74

Слайд 75

Слайд 76

Слайд 77

Слайд 78

Слайд 79

Слайд 80

Слайд 81

Слайд 82

Слайд 83

Слайд 84

Слайд 85

Слайд 86

Слайд 87

Слайд 88

Слайд 89