Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП у (2).ppt
Скачиваний:
49
Добавлен:
30.05.2020
Размер:
4.73 Mб
Скачать

Приховання внутрішнього устрою

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

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