Презентация на тему Объектно-ориентированное программирование

Содержание

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

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

Слайд 1Объектно-ориентированное программирование
7.1 Что такое ООП?
7.2 Объекты и классы
7.3 Скрытие внутреннего устройства

объектов
7.4 Иерархия классов
Объектно-ориентированное программирование 7.1 Что такое ООП? 7.2 Объекты и классы 7.3 Скрытие

Слайд 2Объектно-ориентированное программирование
7.1 Что такое ООП?

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

Слайд 3Направления развития ПО
переход от расчетов по формулам к сложным задачам моделирования

систем
увеличение объемов обрабатываемых данных
повышение сложности программ, увеличение их длины (до миллионов строк!)

В итоге:
коллективная разработка
каждый делает свою часть независимо от других
части программы легко «собрать» вместе

Направления развития ПО переход от расчетов по формулам к сложным задачам моделирования

Слайд 4Борьба со сложностью
«Техника борьбы со сложностью известна с античных времен: “Divide

et impera” (разделяй и властвуй)».
Э. Дейкстра

подзадача 1

подзадача 3

подзадача 2.1

подзадача 2.2

подзадача 2.3

задача

подзадача 2

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

Алгоритмическая декомпозиция

> 100 000 строк???

Борьба со сложностью «Техника борьбы со сложностью известна с античных времен: “Divide

Слайд 5Объектный подход
Люди воспринимают мир, состоящий из объектов (Р. Декарт).

Объектный подход Люди воспринимают мир, состоящий из объектов 
 (Р. Декарт).

Слайд 6Абстракция
Абстракция – это выделение существенных характеристик объекта, отличающих его от других

объектов.


Иллюстрация из книги Г. Буч, Объектно-ориентированный анализ и проектирование с примерами приложений на С++.

Абстракция Абстракция – это выделение существенных характеристик объекта, отличающих его от других

Слайд 7Абстракция в программировании
программа – это множество взаимодействующих объектов (моделей)
объекты имеют свойства

и поведение
объекты не «знают» внутреннее устройство других объектов



А

Б

В

Г

Объектная
декомпозиция

Абстракция в программировании программа – это множество взаимодействующих объектов (моделей) объекты имеют

Слайд 8Абстракция в программировании
Б
В
Верхний уровень:
определить, ЧТО делает каждый объект
определить ИНТЕРФЕЙС –

способ обмена данными между объектами

Б

В

интерфейс

Нижний уровень:
определить, КАК работают объекты

интерфейс


интерфейс

Абстракция в программировании Б В Верхний уровень: определить, ЧТО делает каждый объект

Слайд 9
Что такое ООП?
Программирование, основанное на моделировании задачи реального мира как множества

взаимодействующих объектов, принято называть объектно-ориентированным программированием (ООП).

уточнение следует…


Что такое ООП? Программирование, основанное на моделировании задачи реального мира как

Слайд 10Объектно-ориентированное программирование
7.2 Объекты и классы

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

Слайд 11Объектно-ориентированный анализ (ООА)
Задачи:
выделить взаимодействующие объекты
определить их существенные свойства


описать команды, которые объекты

могут выполнить (поведение)
Объектно-ориентированный анализ (ООА) Задачи: выделить взаимодействующие объекты определить их существенные свойства

Слайд 12Что такое объект?
Объектом можно назвать то, что имеет четкие границы и

обладает состоянием и поведением.

Примеры:

«Подпрыгни!»

«Пли!»

Что такое объект? Объектом можно назвать то, что имеет четкие границы и

Слайд 13Объектная модель: пример

Объекты:
дорога
машины
светофоры

Класс – это множество объектов, имеющих общую структуру и

общее поведение.

Классы объектов: Дорога, Машина

Объектная модель: пример  Объекты: дорога машины светофоры … Класс – это

Слайд 14Объектная модель: класс Дорога



название класса

свойства
поведение
(команды, методы)

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

Слайд 15Объектная модель: класс Машина



Метод – это процедура или функция, принадлежащая классу

объектов.

метод


Объектная модель: класс Машина    Метод – это процедура или

Слайд 16Класс Дорога в программе
type TRoad = class
Length:

real;
Width: integer;
end;


поля

Поле – это переменная, принадлежащая объекту.

Объявление (описание) класса:

Аналогия: чертёж детали.

от type

Класс Дорога в программе type TRoad = class

Слайд 17Класс Дорога в программе
var road: TRoad;
Переменная для работы с объектом:
адрес

