Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

Презентация на тему Відношення між класами і об’єктами. Відношення “is а” та “has a” Солтер, Клепер С++

Содержание

ПланТипи відношень між класами і об’єктамиВідношення “is а” та “has a”Специфікатори при спадкуванніПросте відкрите спадкуванняСпеціальні методи при спадкуванніПриховування/відкриття імен: usingВідкрите та закрите спадкування: різниця
Лекція 5. Відношення між класами: відкрите успадкування. ПланТипи відношень між класами і об’єктамиВідношення “is а” та “has a”Специфікатори при ЛітератураПитання 1. Типи відношень між класами: Гради Буч Глава 3. Класи і Типи відношень між класамиасоціюється з..є видом (is a)є часиною (has a)є часиною Типи відношень між класами Потужність відношеньпотягпаротягвагон0..*111Основні види потужностей це:Один до одного;Один до багатьох;Багато до багатьох; Залежністю – називають відношення використання, згідно з яким зміна в специфікації одного Агрегацією – називають відношення включення, коли клас А включає в себе об’єкти Узагальненням називається відношення класифікації між загальною сутністю, суперкласом (батьківським) і більш спеціалізованим Клас-нащадок повторюює структуру і поведінку іншого класу (одиночне спадкування) або других (множинне Приклади зображення спадкування Приклади зображення спадкування Відкрите наслідування встановлює між класами відношення “є”: клас нащадок є різновидом базового Синтаксис спадкуванняclass Base{     //оголошення базового класу};	 class Derived Приватні члени базового класу завжди недоступні!!!При public члени базового зберігають свою доступністьПри Клас-нащадок успадковує всі поля та методи батьківського класу Якщо у батьківському class Base{public: 	int a, b; }; //поля базового класуclass Derived : public Методи при спадкуванніclass A {public:	void f();};class B : public A {};// Клас Клас-нащадок успадковує всі поля методи батьківського класу крім:КонструкторівДеструктораОперації присвоєнняОсновне правило: у Якщо в конструкторі похідного класу явно не викликається конструктор базового класу, то Деструктор похідного класу не вимагає явно викликати деструктор базового класу. У деструкторі class Base{public: int a, b;     Base (int a=0, class Derived : public Base{public:	int c;	Derived& operator = (const Derived &t) 	{ Операція копіюванняint main(){	Base b1, b2; //змінні базового класу	Derived d1,d2; //змінні похідного класу	cout Оголошення доступу usingclass Base{public:  void f();  void f(int n);};class Derived Оголошення доступу usingclass Base{public:	void f();}; class Derived : private Base{ public:	void f(int n);	Base::f; Оголошення доступу usingДоступ до члену базового класу в похідних класах можна змінити, Приховування іменclass Base {private:  int x;public:  void mf1();  void Відкриття доступуclass Base {private:  int x;public:  void mf1();  void Директива using дозоляє змінити видимість окремих функцій і членів базового класу, однак Закрите та відкрите спадкуванняПравило 32: Використовуйте відкрите успадкування для моделювання відношення « це є»
Слайды презентации

Слайд 2 План
Типи відношень між класами і об’єктами
Відношення “is а”

ПланТипи відношень між класами і об’єктамиВідношення “is а” та “has a”Специфікатори

та “has a”
Специфікатори при спадкуванні
Просте відкрите спадкування
Спеціальні методи при

спадкуванні
Приховування/відкриття імен: using
Відкрите та закрите спадкування: різниця

Слайд 3 Література
Питання 1. Типи відношень між класами: Гради Буч

ЛітератураПитання 1. Типи відношень між класами: Гради Буч Глава 3. Класи

Глава 3. Класи і об’єкти
Питання 2. Відношення “is а”

та “has a”
Солтер, Клепер С++ для професіоналів c.92
Питання 3. Види спадкування
Тимотти Бадд. Глава 6. Успадкування
Глава 9. Повторне використання коду
Глава 10. Підкласи і підтипи
Глава 11. Заміщення та уточнення

Майерс. Глава 6 Наследование и объектно-ориентированное проектирование
Правило 32: Используйте открытое наследование для моделирования отношения «является»
Правило 33: Не скрывайте унаследованные имена


Слайд 4 Типи відношень між класами




асоціюється з..
є видом (is a)
є

Типи відношень між класамиасоціюється з..є видом (is a)є часиною (has a)є

часиною (has a)
є часиною (has a)
є видом (is a)


Слайд 5 Типи відношень між класами

Типи відношень між класами

Слайд 6 Потужність відношень
потяг
паротяг
вагон
0..*

1
1
1

Основні види потужностей це:
Один до одного;
Один до

Потужність відношеньпотягпаротягвагон0..*111Основні види потужностей це:Один до одного;Один до багатьох;Багато до багатьох;

багатьох;
Багато до багатьох;


Слайд 7 Залежністю – називають відношення використання, згідно з яким

Залежністю – називають відношення використання, згідно з яким зміна в специфікації

зміна в специфікації одного елемента може вплинути на поведінку

іншого елементу, що його використовує, причому зворотне не обов'язково.
Найчастіше залежності застосовуються при роботі з класами, щоб відобразити в сигнатурі операції той факт, що один клас використовує інший як аргумент.

Відношення залежності


Слайд 8 Агрегацією – називають відношення включення, коли клас А

Агрегацією – називають відношення включення, коли клас А включає в себе

включає в себе об’єкти (покажчики на об’єкти) класу В.

Його ще називають відношенням частина/ціле або “has a”.
Композиція – частинний і більш сильний випадок агрегації, коли зі знищенням цілого знищуються частини.
Клас-агрегат вміщує колекцію покажчиків на екземпляри класів-частин.
Клас-композит вміщує колекцію екземплярів агрегованого класу.

Відношення агрегації


Слайд 9 Узагальненням називається відношення класифікації між загальною сутністю, суперкласом

Узагальненням називається відношення класифікації між загальною сутністю, суперкласом (батьківським) і більш

(батьківським) і більш спеціалізованим різновидом цієї сутністі, що називають

підкласом чи нащадком.
Узагальнення називають зв’язком “is a”, від анг. is a kind of. Троянда is a kind of (це є вид) квітки.
Узагальнення і наслідування (спеціалізація) – це протилежні напрямки одного відношення.
Наявність механізму спадкування відрізняє об’єктно-орієнтовані мови від просто об’єктних.

Відношення узагальнення


Слайд 10 Клас-нащадок повторюює структуру і поведінку іншого класу (одиночне

Клас-нащадок повторюює структуру і поведінку іншого класу (одиночне спадкування) або других

спадкування) або других (множинне спадкування) [Буч, гл. 2]
Клас-нащадок наслідує

(вміщує) всі поля та методи батьківського класу, хоча може мати і власні.

Спадкування – відношення обернене до узагальнення


Слайд 11 Приклади зображення спадкування

Приклади зображення спадкування

Слайд 12 Приклади зображення спадкування

Приклади зображення спадкування

Слайд 13 Відкрите наслідування встановлює між класами відношення “є”: клас

Відкрите наслідування встановлює між класами відношення “є”: клас нащадок є різновидом

нащадок є різновидом базового класу.
Всюди де використовується об‘єкт

базового класу дозволяється використовувати об‘єкт похідного класу. Дане положення називається принципом підстановки

Принцип підстановки


Слайд 14 Синтаксис спадкування
class Base
{
//оголошення

Синтаксис спадкуванняclass Base{   //оголошення базового класу};	 class Derived :

базового класу
};
class Derived : специфікатор_доступу Base [,

специфікатор_доступу Base2, … ]
{
//оголошення класу нащадка
};


Слайд 15 Приватні члени базового класу завжди недоступні!!!
При public члени

Приватні члени базового класу завжди недоступні!!!При public члени базового зберігають свою

базового зберігають свою доступність
При protected члени базового отримують доступність

відповідного спеціфікатора

Специфікатори доступу

class Base
{ private: int a;
protected: int b;
public: int c;
};
class Derived1 : public Base
{... // A недоступний
// B - protected член класу Derived1
// C - public член класу Derived1 };

class Derived2: protected Base
{... // A недоступний
// B і C - protected члени класу Derived2 };
class Derived3: private Base
{... // A недоступний
// B і C - private члени класу Derived3};


Слайд 16 Клас-нащадок успадковує всі поля та методи батьківського

Клас-нащадок успадковує всі поля та методи батьківського класу Якщо у

класу
Якщо у батьківському класі поле чи метод приватний,

то нащадок не має до нього доступу
Допускається не тільки успадкування методів базового класу, але також додавання нових і перевизначення існуючих методів
Якщо ім’я поля (методу) у похідному і базовому класі співпадають, говорять про перевизначення або перекриття. Для зверенення до змінної базового класу використовують ::

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


Слайд 17 class Base
{public: int a, b; };
//поля базового

class Base{public: 	int a, b; }; //поля базового класуclass Derived :

класу
class Derived : public Base
{public: int b, c; };
//власні поля

нащадка
Derived d;
d.a = 1;
d.Base::b = 2; //b – перевизначена тому звернення через ::
d.b = 3; d.c = 4;
Base *bp = &d; // Перетворимо покажчик на клас Derived у покажчик на Base

Поля при спадкуванні


Слайд 18 Методи при спадкуванні
class A
{public: void f();};
class B :

Методи при спадкуванніclass A {public:	void f();};class B : public A {};//

public A
{};
// Клас B є безпосереднім базовим класом

для класу C, а клас A – непрямим базовим класом для класу C
class C : public B
{public: void f();
void ff(); };
void C::ff()
{ f(); // Виклик функції f() з класу C
A::f(); // Виклик функції f() з класу A
B::f(); } // Виклик функції A::f() тому що у класі В функцію f() не визначено

Слайд 19 Клас-нащадок успадковує всі поля методи батьківського класу

Клас-нащадок успадковує всі поля методи батьківського класу крім:КонструкторівДеструктораОперації присвоєнняОсновне правило:

крім:
Конструкторів
Деструктора
Операції присвоєння
Основне правило: у конструкторі нащадка потрібно ініціалізувати власні

змінні, а для наслідуваних даних - викликати конструктор базового класу

Спеціальні методи при спадкуванні


Слайд 20 Якщо в конструкторі похідного класу явно не викликається

Якщо в конструкторі похідного класу явно не викликається конструктор базового класу,

конструктор базового класу, то компілятор сам викликає конструктор за

замовчуванням базового класу
Якщо необхідно викликати конструктор базового класу такого ж виду, то конструктор вказується в рядку його ініціалізації
Тіло конструктора базового класу завжди виконується раніше тіла конструктора похідного класу

Конструктори при спадкуванні


Слайд 21 Деструктор похідного класу не вимагає явно викликати деструктор

Деструктор похідного класу не вимагає явно викликати деструктор базового класу. У

базового класу. У деструкторі похідного класу компілятор автоматично генерує

виклики базових деструкторів
Тіло деструктора похідного класу завжди виконується раніше тіла деструктора базового класу

Деструктори при спадкуванні

Знищення в оберненому порядку до створення:


Слайд 22 class Base
{public: int a, b;

class Base{public: int a, b;   Base (int a=0, int

Base (int a=0, int b=0){this->a = a; this->b

= b;
cout << "constructor class Base" << endl;}
~Base() {cout << "destructor class Base" << endl;}; };
class Derived : public Base
{ public: int c;
Derived (int a=0, int b=0, int c =0): Base (a, b) //явний виклик конструктора базового класу
{this->c = c; //присвоєння власних змінних
cout << "constructor class Derived" << endl;};
~Derived (){cout << "destructor class Derived" << endl;};};

Derived d; //у main

Приклад


Слайд 23 class Derived : public Base
{public: int c;
Derived& operator =

class Derived : public Base{public:	int c;	Derived& operator = (const Derived &t)

(const Derived &t)
{ this->Base::operator = (t);
this->c =

t.c;
cout << "operator = Derived" < return *this;}; };

class Base
{public: int a, b;
Base& operator = (const Base &t)
{ this->a = t.a; this->b = t.b;
cout << "operator = Base" < return *this;};};

Операція копіювання

Головна «фішка» - це виклик батьківської операції з операції класу-нащадку, причому в функціональній формі


Слайд 24 Операція копіювання
int main()
{ Base b1, b2; //змінні базового класу
Derived

Операція копіюванняint main(){	Base b1, b2; //змінні базового класу	Derived d1,d2; //змінні похідного класу	cout

d1,d2; //змінні похідного класу
cout

= базового класу
cout<<"d1 = d2"< d1 = d2; //операція = похідного класу
cout<<"b2 = d1"< b2 = d1; //базовий = похідний:
принцип підстановки
return 0;}

Операція бінарна, лівий об’єкт поточного класу b2 = d1;
Для лівого (базового) викликається операція = базового класу, об’єкт d1 зрізається до об’єкту базового класу


Слайд 25 Оголошення доступу using
class Base
{public:
void f();

Оголошення доступу usingclass Base{public: void f(); void f(int n);};class Derived :

void f(int n);
};

class Derived : private Base
{public:
Base::f;

// Обидві функції Base::f() та Base::f(int) будуть публічними
};

Слайд 26 Оголошення доступу using
class Base
{public:
void f();};
 
class Derived : private

Оголошення доступу usingclass Base{public:	void f();}; class Derived : private Base{ public:	void f(int

Base
{ public:
void f(int n);
Base::f; }; // Помилка
Доступ до члену

базового класу не може бути скориговано в похідному класі, якщо в ньому, в той же час, визначається член з тим же ім'ям.

Слайд 27 Оголошення доступу using
Доступ до члену базового класу в

Оголошення доступу usingДоступ до члену базового класу в похідних класах можна

похідних класах можна змінити, згадавши його ім'я в похідному

класі (використанням ключового слова using або без нього). Такий запис називається оголошення доступу.

class Base
{public:
int n;
};

class Derived : private Base
{ public:
Base::n; }; // За замовчуванням n був би приватним членом класу Derived


Слайд 28 Приховування імен
class Base {
private:
int x;
public:

Приховування іменclass Base {private: int x;public: void mf1(); void mf1(double);};class Derived

void mf1();
void mf1(double);};
class Derived : public Base

{
public:
void mf1();};

int x;
d.mf1(); // викликається Derived::mf1
d.mf1(x); // помилка! Derived::mf1 приховує Base::mf1(double)


Слайд 29 Відкриття доступу
class Base {
private:
int x;
public:

Відкриття доступуclass Base {private: int x;public: void mf1(); void mf1(double);};class Derived

void mf1();
void mf1(double);};
class Derived : public Base

{
public:
using Base::mf1;
void mf1();};

int x;
d.mf1(); // викликається Derived::mf1
d.mf1(x); // викликається Base::mf1(double)


Слайд 30 Директива using дозоляє змінити видимість окремих функцій і

Директива using дозоляє змінити видимість окремих функцій і членів базового класу,

членів базового класу, однак змінити видимість приватних данних неможливо.


  Правило 33: Не приховуйте успадковані імена

Вживання того ж самого імені функції у похідному класі приховує всі реалізації цієї функції у базовому.

Правила відкриття/приховування імен


  • Имя файла: vіdnoshennya-mіzh-klasami-і-obєktami-vіdnoshennya-“is-a”-ta-“has-a”-solter-kleper-s.pptx
  • Количество просмотров: 84
  • Количество скачиваний: 0