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


Методы программирования (2 семестр)

ННГУ, ВМК, 2004 г. Методы программирования 2. ООП Л. 01. Введение в ООП. Мееров И.Б.Краткое содержание предыдущей серииПерегрузка операций – специальный

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

Слайд 1ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Методы программирования (2 семестр)

Раздел 2. Лекция 07 Наследование

Нижегородский государственный университет
им. Н.И. Лобачевского

Факультет вычислительной математики и кибернетики

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 2ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Краткое содержание предыдущей серии

Перегрузка операций – специальный синтаксический механизм C++, который позволяет использовать стандартные операции языка не только для переменных базовых типов, но и для объектов.
При этом имеется возможность указать, каким именно образом операции должны отрабатывать.
Перегрузка операций – написание специальных функций, отвечающих за выполнение той или иной операции.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 3ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Дальнейшее изучение

Сегодня мы изучим, как в C++ реализуется принцип наследования.

Итак, за дело!

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 4ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Выделение абстракций

Объектный подход подразумевает выделение абстракций в предметной области (классы).

1

2

3

4

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 5ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Выделение абстракций. Основные достижения

Разобрались, с чем имеем дело.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 6ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема моделирования

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 7ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема моделирования. Решение, часть I

Важная проблема: типов абстракций (классов) слишком много. Чаще всего их настолько много, что мы не можем одновременно удерживать в голове информацию о них.
Следствие: тяжело разобраться с тем, как решать задачу.
Решение, часть I: инкапсуляция позволяет скрыть внутренние детали абстракций и уменьшить объем информации, необходимый для понимания задачи.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 8ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема моделирования. Решение, часть II

Важная проблема: типов абстракций (классов) слишком много. Чаще всего их настолько много, что мы не можем одновременно удерживать в голове информацию о них.
Следствие: тяжело разобраться с тем, как решать задачу.
Решение, часть II: что делать со сложными задачами известно еще с древних времен. Один из основных принципов: “Разделяй и властвуй!”.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 9ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема моделирования. Решение, часть II. “Разделяй и властвуй!”

Примечание: принцип приобрел некоторый специальный смысл в математике. Под таким заголовком можно встретить описание целого класса алгоритмов, решающих различные задачи (пример: вычислительная геометрия).
Модульная структура позволяет объединять абстракции (классы) в группы (файлы), тем самым наводя некоторый порядок и позволяя разрабатывать программу по частям.
Но этого оказывается недостаточно.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 10ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема моделирования. Иерархия

Решение: по мнению специалистов, “значительное упрощение в понимании сложных задач достигается за счет образования из абстракций иерархической структуры” (Grady Booch).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 11ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Иерархия

Иерархия – упорядочение абстракций, расположение их по уровням.
Обнаружение иерархий существенно упрощает понимание задачи. Теперь задачу можно понимать на разных уровнях, постепенно спускаясь к все более и более детальному представлению.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 12ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Виды иерархий

Можно обнаружить 2 вида иерархий:
“Это есть…”
“Быть частью”.
Пример:
Круг и точка.
Два варианта представления:
Круг – это такая точка, у которой, кроме того, что есть у точки, есть еще радиус 
Круг – это точка + радиус.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 13ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Виды иерархий

Можно обнаружить 2 вида иерархий:
“Это есть…”
“Быть частью”.
Пример:
Треугольник.
Два варианта представления:
Треугольник – это такая точка, у которой, кроме того, что есть у точки, есть еще 2 точки 
Треугольник – это точка + точка + точка.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 14ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Виды иерархий

Можно обнаружить 2 вида иерархий:
“Это есть…”
“Быть частью”.
Пример:
Звери.
Иерархия абстракций:
Животное – умеет перемещаться.
Птица – Животное, которое умеет летать.
Соловей – Птица, которая умеет не только летать, но еще и петь…

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 15ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Наследование и агрегация

ЭТО ЕСТЬ…

БЫТЬ ЧАСТЬЮ…

НАСЛЕДОВАНИЕ

АГРЕГАЦИЯ

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 16ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Примеры иерархий. Структура персонального компьютера

ПК

Системный блок

Монитор

Периферия


Материнская плата



ЦПУ


Уровни абстракции

Уровни абстракции

агрегация

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 17ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Примеры иерархий. Координатная плоскость

Точка: (x, y)
Круг: (x, y, R)
Эллипс: (x, y, R1, R2)
Квадрат: (x, y, a)
Прямоугольник: (x, y, a, b).
Треугольник:(x1,y1, x2,y2, x3,y3)
Координатная плоскость (набор фигур)

Агрегация

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

ТОЧКА (x, y)

КРУГ (R)

ФИГУРА

ИЛИ:

ТОЧКА (x, y)

КРУГ (R)

КВАДРАТ (a)


ТРЕУГОЛЬНИК = ТОЧКА + ТОЧКА + ТОЧКА

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 18ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Реализация агрегации в C++

С этим мы уже знакомы. Синтаксически агрегация представляет собой использование объекта одного класса в качестве поля другого класса.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 19ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Реализация агрегации в C++. Пример _1

class TPoint {
private:
int visible;
public:
int x, y;
TPoint(int _x, int _y);
void Show();
void Hide();
int IsVisible() const {return visible;}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 20ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Реализация агрегации в C++. Пример _2

class TTriangle {
private:
int visible;
public:
TPoint a, b, c;
TTriangle(TPoint _a, TPoint _b, TPoint _c);
void Show();
void Hide();
int IsVisible() const {return visible;}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 21ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Наследование в C++. Основные идеи

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 22ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Наследование в C++. Понятие схемы выводимости

Схема выводимости – схема наследования классов.

схема выводимости

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 23ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Терминология

Существует 3 варианта терминологии:
предок – потомок;
суперкласс – подкласс.
базовый класс – подчиненный класс.

Предок

Потомок

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 24ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Синтаксис определения класса-потомка

class <Имя_класса>: [<Спецификатор>] <Базовый класс> {
};
Примеры:
class TPoint: TFigure {…};
class TPoint: public TFigure {…};
class TPoint: private TFigure {…};
class TPoint: protected TFigure {…};

По умолчанию подразумевается спецификатор доступа private

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 25ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Спецификаторы доступа private, public, protected

Спецификаторы доступа используются не только для определения областей доступа внутри класса, но и для определения вида наследования (public-, private- и protected-наследование).
Вид наследования определяет, что происходит с видом доступа в производных классах.

Для одиночного класса спецификатор доступа protected означает то же самое, что и private

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 26ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Спецификаторы доступа private, public, protected

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 27ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Анализ таблицы

Как видно из таблицы, private элементы базового класса в производном классе недоступны вне зависимости от ключа. Обращение к ним может осуществляться только через методы базового класса.
Элементы protected при наследовании с ключом private становятся в производном классе private, в остальных случаях права доступа к ним не изменяются.
Доступ к элементам public при наследовании становится соответствующим ключу доступа.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 28ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример

Создадим классы геометрических фигур на плоскости.
Точка: x, y, visible.
class TPoint {
private:
int x, y, visible;
public:
TPoint(int _x = 0, int _y = 0, _vis = 0) {
x = _x; y = _y; visible = _vis;
}
~TPoint() {};
int IsVisible() const { return visible; }
void Show() { if (!visible) {
printf("%d %d ", x, y); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 29ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример

Создадим классы геометрических фигур на плоскости.
Круг: x, y, r, visible.
class TCircle {
private:
int x, y, r, visible;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0) {
x = _x; y = _y; r = _r; visible = _vis;
}
~TCircle() {};
int IsVisible() const { return visible; }
void Show() { if (!visible) {
printf("%d %d %d ", x, y, r); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 30ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Анализ примера

Обнаруживаем, что у нас несколько раз написано одно и то же. По смыслу круг – это точка, у которой есть радиус (наследование).
Реализуем новый класс TCircle, унаследовав его от TPoint.
Посмотрим, какие проблемы при этом появляются.
TCircle:
Данные: радиус, все остальное придет от TPoint.
Методы: изменяются конструктор, деструктор, Show(). IsVisible() приходит от TPoint.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 31ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример

class TCircle: public TPoint {
private:
int r;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0)
{
x = _x; y = _y; r = _r; visible = _vis;
}
~TCircle() {};
void Show() { if (!visible) {
printf("%d %d %d ", x, y, r); visible = 1; }
}
};

Все хорошо?

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 32ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример

class TCircle: public TPoint {
private:
int r;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0)
{
x = _x; y = _y; r = _r; visible = _vis;
}
~TCircle() {};
void Show() { if (!visible) {
printf("%d %d %d ", x, y, r); visible = 1; }
}
};

Ошибка! поле visible скрыто

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 33ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример. Исправления в TPoint

class TPoint {
protected:
int x, y, visible;
public:
TPoint(int _x = 0, int _y = 0, _vis = 0) {
x = _x; y = _y; visible = _vis;
}
~TPoint() {};
int IsVisible() const { return visible; }
void Show() { if (!visible) {
printf("%d %d ", x, y); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 34ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример. TCircle без исправлений

class TCircle: public TPoint {
private:
int r;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0)
{
x = _x; y = _y; r = _r; visible = _vis;
}
~TCircle() {};
void Show() { if (!visible) {
printf("%d %d %d ", x, y, r); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 35ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Анализ примера

Заметим, что ошибка проявлялась не только относительно поля visible, но и относительно полей x, y.
Вопрос: как быть? Объявлять все поля со спецификатором protected?
Ответ: нет! Есть средства правильной реализации. Они заключаются в том, что Вы можете вызывать методы предка, в т.ч. и для конструирования объектов.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 36ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые правила наследования _1

Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Порядок вызова конструкторов определяется приведенными ниже правилами.
Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса по умолчанию (то есть тот, который можно вызвать без параметров).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 37ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые правила наследования _2

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 38ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые правила наследования _3

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 39ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример. Исправления в TPoint

class TPoint {
private:
int x, y;
protected:
visible;
public:
TPoint(int _x = 0, int _y = 0, _vis = 0):
x(_x), y(_y), visible(_vis) {}
~TPoint() {};
int IsVisible() const { return visible; }
void Show() { if (!visible) {
printf("%d %d ", x, y); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 40ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример. Исправления вTCircle

class TCircle: public TPoint {
private:
int r;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0):
TPoint(_x, _y, _vis), r(_r) {}
~TCircle() {};
void Show() { if (!visible) {
printf("%d %d %d ", x, y, r); visible = 1; }
}
};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 41ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Анализ примера

Заметим, что в методе Show переписана часть метода Show для класса TPoint.
Изменения:
class TCircle: public TPoint {
private:
int r;
public:
TCircle(int _x = 0, int _y = 0, _r = 0, _vis = 0):
TPoint(_x, _y, _vis), r(_r) {}
~TCircle() {};
void Show() {
if (!visible) {
TPoint::Show(); printf("%d ", r);
}}
};

вызов перекрытого метода

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 42ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые правила наследования _4

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 43ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые правила наследования _5

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

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 44ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Следующая тема

Далее мы рассмотрим, как реализуется в C++ механизм виртуальных методов.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 45ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Павловская Т.А. C/C++ Программирование на языке высокого уровня.
Ален И. Голуб. Правила программирования на C/C++.
Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++.
Из книг заимствованы различные идеи, элементы текста.
http://lye.upnet.ru
http://xaxa.h1.ru/jokes.html

ННГУ, ВМК, 2004 г.           Методы программирования 2.

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

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

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

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

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


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

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