12345

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

road := TRoad.Create;

Конструктор – это метод класса, который вызывается для создания объектов этого класса.

?


Класс Дорога в программе var road: TRoad;  Переменная для работы с

Слайд 18Создание объекта
type TRoad = class
Length: real;

Width: integer;
end;
var road: TRoad;
begin
road := TRoad.Create;
road.Length := 60;
road.Width := 3;
end.

описание класса

переменная-ссылка

вызов конструктора

значения полей

Создание объекта type TRoad = class     Length: real;

Слайд 19Новый конструктор
Цель – определить начальные значения при создании объекта.
road := TRoad.Create

(60, 3);

длина

ширина

Описание класса:

type TRoad = class
Length: real;
Width: integer;


end;

constructor Create(length0: real;
width0: integer);

Новый конструктор Цель – определить начальные значения при создании объекта. road :=

Слайд 20Новый конструктор
Реализация (программа) конструктора:
constructor TRoad. Create(length0: real;

width0: integer);
begin
if length0 > 0 then
Length := length0
else Length := 1;
if width0 > 0 then
Width := width0
else Width := 1;
end;

Length := length0;
Width := width0;

TRoad.

метод класса TRoad

Новый конструктор Реализация (программа) конструктора: constructor TRoad. Create(length0: real;

Слайд 21Класс Машина в программе
type TCar = class
X,

V: real; { координата, скорость }
Y: integer; { номер полосы }
road: TRoad; { ссылка на дорогу }
procedure move; { двигаться вперед }
end;

адрес объекта класса Дорога

road: TRoad;

Класс Машина в программе type TCar = class

Слайд 22Класс Машина в программе
procedure TCar.move;
begin
X := X + V; {

при Δt = 1 }
if X > road.Length then
X := 0; { «перескочить» в начало }
end;

Равномерное движение:

V – перемещение за 1 интервал.

длина дороги, по которой едет машина

Класс Машина в программе procedure TCar.move; begin  X := X +

Слайд 23Класс Машина в программе
type TCar = class
...


constructor Create(road: TRoad;
y0: integer; v0: real);
end;

Добавление конструктора:

адрес дороги

полоса

скорость

Класс Машина в программе type TCar = class

Слайд 24Основная программа моделирования
const N = 3;
var road: TRoad;
cars: array

[1..N] of TCar;
i: integer;
begin
road := TRoad.Create(60, N);
for i:=1 to N do
cars[i] := TCar.Create(road, i, 2.0*i);
repeat
for i:=1 to N do cars[i].move;
{ вывод расположения машин }
until keypressed;
end.
Основная программа моделирования const N = 3; var road: TRoad;

Слайд 25Плюсы и минусы ООП
основная программа простая и понятная
каждый класс может разрабатывать

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

увеличение длины полной программы (с учетом описания классов)
замедление работы

Плюсы и минусы ООП основная программа простая и понятная каждый класс может

Слайд 26Объектно-ориентированное программирование
7.3 Скрытие внутреннего устройства объектов

Объектно-ориентированное программирование 7.3 Скрытие внутреннего 
    устройства объектов

Слайд 27Зачем скрывать внутреннее устройство?
Иллюстрация из книги Г. Буч, Объектно-ориентированный анализ и

проектирование с примерами приложений на С++.

борьба со сложностью
безопасность внутренних данных
возможность изменять «внутренности», не меняя интерфейс

Зачем скрывать внутреннее устройство? Иллюстрация из книги Г. Буч, Объектно-ориентированный анализ и

Слайд 28Инкапсуляция
Инкапсуляция («помещение в капсулу») – это скрытие внутреннего устройства объектов от

других объектов.

Класс Перо (цвет и стиль линий):

type TPen = class
color: string;
end;

'FF00FF'

var pen: TPen;
...
pen := TPen.Create;
pen.color := '#%';
writeln(pen.color);

доступно всем!

Инкапсуляция Инкапсуляция («помещение в капсулу») – это скрытие внутреннего устройства объектов от

Слайд 29Инкапсуляция
Скрытие полей:
type TPen = class
private

FColor: string;
end;

от Field – «поле»

частный, закрытый

F

private

pen.color := 'FFFF00';
writeln(pen.color);


Инкапсуляция Скрытие полей: type TPen = class    private

Слайд 30Методы доступа к полю
type TPen = class
private

FColor: string;
public
function getColor: string;
procedure setColor(newColor: string);
end;

общедоступный

public

метод чтения

function getColor: string;

procedure setColor(newColor: string);

метод записи

Метод чтения:
функция без параметров
возвращает значение того же типа, что и поле
Метод записи:
процедура
принммает значение того же типа, что и поле

Методы доступа к полю type TPen = class    private

Слайд 31TPen
Методы доступа к полю
function TPen.getColor: string;
begin
Result := FСolor;
end;
procedure

TPen.setColor(newColor: integer);
begin
FColor := newColor;
end;

getColor

setColor

FColor

другой
объект


методы

поле

TPen Методы доступа к полю function TPen.getColor: string; begin   Result

Слайд 32Проверка при изменении поля
procedure TPen.setColor(newColor: integer);
begin
if { ошибочное значение }

then
FColor := '000000' { чёрный цвет }
else FColor := newColor;
end;

В случае ошибочного значения установить черный цвет:

Length(newColor) <> 6

pen.setColor('FF00'); { ошибка: черный }
pen.setColor('FFFF00'); { запись }
writeln(pen.getColor); { чтение }

Использование:

Проверка при изменении поля procedure TPen.setColor(newColor: integer); begin  if { ошибочное

Слайд 33Свойство
pen.сolor := 'FFFF00'; { запись }
writeln(pen.color); { чтение }
Свойство –

это способ доступа к внутреннему состоянию объекта, имитирующий обращение к его внутренней переменной.

TPen

FColor

другой
объект

color





getColor

setColor

методы

поле

свойство

Свойство pen.сolor := 'FFFF00'; { запись } writeln(pen.color);  { чтение }

Слайд 34Свойство
type TPen = class
private

FColor: string;
function getColor: string ;
procedure setColor(newColor: string );
public
property сolor: string
read getColor write setColor;
end;

свойство

property

pen.сolor := 'FFFF00'; { запись }
writeln(pen.color); { чтение }

string

string

string

тип свойства

getColor

getColor

метод чтения

setColor

setColor

метод записи

Свойство type TPen = class    private

Слайд 35Изменяем способ хранения данных
FColor: string;
FColor: integer;

'FF00FF'
FF00FF16 = 16711935

'001234'
123416 = 4460

'0000A5'
A516 =

165




реализация

интерфейс

Изменяем способ хранения данных FColor: string; FColor: integer;  'FF00FF' FF00FF16 =

Слайд 36Изменяем способ хранения данных
function TPen.getColor: string;
begin
Result := IntToHex (FColor,6);
end;
procedure TPen.setColor(newColor:

string);
begin
if Length(newColor) <> 6 then
FColor := 0 { чёрный цвет }
else
FColor := StrToInt ('$' + newColor);
end;

IntToHex

X10 → X16 (строка)

6 знаков: '0000FF'

StrToInt

строка → число

шестнадцатеричное

Изменяем способ хранения данных function TPen.getColor: string; begin  Result := IntToHex

Слайд 37Свойства «только для чтения»
type TCar = class
private

Fv: real;
...
public
property v: real read Fv;
...
end;

property v: real read Fv;

свойство «только для чтения»

Свойства «только для чтения» type TCar = class    private

Слайд 38Скрытие внутреннего устройства: итог
защита данных объекта
изменение внутреннего устройства не требует изменения

других объектов, если сохранить интерфейс

длина программы ↑
замедление работы

Скрытие внутреннего устройства: итог защита данных объекта изменение внутреннего устройства не требует

Слайд 39Объектно-ориентированное программирование
7.4 Иерархия классов

Объектно-ориентированное программирование 7.4 Иерархия классов

Слайд 40Классификации
Фото: www.statesymbolsusa.org, xenianova.files.wordpress.com, spoon.com.ua, gerbl.ru
Фрукт
сочный съедобный плод дерева или кустарника
базовый класс

классы-наследники
Яблоко

– это разновидность фруктов.
Яблоко наследует все свойства фруктов.
Классификации Фото: www.statesymbolsusa.org, xenianova.files.wordpress.com, spoon.com.ua, gerbl.ru Фрукт сочный съедобный плод дерева или

Слайд 41Примеры наследования свойств
Человек
Работник школы
Ученик
Родитель
Администратор
Учитель
Технический работник
Директор
Завуч
Уборщик
Слесарь
Электрик
базовый класс

Примеры наследования свойств Человек Работник школы Ученик Родитель Администратор Учитель Технический работник

Слайд 42Что такое наследник?
Класс Б является наследником класса А, если можно сказать,

что Б – это разновидность А.


водоем

озеро

осёл

животное

цветок

ромашка

автомобиль

двигатель

автомобиль

грузовик

косточка

ягода


Что такое наследник? Класс Б является наследником класса А, если можно сказать,

Слайд 43Иерархия логических элементов
Логический элемент
с одним входом
с двумя входами
НЕ
И
ИЛИ

Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ И ИЛИ

Слайд 44Определение ООП
Объектно-ориентированное программирование – это такой подход к программированию, при котором


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

Слайд 45Класс «Логический элемент»
type
TLogElement = class
In1, In2: boolean;

Res: boolean;
procedure calc;
end;

Сравните (плюсы, минусы):

type
TLogElement = class
In1, In2: boolean;
function res: boolean;
end;

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

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

Класс «Логический элемент» type  TLogElement = class   In1, In2:

Слайд 46Скрываем данные (инкапсуляция)
type
TLogElement = class
private
FIn1, FIn2: boolean;
FRes: boolean;
procedure

calc;
procedure setIn1(newIn1: boolean);
procedure setIn2(newIn2: boolean);
public
property In1: boolean read FIn1 write setIn1;
property In2: boolean read FIn2 write setIn2;
property Res: boolean read FRes;
end;

читать прямо из поля

свойство «только для чтения»

Скрываем данные (инкапсуляция) type TLogElement = class private  FIn1, FIn2: boolean;

Слайд 47Процедура изменения входа
procedure TLogElement.setIn1(newIn1: boolean);
begin
FIn1 := newIn1;
calc;
end;
Проблемы:
как написать

метод calc?
для элемента «НЕ» доступ ко второму входу не нужен!
Процедура изменения входа procedure TLogElement.setIn1(newIn1: boolean); begin  FIn1 := newIn1;

Слайд 48Метод calc
невозможно написать для базового класса


разный у всех логических элементов
наследники должны

его переопределять!


недоступен для других объектов

Абстрактный метод – это метод, который объявляется, но не реализуется в классе.

Виртуальный метод – это метод, который могут переопределять классы-наследники.

Метод calc невозможно написать для базового класса   разный у всех

Слайд 49Метод calc
type
TLogElement = class
private
...

protected
procedure calc; virtual; abstract;
public
...
end;

procedure calc; virtual; abstract;

protected

виртуальный

абстрактный

защищенный

Абстрактный класс – это класс, содержащий абстрактный метод («фрукт»).

Метод calc type  TLogElement = class   private

Слайд 50Как «скрыть» свойство In2?
type
TLogElement = class
private
...
protected
property In2: boolean

read FIn2 write setIn2;
procedure calc; virtual; abstract;
public
...
end;

property In2: boolean read FIn2 write setIn2;

Как «скрыть» свойство In2? type TLogElement = class private   ...

Слайд 51Классы-наследники: TNot
type
TNot = class(TLogElement)
procedure calc; override;
end;
override;
переопределить
наследник

от …

procedure TNot.calc;
begin
FRes := not FIn1;
end;

Классы-наследники: TNot type   TNot = class(TLogElement)   procedure calc;

Слайд 52Классы-наследники: TLog2In
TLog2In = class(TLogElement)
public
property In2;
end;
свойство становится общедоступным
наследник от …

Классы-наследники: TLog2In TLog2In = class(TLogElement) public  property In2; end; свойство становится

Слайд 53Классы-наследники: TAnd
type
TAnd = class(TLog2In)
procedure calc; override;
end;
override;
переопределить
наследник

от …

procedure TAnd.calc;
begin
FRes := FIn1 and FIn2;
end;

Классы-наследники: TAnd type   TAnd = class(TLog2In)   procedure calc;

Слайд 54Вернемся к setIn1…
procedure
TLogElement.setIn1 (newIn1: boolean);
begin
FIn1 :=

newIn1;
calc;
end;

calc;

какой метод вызывается?

вызвать процедуру = перейти по заданному адресу памяти
в классе TLogElement метод calc не реализован (нет кода, нет адреса)
каждый наследник имеет свой метод calc

Вернемся к setIn1… procedure     TLogElement.setIn1 (newIn1: boolean); begin

Слайд 55Обычный вызов процедуры
...
calc;
...
...
call AB12
...
Паскаль
Ассемблер

процедура
AB12 ...
AB14 ...
AB16 ...
...

Статическое связывание: адрес процедуры известен

и сразу записывается в машинный код!
Обычный вызов процедуры ... calc; ... ... call AB12 ... Паскаль Ассемблер

Слайд 56Динамическое связывание (при выполнении)
...
calc;
...
Паскаль

TNot.calc
методы классов
TAnd.calc
TOr.calc



виртуальный метод
Виртуальный метод – это метод базового

класса, который могут переопределить классы-наследники так, что конкретный адрес вызываемого метода определяется только при выполнении программы.
Динамическое связывание (при выполнении) ... calc; ... Паскаль  TNot.calc методы классов

Слайд 57Основная программа («И-НЕ»)
var elNot: TNot; { ссылки }
elAnd:

TAnd;
A, B: boolean;
begin
elNot := TNot.Create; { создание объектов }
elAnd := TAnd.Create;
writeln('| A | B | not(A&B) ');
writeln('-------------------');
for A:=False to True do begin { перебор вариантов }
elAnd.In1 := A;
for B:=false to True do begin
elAnd.In2 := B;
elNot.In1 := elAnd.res; { связь элементов }
writeln('| ', integer(A), ' | ', integer(B),
' | ', integer(elNot.res));
end;
end;
end.

| A | B | not(A&B)
------------------
| 0 | 0 | 1
| 0 | 1 | 1
| 1 | 0 | 1
| 1 | 1 | 0

Основная программа («И-НЕ») var elNot: TNot;  { ссылки }

Слайд 58Классы – в модуль!
unit log_elem;
{$mode objfpc}
interface { доступно

другим модулям }
type
TLogElement = class
...
end;
... { объявление всех классов }
implementation { скрыто от других модулей }
procedure TLogElement.setIn1(newIn1: boolean);
begin
FIn1 := newIn1; calc;
end;
...
end.

interface

implementation

режим работы с объектами

Классы – в модуль! unit log_elem; {$mode objfpc}  interface

Слайд 59Основная программа
program logic;
{$mode objfpc}
uses log_elem ;
var elNot: TNot;
elAnd: TAnd;

...
begin
elNot := TNot.Create;
elAnd := TAnd.Create;
...
end.

unit log_elem ;
{$mode objfpc}
interface { доступно другим модулям }
...
implementation { скрыто от других модулей }
...
end.

log_elem

log_elem


Основная программа program logic; {$mode objfpc} uses log_elem ; var elNot: TNot;

Слайд 60Обмен данными между объектами



&
«И»
«НЕ»

1
2
объект 1 должен «знать» адрес объекта 2
у объекта

2 должен быть метод, доступный объекту 2, с помощью которого он может передать данные
Обмен данными между объектами    & «И» «НЕ»  1

Слайд 61Обмен данными между объектами
TLogElement = class
private
FNextEl: TLogElement; {

адрес объект 2 }
FNextIn: integer; { номер входа объекта 2 }
...
public
procedure Link(nextElement: TLogElement;
nextIn: integer);
...
end;

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

Обмен данными между объектами TLogElement = class  private   FNextEl:

Слайд 62Обмен данными между объектами
procedure TLogElement.Link

(nextElement: TLogElement;
nextIn: integer);
begin
FNextEl := nextElement;
FNextIn := nextIn;
end;

запомнить адрес и номер входа следующего элемента

Обмен данными между объектами procedure TLogElement.Link

Слайд 63Обмен данными между объектами
procedure TLogElement.setIn1(newIn1: boolean);
begin
FIn1 := newIn1;
calc;

if FNextEl <> nil then
case FNextIn of
1: FNextEl.In1 := res;
2: FNextEl.In2 := res;
end;
end;

если связь установлена…

передать новые данные

аналогично для setIn2…

Обмен данными между объектами procedure TLogElement.setIn1(newIn1: boolean); begin  FIn1 := newIn1;

Слайд 64Обмен данными между объектами
elNot := TNot.Create;
elAnd := TAnd.Create;
elAnd.Link(elNot, 1);
...
for A:=False to

True do begin
elAnd.In1 := A;
for B:=False to True do begin
elAnd.In2 := B;
...
end;
end;

elAnd.Link(elNot, 1);

объект elAnd САМ сообщает объекту elNot, что его выход изменился

установить связь

Обмен данными между объектами elNot := TNot.Create; elAnd := TAnd.Create; elAnd.Link(elNot, 1);

Слайд 65Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики высшей категории,
ГОУ СОШ № 163,

г. Санкт-Петербург
kpolyakov@mail.ru
Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики высшей категории, ГОУ СОШ

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

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

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

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

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


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

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