Объектно-ориентированное программирование

Содержание

Слайд 2

ООП – решение кризиса

ООП является лишь последним звеном в длиной цепи решений,

ООП – решение кризиса ООП является лишь последним звеном в длиной цепи
которые были предложены для разрешения "кризиса программного обеспечения".
Кризис программного обеспечения означает, что те задачи, которые мы хотим решить, опережают наши возможности.

Слайд 3

Сложные системы реального мира

Персональный компьютер
Дерево
Человек
Предприятие
Государство

Сложные системы реального мира Персональный компьютер Дерево Человек Предприятие Государство

Слайд 4

Признаки сложных систем

Являются иерархическими и состоят из взаимозависимых подсистем, которые в свою

Признаки сложных систем Являются иерархическими и состоят из взаимозависимых подсистем, которые в
очередь также могут быть разделены на подсистемы и т.д. – до самого низкого уровня.
Выбор элементарных компонентов произволен и зависит от исследователя.
Каждая часть системы имеет свою функцию и может рассматриваться независимо от других.
Системы состоят из немногих типов подсистем, по-разному скомбинированных и организованных.
Система сложнее, чем совокупность ее частей.

Слайд 5

Объекты

В предметной области выделяются объекты – некоторые целостные сущности, обладающие определенным поведением.

Объект

Состояние

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

Поведение (методы)

Интер
фейс

Слайд 6

Классы

Классы – множества однотипных объектов с одинаковым поведением и набором атрибутов.
У различных

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

Слайд 7

Реализация действий в ООП

Действие в ООП инициируется посредством передачи сообщений объекту, ответственному

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

Слайд 8

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

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

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

Слайд 9

Позднее связывание. Полиморфизм.

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

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

Слайд 10

Иерархия наследования

Классы могут быть организованы в иерархическую структуру с наследованием свойств. Дочерний

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

Объект

Животное

Трансп. средство

Млекопитающее

Человек

Автомобиль

Студент

Техн. устройство

Электронное устр.

Монитор

Слайд 11

Переопределение метода

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

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

Слайд 12

Повторное использование

Наследование позволяет различным типам данных совместно использовать один и тот же

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

Слайд 13

ОО программа

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

ОО программа Программа – совокупность взаимодействующих объектов. Каждый объект выполняет конкретную функцию.
соединяет вместе состояние (данные) и поведение (методы). Объекты одного класса имеют одни и те же методы.
Объект проявляет свое поведение путем вызова метода в ответ на сообщение. Интерпретация сообщения зависит от объекта и может быть различной для различных классов объектов .
Для удобства создания нового класса из уже существующих используется механизм наследования. Наследование обеспечивает повторное использование.

Слайд 14

Принципы ООП

Инкапсуляция (объединение данных с методами в сочетании со скрытием данных)
Абстракция (расширяемость

Принципы ООП Инкапсуляция (объединение данных с методами в сочетании со скрытием данных)
системы классов)
Наследование (повторное использование методов и атрибутов)
Полиморфизм (переопределение методов и гибкий выбор метода во время выполнения программы)

Слайд 15

ООП в С++

Класс – тип данных, содержащий поля (переменные) и методы (функции)

ООП в С++ Класс – тип данных, содержащий поля (переменные) и методы
для их обработки.
Объект – переменная типа класс.
Отличия ООП в С++ от Delphi
статическое размещение объектов в памяти
неявный вызов конструкторов и деструкторов
перегрузка операций
множественное наследование
отсутствие свойств (property)
вложенность классов
отсутствие единого предка

Слайд 16

Описание класса (без наследования)

class <имя> {
[private:]
<описание скрытых элементов>
public:

Описание класса (без наследования) class { [private:] public: }; Элементы класса – поля и методы.
<описание доступных элементов>
};
Элементы класса – поля и методы.

Слайд 17

Пример класса

#include
#include
class student
{ char fam[20],name[20];
int age;
public:
void setdata (char

Пример класса #include #include class student { char fam[20],name[20]; int age; public:
*f, char *n, int a = 20)
{ age = a; strcpy(fam, f);
strcpy(name, n);
}
void show ()
{ cout << fam << ' ' << name << ' ' << age << endl; }
};

Поля

Встраиваемые методы

Слайд 18

Использование объектов

int main ()
{ student a, b ;
a.setdata("Ivanov", "Boris");
b.setdata("Sokolova",

Использование объектов int main () { student a, b ; a.setdata("Ivanov", "Boris");
"Olga", 19);
a.show();
b.show();
return 0;
}

Описание объектов

Вызов методов (передача сообщений)

Слайд 19

Глобальные и локальные классы

Классы могут быть глобальными (объявленными вне любого блока) и

Глобальные и локальные классы Классы могут быть глобальными (объявленными вне любого блока)
локальными (объявленными внутри блока, например, функции или класса).
Локальные классы не могут иметь статических элементов, все методы должны быть описаны внутри класса.

Слайд 20

Встроенные и обычные методы

Встроенный метод определяется внутри класса. Метод может быть определен

Встроенные и обычные методы Встроенный метод определяется внутри класса. Метод может быть
вне класса, тогда внутри класса указывается только его заголовок.
class student
{ char fam[20],name[20];
int age;
public:
void setdata (char *f, char *n, int a = 20);
void show ();
};

Слайд 21

Определение метода вне класса

При определении метода вне класса в его заголовке указывается

Определение метода вне класса При определении метода вне класса в его заголовке
имя класса с использованием операции доступа к области видимости (::).
void student :: setdata (char *f, char *n, int a)
{ age = a; strcpy(fam, f);
strcpy(name, n);
}

Слайд 22

Примеры использования объектов

student group [25];
student *s = new student;

for (int i =

Примеры использования объектов student group [25]; student *s = new student; …
0; i < 25; i++) group[i].show();
s -> setdata ( “Sidorov”, “Ivan”);

Слайд 23

Указатель this

Для того, чтобы метод работал с полями того объекта, для которого

Указатель this Для того, чтобы метод работал с полями того объекта, для
он вызван, передается скрытый параметр this, содержащий константный указатель на объект. В явном виде this используется для возврата ссылки или указателя на объект.
student& student :: old (student &a)
{ if ( age > a.age ) return *this;
return a;
}

student c = a.old(b);
c.show();

Слайд 24

Конструкторы

Конструктор – метод предназначенный для инициализации объекта, выполняющийся автоматически в момент его

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

Слайд 25

Пример использования конструктора

#include
#include
#include
class _time
{ int h,m;
public:
_time

Пример использования конструктора #include #include #include class _time { int h,m; public:
( int hours = 0, int minutes = 0)
{ h = hours; m = minutes; }
void show()
{ cout << setfill('0')<< setw(2) << h
<< ':' << setw(2) << m << endl;}
};
int main()
{ _time t(12,30), p = 12;
t.show(); p.show(); return 0;}

Конструктор

Создание объектов с инициализацией

Слайд 26

Список инициализации

Служит для инициализации полей в конструкторе. Список позволяет инициализировать константные поля

Список инициализации Служит для инициализации полей в конструкторе. Список позволяет инициализировать константные
и поля-ссылки
class _time
{ int h,m;
public:
_time ( int hours = 0, int minutes = 0)
: h( hours ), m ( minutes ) { }

};

Слайд 27

Конструктор копирования

Конструктор копирования получает в качестве параметра константную ссылку на объект

Конструктор копирования Конструктор копирования получает в качестве параметра константную ссылку на объект
того же класса.
T (const T& )
Этот конструктор вызывается
при описании объекта с инициализацией другим объектом
при передаче объекта в функцию по значению
при возврате объекта из функции
Если конструктор копирования не указан, он будет создан автоматически.

Слайд 28

Пример использования конструктора копирования

class student
{ char *fam,*name;
int age;
public:
student (char *f,

Пример использования конструктора копирования class student { char *fam,*name; int age; public:
char *n, int a = 20) : age (a)
{ fam = new char [20]; name = new char [20];
strcpy (fam, f); strcpy (name, n); }
student (student &s) : age (s.age)
{ fam = new char [20]; name = new char [20];
strcpy (fam, s.fam); strcpy (name, s.name); }
void show ();
};
int main ()
{ student a("Ivanov", "Boris"), b("Sokolova", "Olga", 19);
student c = a;
a.show(); b.show(); c.show(); return 0; }

Слайд 29

Объекты как параметры функций

Рассмотрим метод для сложения времени class _time
{

Объекты как параметры функций Рассмотрим метод для сложения времени class _time {

void add (const _time &time1,
const _time &time2)
{ h = time1.h + time2.h;
m = time1.m + time2.m;
if (m >= 60) { h++; m-=60;}
h = h % 24;}
};
Вызов: c.add( a , b);

Слайд 30

Объекты как результаты функций

_time inc ( _time interv)
{ _time

Объекты как результаты функций _time inc ( _time interv) { _time t;
t;
t.h = h + interv.h;
t.m = m + interv.m;
if (t.m>=60) { t.h++; t.m-=60;}
t.h = t.h % 24;
return t;
}
Вызов: _time c = a.inc(b);
Имя файла: Объектно-ориентированное-программирование.pptx
Количество просмотров: 226
Количество скачиваний: 0