Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 4. Ієрархія обєктів: композиція і агрегація Лекції.

Презентация:



Advertisements
Похожие презентации
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 1. Принцип інкапсуляції Лекції для студентів 2.
Advertisements

Бублик Володимир Васильович Об'єктно- орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 12. Ітераторні контейнери Лекції для студентів.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 2. Копіювання об'єктів Лекції для студентів 2.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 3. Права доступу Лекції для студентів 2 курсу.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 10. Успадкування реалізації (закрите і захищене)
МЕТОДИ ОБ'ЄКТНО- ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: середа, год. You are welcome!
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 9. Відкрите успадкування Лекції для студентів.
(Типи трикутників, лінії пов'язані з трикутником,основні факти,обчислення площі трикутника) підготуавла учениця 7-б класу Локоть Юлія.
Взаємне розміщення прямих у просторі. Паралельність прямої і площини Підготувала вчитель математики, директор Великоканівецького навчально-виховного комплексу.
Подорож в місто трикутників Виконала Козловська А. В.
ОЗНАКИ РІВНОСТІ ТРИКУТНИКІВ РІВНОБЕДРЕНИЙ ТРИКУТНИК.
Верона (Італія). Арена, І ст. Якби будівельники будували будинки так, як програмісти складають програми, досить було б залетіти одному дятлу, щоб зруйнувати.
Трикутник та його елементи Мета уроку: розуміти зміст понять: трикутник, сторони, вершина, кути трикутника, кут протилежний до сторони, кут прилеглий до.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 7. Контейнерні класи Лекції для студентів 2 курсу.
Класифікація трикутників Навчальний проект підготувала учениця 3(7)-Б класу Луців Анна.
База даних (БД) це структурована сукупність взаємопов'язаних даних певної предметної області (реальних об'єктів, процесів, явищ тощо). це структурована.
Числовим виразом називається запис, складений із чисел, знаків арифметичних дій і дужок. Числовий вираз має лише одне значення. Порядок операцій у числовому.
Класи пам'яті даних. Клас пам'яті, час існування та видимість об'єкта Кожен обєкт програми (змінна, функція,...) має свій тип і клас памяті. Тип визначає.
Бублик Володимир Васильович Програмування - 2 Лекція 3. Об'єктне програмування. Права доступу Лекції для студентів 2 курсу.
Що таке трикутник??? Трикутник – це геометрична фігура яка складається з трьох точок і трьох відрізків які сполучають ці точки.Трикутник – це геометрична.
Транксрипт:

Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 4. Ієрархія обєктів: композиція і агрегація Лекції для студентів 2 курсу Hauptbahnhof, Berlin

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 2 Типи ієрархії об'єктів //Layering: вкладання class AnyClass { T _composee; T& _refferee; T* _agregee; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 3 Композиція об'єктів Відношення між об'єктами і їх складовими Композитний об'єкт (композит) складається з компонентів: Автомобіль складається з кузова, двигуна, рами, тощо Компонент служить (складовою частиною) атрибутом композиту: Атрибутами будинку служать стіни, дах, фундамент…

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 4 Приклад 1. Відрізок //Composite class Segment { private: //Components Point _a, _b; ……………… };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 5 Приклад 2. Трикутник //Композиція вершин class Triangle { private: Point _a, _b, _c; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 6 Різновидність композицій Дослідник об'єкту вирішує, які атрибути вважати первинними, а які виражати через інші. Тому один і той же об'єкт реального світу може зображатися різними композиціями своїх атрибутів

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 7 Приклад 3. Знову трикутник //Тепер композиція сторін class Triangle { private: Segment _ab, _bc, _ca; ……………………………. }; Композити самі можуть бути компонентами інших об'єктів: Композит Triangle містить компонентами три композити Segment

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 8 Приклад 4. Все той же трикутник //Композиція вершин і сторін class Triangle { private: Point _a, _b, _c; Segment _ab, _bc, _ca; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 9 Тривалість життя: створення компонент Компоненти створюються конструктором композиту: звичайним або копіювальним Triangle::Triangle (const Point& a, const Point& b, const Point &c): //Ініціалізація компонент _a(a), _b(b), _c(c) { return; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 10 Тривалість життя: видалення компонент Компоненти не вимагають окремого видалення, оскільки вони видаляються автоматично власними деструкторами при видаленні композиту як його атрибути ~ Triangle ::Triangle() { //_a.~Point(); //_b.~Point(); //_c.~Point(); return; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 11 Права доступу Звичайно доступ до компонент та їх методів зовні композиту закрито (компоненти служать атрибутами композиту, а атрибути, як правило, закриті) Композит сам не має доступу до закритої частини компоненту Композит має доступ до відритої частини компоненту, при необхідності він може делегувати цей доступ нагору

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 12 Доступ до атрибутів: селектор Оскільки компоненти закриті, доступ (модифікація) забезпечуються селекторами (модифікаторами) class Triangle { private: Point _a, _b, _c; public: const Point& apexA() const; const Point& apexB() const; const Point& apexC() const; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 13 Реалізація селектора const Point& Triangle::apexA() const { return _a; } Чим відрізняються одна від одної ці реалізації? const Point Triangle::apexA() const { return _a; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 14 Делегування //Delegation of methods class Triangle { private: Segment _ab, _bc, _ca; public: //delegates double length_ab() const; double length_bc() const; double length_ca() const; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 15 Реалізація делегатів //Delegates //трикутник делегує довжину відрізку double Triangle::length_ab() const { //Delegate //метод трикутника звертається //до методу сегмента, недоступного зовні return _ab.length(); }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 16 Неделеговані методи Реалізація методів композиту може використовувати відкриту частину компоненти або асоційованого об'єкту як будівельний матеріал double Triangle::square() const { // length() і distance(_a) методи відрізка return 0.5*side_a().length()*side_a().distance(_a); } Звідки візьмуться відрізки у варіанті трикутника, складеного лише з вершин?

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 17 Асоційовані об'єкти Об'єкти не завжди вкладаються один в інший Асоційовані об'єкти (associate) можуть будуватися на замовлення і існувати поза асоціатором (associater)

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 18 Асоційовані об'єкти //Associator class Triangle { private: Point _a, _b, _c; public: //Associate: сторона трикутника const Segment side_a() const; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 19 Створення асоційованої сторони t.side_a(); //Візьмемо трикутник t

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 20 Створення асоційованої сторони t.side_a(); //Він має селектори вершин,

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 21 Створення асоційованої сторони t.side_a(); //Він має селектори вершин, //але не сторін

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 22 Створення асоційованої сторони t.side_a(); //Візьмемо дві потрібні вершини

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 23 Створення асоційованої сторони t.side_a(); //і побудуємо відрізок

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 24 Варіант надлишкової композиції class Triangle { private: Point _a, _b, _c; // Асоціанти стали компонентами Segment _ab, _bc, _ca; public: const Point& apexA() const; //Делегати стали селекторами const Segment& side_a() const; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 25 Селектор замість делегата //Селектор сторони трикутника const Segment& Triangle::side_a() const { return _bc; //return Segment(_b, _c); }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 26 Конструювання компонентів Triangle::Triangle (const Point& a, const Point& b, const Point &c): //Багато зайвих копій _a(a), _b(b), _c(c), _ab(Segment(a, b)), _bc(Segment(b, c)), _ca(Segment(c, a)) { return; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 27 Consistency (сумісність) Надлишкове копіювання шкідливе можливою несумісністю Візьмемо трикутник t, з вершинами a, b і c; сторонами _bc, _ca і _ab. Змінимо значення вершини a, але забудемо змінити значення сторін _ca і _ab. Трикутник t виявиться несумісним. Проблема сумісності не виникає, якщо трикутник задано лише вершинами

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 28 Як правильно обрати компоненти композиту? //Трикутник за трьома сторонами class Triangle { private: Segment _ab, _bc, _ca; public: //а конструктор, як раніше за трьома вершинами Triangle(const Point &, const Point&, const Point&); };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 29 Конструювання сторін Triangle::Triangle (const Point& a, const Point& b, const Point &c): _ab(Segment(a, b)), _bc(Segment(b, c)), _ca(Segment(c, a)) { return; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 30 Тепер вершини делегуються //Вершина трикутника const Point& Triangle::apexA() const { //return _a; return _ab.start(); }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 31 Знову по сумісність Трикутник складений із сторін знову може стати несумісним при спробі змінити одну із сторін, не змінивши іншої, прилеглої сторони. Проблема: надлишкове кодування приводить до несумісності Рішення: використовувати розвиненіші форми вкладень, а саме агрегацію.

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 32 Підсумок композицій Вершини компоненти, сторони асоціанти

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 33 Підсумок композицій Вершини і сторони компоненти

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 34 Підсумок композицій Сторони компоненти, вершини асоціанти

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 35 Агрегація Кожен нетривіальний об'єкт є агрегатом, складеним зі своїх атрибутів Атрибути можуть бути об'єктами композиція; указниками агрегація указниками; відсилками агрегація відсилками

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 36 Агрегація указниками Агрегація указниками відрізняється від композиції тривалістю життя: деструктор агрегату сам відповідає за видалення агрегованого об'єкту class Agregate { private: Agregee * _agregee; public: Agregate(): _agregee(0){}; ~Agregate() { delete _agregee; } };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 37 Сторони, агреговані в трикутник class Triangle { private: Point _a, _b, _c; Segment *_ab, *_bc, *_ca; public: Triangle(const Point &, const Point&, const Point& c); ~Triangle(); }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 38 Конструктор агрегату Triangle::Triangle (const Point& a, const Point& b, const Point &c): _a(a), _b(b), _c(c), //Сторони обчислюються і агрегуються //на замовлення (on demand) _ab(0), _bc(0), _ca(0) { return; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 39 Деструктор агрегату Triangle::~Triangle() { if (_ab!=0) delete _ab;// vs delete _ab; if (_bc!=0) delete _bc; if (_ca!=0) delete _ca; }; Питання: чи необхідна перевірка на нуль?

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 40 Модифікований селектор //Сторона трикутника const Segment& Triangle::side_a() const { //Якщо не обчислювали раніше if (_bc == 0) //Обчислюємо і запам'ятовуємо _bc = new Segment(_b, _c); return *_bc; }

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 41 Агрегація сторін указниками вершини компоненти сторони агреговані Проблема сумісності відкрита

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 42 Агрегація відсилкою Використовується для агрегування об'єктів, тривалість життя яких перевищує тривалість життя агрегату. За створення і видалення агрегованих відсилкою об'єктів агрегат відповідальності не несе class Agregate { private: Agregee & _agregee; public: Agregate (const Agregee & original): _agregee (original) {}; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 43 Вершини, агреговані в сторону class Segment { private: //Агреговані вершини Point &_a, &_b; ……………… }; Що гарантує сумісність?

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 44 Збалансований трикутник // Кінці відрізків // відсилають // до вершин // трикутника class Segment { private: Point &_a, &_b; }; //Сторони трикутника // агреговані указниками class Triangle { private: Point _a, _b, _c; Segment *_ab, *_bc, *_ca; };

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 45 Збалансований трикутник

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 46 Збалансований трикутник

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 47 Збалансований трикутник

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 48 Збалансований трикутник

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 49 Гарантована сумісність

© Бублик В.В. ООП-1. Об'єктне програмування. Ієрархія обєктів: композиція і агрегація 50 Висновок Головна проблема у створенні агрегатів полягає у виборі правильного типу вкладень залежно від тривалості життя об'єктів з метою досягнення максимальної сумісності