Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / 17. Об'єктно-орієнтоване програмування, л.5.1 - 5.3.ppt
Скачиваний:
37
Добавлен:
30.05.2020
Размер:
871.94 Кб
Скачать

Інкапсуляція

Інкапсуляція - здатність об'єкту приховувати внутрішній устрій своїх властивостей і методів

Згідно даному принципу, клас повинен розглядатися як чорний ящик

Зовнішній користувач не знає деталі реалізації об'єкту і працює з ним лише шляхом наданого об'єктом інтерфейсу

Дотримання даному принципу може зменшити число зв'язків між класами і спростити їх незалежну реалізацію, модифікацію і тестування

class IntStack

{

public:

void Push(int value);

int Pop();

bool IsEmpty()const;

private:

//тут розташовуються дані

//необхідні для реалізації стека цілих чисел

};

Спадкоємство

Спадкоємство дозволяє описати новий клас на основі вже існуючого батьківського (базового) класу

Клас-нащадок може додати свої власні властивості і методи, користуватися методами і властивостями базового класу

Спадкоємство дозволяє будувати ієрархії класів

class Plane

{

public:

void TakeOff(); void Fly(); void Land();

private:

double m_fuel;

};

class MilitaryPlane : public Plane

{

public:

void Attack(); private:

int m_ammo;

};

Поліморфізм

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

Поліморфізм дозволяє обробляти об'єкти класів-нащадків як однотипні об'єкти, не дивлячись на те, що реалізація методів у них може розрізнятися

class Shape

{

public:

virtual double

GetArea()=0; };

class Rectangle : public Shape

{

public:

virtual double

GetArea()

{

return width *

height;

}

private:

double width, height;

};

class Circle : public Shape

{

public:

virtual double GetArea()

{

return 3.1415927 * radius * radius;

}

private:

double radius;

};

Оголошення класу в C++

Для оголошення класу в C++ служить ключове слово class

Синтаксис

class ідентифікатор

{}; // оголошення даних і методів

Реалізація методів класу може бути винесена за межі оголошення класу

Приклад

class Date

{

int year, month, day; void next();

void print();

};

// Реалізація методів класу void Date::print()

{

printf(“%d/%d/%d”, day, month, year);

}

void Date::next()

{

// ...

}

Розміщення класів в різних файлах

Загальноприйнятою практикою є розміщення оголошення класів в заголовних файлах .h, а їх реалізації - у файлах .cpp

Підвищення модульності проекту

Кожен клас може бути підключений для подальшого використання за допомогою директиви #include “ім'я заголовного файлу”

При внесенні змін до реалізації методу класу перекомпіляції піддадуться лише змінені файли

date.h

date.cpp

main.cpp

class Date

#include “date.h”

#include “date.h”

{

 

 

public:

void Date::Next()

int main()

void Next();

{

{

void Print();

// ...

Date date1;

private:

}

return 0;

int m_day;

 

}

int m_month;

void Date::Print()

 

int m_year;

{

 

};

// ...

 

 

}