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

Приховання внутрішнього устрою
26
К.Ю. Поляков, Е.А. Ерёмин, 2013 |
http://kpolyakov.spb.ru |

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

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Приклад: клас «перо» |
|
28 |
||
|
|
|||
class TPen |
Field – поле |
|
|
|
{ |
R G B |
|
||
private: |
|
|
|
|
|
|
|
|
|
string |
FColor; // колір, "FF00FF" |
|
||
}; |
! |
За умовчанням всі члени класу |
|
|
|
|
|||
class TPen |
закриті – private! |
|
||
|
|
? Як до них звертатися? |
|
|
{ |
|
|
|
|
private: |
|
|
|
|
string |
FColor; |
|
методи |
|
public: |
|
|
доступу |
|
string getColor ();
void setColor ( string newColor );
};
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Приклад: клас «перо» |
29 |
|
Набути значення:
string TPen::getColor ()
{
return FColor;
}
Записати значення:
void TPen::setColor ( string newColor )
{
|
if ( newColor.length()!= 6 ) |
|
|
FColor = "000000"; |
якщо |
|
else FColor = newColor; |
|
|
помилка, |
|
} |
|
|
|
і |
|
|
|
чорний колір |
!Захист від невірних даних!
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Приклад: клас «перо» |
30 |
||
|
|
||
Використання: |
|
встановит |
|
TPen pen; |
|
и колір |
|
pen.setColor ( "FFFF00" ); |
|
|
|
cout << "цвет пера: " << pen.getColor(); |
|||
! Не дуже зручно! |
|
прочитати |
|
|
колір |
||
pen |
FFFF |
не можна в |
|
cout |
color |
C++ |
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Зміна внутрішнього устрою |
31 |
|||||
|
||||||
Зручніше зберігати колір у вигляді числа: |
|
|||||
class TPen |
? Знайди відмінність! |
|
||||
{ |
|
private |
: |
|
||
|
змінився внутрішній |
|
||||
|
|
int |
FColor; |
|
||
|
|
устрій |
|
|||
public: |
|
|||||
|
|
|
||||
|
|
string getColor(); |
|
|
||
|
|
void setColor( string newColor ); |
|
|
||
}; |
|
|
|
|
|
|
!Інтерфейс не змінився!
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Перетворення int hex 32
Використання потоку (байтов):
16711935 "FF00FF"
записуємо в потік число в |
читаємо |
шістнадцатирічній системі |
рядок |
#include <sstream> |
підключити |
|
строкові потоки |
stringstream s; |
? Що погано? |
s << hex << FColor; |
255 "FF"
"0000FF" |
правильно так! |
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
|
33 |
||
Перетворення hex ↔ int |
|
||
#include <sstream> |
підключити |
||
#include <iomanip> |
|||
|
маніпулятори |
||
string TPen::getColor() |
|||
{ |
заповнювати не |
||
stringstream s; |
|||
пропусками, а |
|||
s << setfill('0') |
нулями |
||
<< setw(6) |
вивести 6 знаків |
||
<< hex << FColor; |
|||
return s.str(); |
прочитати рядок |
||
} |
string з потоку |
255 "0000FF"
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Перетворення hex int 34
Використання потоку: |
|
"FF00FF" |
16711935 |
записуємо в |
читаємо число в |
потік рядок |
шістнадцатирічній системі |
void TPen::setColor ( string newColor )
{
stringstream s;
if ( newColor.length()!= 6 ) FColor = 0; // чорний колір
else { |
|
записуємо рядок |
|
s |
<< |
newColor; |
|
s |
>> |
hex >> FColor; |
} |
читаємо |
} |
число |
|
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Властивість «лише для читання» |
35 |
|
Швидкість машини можна лише читати:
class TCar { |
немає методу запису |
|
private: |
||
|
double Fv; public:
double getV() { return Fv; }
};
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |

Объектно-ориентированное программирование. Языки C++ и C#. 11 класс
Приховання внутрішнього устрою |
36 |
|
Інкапсуляція(«розміщення в капсулі»)
властивості внутрішній
устрій (private)
методи інтерфейс (public)
К.Ю. Поляков, Е.А. Ерёмин, 2014 |
http://kpolyakov.spb.ru |