Разделы презентаций


Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм

Содержание

Программирование и основы алгоритмизации Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм2Шевченко А. В.Понятие абстракцииАбстракция в объектно-ориентированном программировании — это выделение существенных характеристик объектов, которые отличают их от всех других объектов, четко определяя

Слайды и текст этой презентации

Слайд 1Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
1
Тема

5. Объектно-ориентированное программирование. Наследование и полиморфизм
Шевченко А. В.

Программирование и основы алгоритмизацииТема 5. Объектно-ориентированное программирование. Наследование и полиморфизм1Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизмШевченко А.

Слайд 2Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
2
Шевченко

А. В.
Понятие абстракции
Абстракция в объектно-ориентированном программировании — это выделение существенных

характеристик объектов, которые отличают их от всех других объектов, четко определяя концептуальные границы каждого класса.
Программирование и основы алгоритмизации		Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм2Шевченко А. В.Понятие абстракцииАбстракция в объектно-ориентированном программировании —

Слайд 3Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
3
Шевченко

А. В.
Классификация объектов по различным признакам

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм3Шевченко А. В.Классификация объектов по различным признакам

Слайд 4Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
4
Шевченко

А. В.
Иерархия абстрактного и конкретного
Объект
Геометрическая
фигура
Объемная
Плоская
Параллелепипед
Цилиндр
Параллелограмм
Эллипс
Абстрагирование
Конкретизация

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм4Шевченко А. В.Иерархия абстрактного и конкретногоОбъектГеометрическаяфигураОбъемнаяПлоскаяПараллелепипедЦилиндрПараллелограммЭллипсАбстрагированиеКонкретизация

Слайд 5Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
5
Шевченко

А. В.
Понятие наследования
Наследование — важная составляющая концепции объектно-ориентированного программирования, благодаря

которой возможно создание новых классов на базе уже существующих.
Новые классы (производные) получают все элементы наследуемых классов (базовых).

Базовый класс

Производный класс

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм5Шевченко А. В.Понятие наследованияНаследование — важная составляющая концепции

Слайд 6Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
6
Шевченко

А. В.
Простое и множественное наследования
При простом наследовании производный класс имеет

только один базовый класс. Базовый класс может иметь несколько производных классов. Иерархия классов имеет вид дерева.
При множественном наследовании производный класс имеет несколько родительских классов. Иерархия классов имеет вид ориентированного графа.

Базовый
класс

Производный
класс

Производный
класс

Базовый
класс

Производный
класс

Базовый
класс

Простое наследование

Множественное наследование

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм6Шевченко А. В.Простое и множественное наследованияПри простом наследовании

Слайд 7Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
7
Шевченко

А. В.
Критерии «хорошей» иерархии классов
Критерий включения. Объекты производных классов должны

обладать всеми свойствами базовых классов.
Критерий независимости. Наследуемые свойства не должны ограничивать использование собственных элементов производных классов.
Критерий специализации. Если производный класс приводит к специализации (ограничению) свойств базового класса, то это является нарушением принципа независимости. Классы, которые отличаются только специализацией, обычно составляют один уровень иерархии.
Критерий единства. Наследование и полиморфизм обеспечивают единообразное выполнение аналогичных функций классов. Базовые классы используются для создания интерфейса между классами и «внешним миром».
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм7Шевченко А. В.Критерии «хорошей» иерархии классовКритерий включения. Объекты

Слайд 8Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
8
Шевченко

А. В.
Наследование в С++
class A
{
...
};

class B
{
...
};
Класс

А

Класс В

Класс С

class C : public A, public B
{
...
};





Ограничение доступа при наследовании

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм8Шевченко А. В.Наследование в С++class A{  ...};class

Слайд 9Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
9
Шевченко

А. В.
Ограничение доступа при наследовании
Атрибут доступа, указанный при наследовании
Атрибут доступа

базового класса

Атрибут доступа производного класса

public

public

public

protected

protected

private

private

protected

public

protected

protected

protected

private

private

private

public

private

protected

private

private

private

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм9Шевченко А. В.Ограничение доступа при наследованииАтрибут доступа, указанный

Слайд 10Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
10
Шевченко

А. В.
Наследование и конструкторы
Конструкторы и деструкторы не наследуются. При создании

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

Базовый класс

Производный класс

Конструктор

Конструктор

Деструктор

Деструктор

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм10Шевченко А. В.Наследование и конструкторыКонструкторы и деструкторы не

Слайд 11Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
11
Шевченко

А. В.
Пример наследования и использования конструкторов
class Figure
{
protected:
TColor color;
public:

Figure(TColor Color);
TColor Color() { return(color); }
};

Figure::Figure(TColor Color)
{
color = Color;
}

Фигура

Прямоугольник

Круг

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм11Шевченко А. В.Пример наследования и использования конструкторовclass Figure{protected:

Слайд 12Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
12
Шевченко

А. В.
Пример наследования (продолжение)

class Rectangle : public Figure
{
private:
float

width;
float height;
public:
Rectangle(float Width, float Height, TColor Color);
float Area() { return(width*height); }
};

Rectangle::Rectangle(float Width, float Height, TColor Color) :
Figure(Color)
{
width = Width;
height = Height;
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм12Шевченко А. В.Пример наследования (продолжение)class Rectangle : public

Слайд 13Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
13
Шевченко

А. В.
Пример наследования (продолжение)

class Circle : public Figure
{
private:
float

radius;
public:
Circle(float Radius, TColor Color);
float Area() { return(M_PI*radius*radius); }
};

Circle::Circle(float Radius, TColor Color) : Figure(Color)
{
radius = Radius;
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм13Шевченко А. В.Пример наследования (продолжение)class Circle : public

Слайд 14Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
14
Шевченко

А. В.
Полиморфизм
Понятие полиморфизма тесно связано с концепцией наследования. Оно означает

феномен различного выполнения одноименных функций в разных классах.
Перегрузка функций и операторов также является одной из составляющих полиморфизма.

Базовый класс

Производный класс

Метод Х

Метод Х

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм14Шевченко А. В.ПолиморфизмПонятие полиморфизма тесно связано с концепцией

Слайд 15Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
15
Шевченко

А. В.
Пример переопределения методов в С++
Фигура
Прямоугольник
Круг
Площадь
Площадь
Площадь
Связывание объекта и метода
Статическое (раннее)
Динамическое

(позднее)
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм15Шевченко А. В.Пример переопределения методов в С++ФигураПрямоугольникКругПлощадьПлощадьПлощадьСвязывание объекта

Слайд 16Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
16
Шевченко

А. В.
Пример раннего связывания
class Figure
{
...
public:
float Area() { return(-1);

}
};

class Rectangle : public Figure
{
...
public:
float Area() { return(width*height); }
}

class Circle : public Figure
{
...
public:
float Area() { return(M_PI*radius*radius); }
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм16Шевченко А. В.Пример раннего связыванияclass Figure{...public:  float

Слайд 17Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
17
Шевченко

А. В.
Пример раннего связывания
void main()
{
Figure f; Rectangle r(200,

100); Circle c(150);

ShowMessage(f.Area()); // метод класса Figure
ShowMessage(r.Area()); // метод класса Rectangle
ShowMessage(c.Area()); // метод класса Circle

ShowMessage(r.Figure::Area()); // метод класса Figure
ShowMessage(c.Figure::Area()); // метод класса Figure

Figure *fp = &f; Figure *rp = &r; Figure *cp = &c;

ShowMessage(fp->Area()); // метод класса Figure
ShowMessage(rp->Area()); // метод класса Figure
ShowMessage(cp->Area()); // метод класса Figure

Rectangle *rp1 = &r; Circle *cp1 = &c;

ShowMessage(rp1->Area()); // метод класса Rectangle
ShowMessage(cp1->Area()); // метод класса Circle
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм17Шевченко А. В.Пример раннего связыванияvoid main(){  Figure

Слайд 18Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
18
Шевченко

А. В.
Пример позднего связывания
class Figure
{
...
public:
virtual float Area() {

return(-1); }
};

class Rectangle : public Figure
{
...
public:
virtual float Area() { return(width*height); }
}

class Circle : public Figure
{
...
public:
virtual float Area() { return(M_PI*radius*radius); }
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм18Шевченко А. В.Пример позднего связыванияclass Figure{...public:  virtual

Слайд 19Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
19
Шевченко

А. В.
Пример позднего связывания
void main()
{
Figure f; Rectangle r(200,

100); Circle c(150);

ShowMessage(f.Area()); // метод класса Figure
ShowMessage(r.Area()); // метод класса Rectangle
ShowMessage(c.Area()); // метод класса Circle

ShowMessage(r.Figure::Area()); // метод класса Figure
ShowMessage(c.Figure::Area()); // метод класса Figure

Figure *fp = &f; Figure *rp = &r; Figure *cp = &c;

ShowMessage(fp->Area()); // метод класса Figure
ShowMessage(rp->Area()); // метод класса Rectangle
ShowMessage(cp->Area()); // метод класса Circle

Rectangle *rp1 = &r; Circle *cp1 = &c;

ShowMessage(rp1->Area()); // метод класса Rectangle
ShowMessage(cp1->Area()); // метод класса Circle
}
Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм19Шевченко А. В.Пример позднего связыванияvoid main(){  Figure

Слайд 20Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
20
Шевченко

А. В.
Чисто виртуальные методы
class Figure
{
...
public:
virtual float Area() =

0;
};

class Rectangle : public Figure
{
...
public:
virtual float Area() { return(width*height); }
}

class Circle : public Figure
{
...
public:
virtual float Area() { return(M_PI*radius*radius); }
}

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

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм20Шевченко А. В.Чисто виртуальные методыclass Figure{...public:  virtual

Слайд 21Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
21
Шевченко

А. В.
Абстрактные классы
class Figure
{
...
public:
virtual float Area() = 0;
};

void

main()
{
Figure f;
...
}



[C++ Error] test.cpp(50): E2352 Cannot create instance of abstract class 'Figure'
[C++ Error] test.cpp(50): E2353 Class 'Figure' is abstract because of 'Figure::Area() = 0'


Классы, которые включают хотя бы один чисто виртуальный метод, называются абстрактными. Для абстрактных классов не могут быть созданы объекты. Абстрактные классы всегда находятся на вершине иерархии классов и предназначены для задания интерфейса и придания иерархии единообразия.

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм21Шевченко А. В.Абстрактные классыclass Figure{...public:  virtual float

Слайд 22Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
22
Шевченко

А. В.
Конфликты при множественном наследовании
class A1
{
public:
int a;

void Func();
};

class A2
{
public:
int a;
void Func();
};

class B : public A1, public A2
{
...
};


void main()
{
B b;
b.a = 5; // Ошибка
b.Func(); // Ошибка
b.A1::a = 6; // Правильно
b.A1::Func(); // Правильно
b.A2::a = 7; // Правильно
b.A2::Func(); // Правильно
}

Для устранения конфликтов имен при множественном наследовании используется оператор расширения области видимости

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм22Шевченко А. В.Конфликты при множественном наследованииclass A1{public:

Слайд 23Программирование и основы алгоритмизации
Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм
23
Шевченко

А. В.
Виртуальные базовые классы
class A
{
...
}

class B : virtual public A
{
...
}

class

C : virtual public A
{
...
}

class D : public B, public C
{
...
}

Класс B

Класс C

Класс D

Класс A

Программирование и основы алгоритмизации	Тема 5. Объектно-ориентированное программирование. Наследование и полиморфизм23Шевченко А. В.Виртуальные базовые классыclass A{...}class B :

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика