МЕТОДИ ОБ'ЄКТНО- ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: середа, 15-16 год. You are welcome!

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



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

Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 3. Права доступу Лекції для студентів 2 курсу.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 1. Принцип інкапсуляції Лекції для студентів 2.
Бублик Володимир Васильович Об'єктно- орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 12. Ітераторні контейнери Лекції для студентів.
Бублик Володимир Васильович Програмування - 2 Лекція 3. Об'єктне програмування. Права доступу Лекції для студентів 2 курсу.
Класи пам'яті даних. Клас пам'яті, час існування та видимість об'єкта Кожен обєкт програми (змінна, функція,...) має свій тип і клас памяті. Тип визначає.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 10. Успадкування реалізації (закрите і захищене)
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 2. Копіювання об'єктів Лекції для студентів 2.
Верона (Італія). Арена, І ст. Якби будівельники будували будинки так, як програмісти складають програми, досить було б залетіти одному дятлу, щоб зруйнувати.
База даних (БД) це структурована сукупність взаємопов'язаних даних певної предметної області (реальних об'єктів, процесів, явищ тощо). це структурована.
МЕТОДИ ОБ'ЄКТНО- ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ Володимир Васильович Бублик Кафедра мультимедійних систем, кімн. 204/1 Консультації: середа, четвер
Урок 6 5 клас. Файли, папки та операції над ними.
Бублик Володимир Васильович Об'єктно- орієнтоване програмування Частина 2. Ієрархічне програмування. Лекція 11. Поліморфізм Лекції для студентів 2 курсу.
Створення валідатора розширюваної мови гіпертекстової розмітки (XHTML) Презентація до курсової роботи Гребенюка С.В.
Електронні таблиці EXCEL Використання логічних формул і операцій при опрацюванні даних.
Основи алгоритмізації та програмування Надання значень величинам. Вказівки присвоєння та введення.
Бублик Володимир Васильович Об'єктно-орієнтоване програмування Частина 1. Об'єктне програмування. Лекція 5. Програмовані операції Лекції для студентів.
Компютерні мережі ПІДГОТОВИВ УЧЕНЬ ГРУПИ В-21 ЗУБОВ ОЛЕГ.
ІНФОРМАТИКА. 9 КЛАС Програмне забезпечення комп'ютерних систем Навчальна презентація вчителя Большакової Кристини Сергіївни ЗОШ 9 м. Ізмаїл.
Урок 14 Той самий кадр: як створити вдале фото.
Транксрипт:

МЕТОДИ ОБ'ЄКТНО- ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: середа, год. You are welcome! Copenhagen, Zodiac

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів2 (35) Тема 4. Вкладення об'єктів Object layering 1.Інкапсуляція: композиція і агрегація 2.Ідіома вмісту і реалізації 3.Агрегація відсилками і указниками 4.Асоціація

Інкапсуляція Як і з чого збирати об'єкти? – Повторити трикутники

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів4 (35) Проектування структури класу Визначення узгоджених абстракцій: будинок складається з вікон, дверей, стін, перекриттів, тощо, а не з дошок, цегли і цвяхів Збалансована інкапсуляція: знаємо, що будинок має двері, але не знаємо, з чого вони складаються Приховування інформації: зменшення складності і локалізація можливих змін

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів5 (35) Спряження класів Слабке Через параметр POD (Plain Old Data) Створення об'єкту Через об'єкт-параметр Стабільне Ієрархічне Жорстке (уникаємо) Семантичне

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів6 (35) Зниження жорсткості спряжень Закриття доступу до атрибутів, неінтерфейсних методів, службових класів Мінімізація кола друзів Зменшення порушень інкапсуляції Скорочення захищених атрибутів Дотримання правила Деметри

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів7 (35) Правило Деметри Дозволено: Виклик власного методу Виклик методу свого компоненту Заборонено: Виклик методу об'єкту, створеного компонентом Деметра – богиня родючості. Аїд з дозволу Зевса викрав її дочку Персифону

Композиція: ідіома вмісту Клас складається із своїх атрибутів Об'єкт володіє своїми атрибутами

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів9 (35) Композит //Компонент неявно створюється //і видаляється композитом class Composite { private: Component c; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів10 (35) Компонент class Component { public: Component(int n=1):id(n){} ~Component(){} private: int id; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів11 (35) Атрибут-указник (все ще композиція) class Composite { public: Composite(int); ~Composite(); private: Component *pc; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів12 (35) Створення/видалення //Компонент явно створюється //і видаляється композитом Composite :: Composite(int n): pc(new Component(n)){}; Composite :: ~Composite() { delete pc };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів13 (35) Висновок 1 (про композицію) Атрибути, виражені указниками, можуть (але не мусять) розглядатися як компоненти, якщо вони не знаходяться у спільному використанні, а композит відповідає за їх створення і видалення

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів14 (35) Висновок 2 (про композицію) Атрибути спільного використання можуть трактуватися як компоненти за умови їх агрегації за допомогою інтелектуальних указників

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів15 (35) Висновок 3 (про композицію) Композиція об'єктів вимагає явно визначеного або повністю забороненого копіювання Примітка. В контейнерах завжди розміщуйте самі об'єкти або їх маніпулятори

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів16 (35) Використання зовнішніх ресурсів Ідіома RAII Resource Acquisition Is Initialization Придбанням ресурсу служить (його) ініціалізація Відкрили (захопили) файл, порт, інший ресурс Хто його закриє (відпустить)?

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів17 (35) Приклад використання ресурсів class Port { public: Port(const string& dst);//openPort ~Port();//closePort }; int main () { Port port(server311:8000); }//порт закриється деструктором

Агрегація: ідіома реалізації Агрегати реалізуються за допомогою своїх компонент

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів19 (35) Залежності компіляції: сильні //Компіляція композиту вимагає //приєдання визначення компонент #include Component.h class Composite { private: Component c; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів20 (35) Залежності компіляції: слабкі //Клас Agregee використовується //для реалізації класу Agregate: //досить упередженого оголошення class Agregee; class Agregate { private: Agregee * pagr; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів21 (35) Відокремлення реалізації class Person { public: Person(const string&, const Date&); virtual ~Person(); string name() const; private: string _name; // implementation detail Date _birthDate; // implementation detail };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів22 (35) Конверт (клас-дескриптор) class PersonImpl { public: PersonImpl(const string&, const Date&); virtual ~PersonImpl(); string name() const; private: string _name; // implementation detail Date _birthDate; // implementation detail };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів23 (35) Лист (тіло) class PersonImpl; class Person { public: Person(const string&, const Date&); virtual ~Person(); string name() const; private: PersonImpl *_impl;//ptr to implementation };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів24 (35) Реалізація Person::Person (const string& nm, const Date& bd): _impl(new PersonImpl (nm, bd) ) {}; string Person::name() const { return _ipml->name(); };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів25 (35) Прихована реалізація // Anything.h struct HiddenImpl; class Anything { public:……………………………. private: HiddenImpl *pimpl; };

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів26 (35) Схованка // Anything.cpp #include Anything.h struct HiddenImpl { // Everything you have to hide ……………………………………. }; //Further implementation

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів27 (35) Агрегація відсилками Тільки в дуже обмеженому контексті: неконтрольоване спільне використання (Пригадайте: трикутник, відрізок, точка)

Асоціація Використання одного об'єкту іншим

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів29 (35) Варіанти асоціації Передача параметрів значенням Передача параметрів відсилками Передача параметрів указниками Знайомства: існування в спільній області дії (наприклад, в тілі функції)

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів30 (35) Уникаємо семантичних обмежень Управляючі параметри void f(bool flag, …) { if (flag) ………… Глобальне управління bool flag

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів31 (35) Уникаємо семантичних обмежень Глобальне управління bool gFlag; void f1(…) { gFlag = true;……… void f (…) { if (gFlag) …………

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів32 (35) Уникаємо семантичних обмежень Припущення ініціалізації class AnyClass { void initialize(…); void run(…);//calls initialize() }; AnyClass any; //any.initialize(); any.run();

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів33 (35) Уникаємо семантичних обмежень Припущення використання class AnyClass { AnyClass (a,b,…,c,u,v,…,w); AnyClass (a,b,…,c); }; f(AnyClass(A,B,…,C,U,V,…,W)); g(AnyClass(A,B,…,C));

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів34 (35) Уникаємо семантичних обмежень Припущення підкласу class Derived : public Base{…}; void f(const Base& object) { Derived & derived = dynamic_cast (object); derived.derivedMethod();………

© 2006 Бублик В.В. МООП. 5. Вкладення (layering) обєктів35 (35) Висновки Проектуючи класи, визначайте ієрархії, зокрема їх вплив на тривалість життя об'єктів Спирайтеся лише на інтерфейс і не покладайтеся на знайомства між класами