
- •Що таке ООП?
- •Объектно-ориентированное программирование, 11 класс
- •Объектно-ориентированное программирование, 11 класс
- •Объектно-ориентированное программирование, 11 класс
- •Объекты и классы
- •Объектно-ориентированное программирование, 11 класс
- •Объектно-ориентированное программирование, 11 класс
- •Объектно-ориентированное программирование, 11 класс
- •Объектно-ориентированное программирование, 11 класс
- •Створення об'єктів в програмі
- •Объектно-ориентированное программирование, 11 класс
- •Приховання внутрішнього устрою
- •Ієрархія класів

Объектно-ориентированное программирование, 11 класс
Класи |
12 |
|
•програма - безліч тих, що взаємодіють об'єктів
•будь-який об'єкт - екземпляр якогось класа
•клас – опис групи об'єктів із загальною структурою і поведінкою
Клас |
відмінність |
|
від структур! |
Дані |
Методи |
стан |
поведінка |
Поле – це змінна, що належить об'єкту.
К.Ю. Поляков, Е.А. Ерёмин, 2013 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Клас «Дорога» |
|
13 |
||
|
|
|
||
Оголошення класу : |
|
|
|
|
class TRoad |
! |
Пам'ять не виділяється! |
||
{ |
||||
|
||||
float Length; |
|
|
|
|
int Width; |
|
|
|
|
}; |
|
|
|
Оголошення змінній (створення об'єкту):
TRoad road;
Спроба змінити дані:
= 60; |
помилка |
|
|
= 3; |
private |
|
!За умовчанням всі члени класу закриті!
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Клас «Дорога» |
14 |
|
Оголошення класу :
class TRoad
{
public: ! Загальнодоступні дані! float Length;
int Width;
};
Основна програми :
main()
{
TRoad road;
road.Length = 60; // працює! road.Width = 3; // працює!
}
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Клас «Дорога» |
15 |
|
TRoad road; |
виклик конструктора |
Конструктор - це метод класу, який викликається для створення об'єкту цього класу.
!Конструктор за умовчанням будується автоматично!
? Що записане в полях?
road.Length = ??? |
«сміття» |
road.Width = ??? |
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Новий конструктор |
16 |
|||||
|
|
|||||
Клас: |
|
|
|
|||
class TRoad |
! |
Имя конструктора совпадает |
||||
{ |
|
|
||||
public: |
|
с именем класса! |
||||
|
|
|
||||
|
float Length; |
|
|
|||
|
int Width; |
// оголошення конструктора |
||||
}; |
TRoad(); |
|
||||
|
|
|
|
|
||
Конструктор: |
|
метод aaa класса TRoad |
||||
TRoad::TRoad() |
||||||
TRoad::aaa() |
||||||
{ |
|
|
|
|||
|
Length = 0; |
{ |
|
|||
|
Width = 0; |
|
... |
|
||
} |
|
|
|
} |
|
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Конструктор з параметрами |
17 |
|
class TRoad
{
public:
...
TRoad ( float length0, int width0 );
};
Конструктор:
TRoad::TRoad ( float length0, int width0 )
{
Length = length0; Width = width0;
}
Виклик: TRoad road ( 60, 3 );
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Захист від невірних даних |
18 |
|
TRoad::TRoad ( float length0, int width0 )
{
if ( length0 > 0 ) Length = length0;
else Length = 1; if ( width0 > 0 )
Width = width0; else Width = 1;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Значення параметрів за умовчанням |
19 |
|||
|
||||
class TRoad |
значення за |
|
||
{ |
умовчанням |
|
||
public: |
|
|
|
|
... |
|
|
|
|
TRoad ( float length0, int width0 |
= 3 |
); |
|
|
}; |
|
|
|
|
Виклик: |
останні в списку |
|
||
TRoad road ( 60 ); |
параметрів |
|
||
|
|
|
|
width = 3
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Клас «Машина» |
20 |
|
|
||
class TCar |
координата, швидкість |
|
{ |
|
|
public: |
|
|
float X, |
полоса |
|
int P; |
|
|
|
|
|
TRoad *Road; |
дорога, по |
|
void move(); |
якій їде |
|
TCar (); // конструктор без параметрів
TCar ( TRoad *road0, int p0, float v0 );
};
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Конструктори класа «Машина» |
21 |
|
|
||
TCar::TCar () |
|
|
{ |
захист від помилок - |
|
Road = NULL; |
|
|
самостійно |
|
|
P = 0; V = 0; X = |
|
|
|
|
}
TCar::TCar ( TRoad *road0, int p0, float v0 )
{
Road = road0;
P = p0; V = v0; X = 0;
}
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
|
|
22 |
|
Клас «Машина»: метод move |
|||
Рівномірний рух: |
t 1 |
|
|
X X 0 V t |
інтервал |
||
|
дискретизації |
переміщення за одну одиницю часу
void TCar::move()
{
X = X + V;
|
if ( X |
} |
звернення через |
|
покажчик |
виїжджає з іншого боку
X = 0;
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
|
Основна програма |
|
23 |
|
|
|
|
|
|
|
const int N = 3; |
|
|
|
|
TCar cars[N]; |
|
|
|
|
int i; |
|
|
|
|
for ( i = 0; i < N; i++ ) |
|
|
|
{ |
|
|
|
|
|
cars[i].Road = &road; |
|
|
|
|
cars[i].P = i + 1; |
|
|
|
|
cars[i].V = 2.0*(i + 1); |
|
|
|
} |
|
|
|
|
|
do { |
|
|
|
|
for ( i = 0; i < N; i++ |
#include <conio.h> |
||
|
cars[i].move(); |
|
||
|
|
|
|
|
} |
поки не |
|
|
|
|
while ( !kbhit() ); |
|
|
|
|
натискнута (будь- |
|||
|
|
|||
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
яка) клавішаі |
|||
|
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Використання покажчиків |
24 |
|
|
||
const int N = 3 |
масив покажчиків |
|
TCar *cars[N]; |
|
|
|
|
|
for ( i = 0; i < N; i ++ ) |
|
|
cars[i] = new TCar ( &road, i+1, |
|
|
|
2.0*(i+1) ); |
|
створення об'єктів
for ( i = 0; i < N; i ++ ) cars[i]->move();
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Що в цьому хорошого і поганого? |
25 |
|
|
ООП – це метод розробки великих програм! |
|
• основна програма - проста і зрозуміла
•класи можуть розробляти різні програмісти незалежно один від одного (+интерфейс!)
•повторне використання класів
неефективно для невеликих завдань
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |