cpp-2013 #3 oop basics

21
Основи об’єктно- орієнтованого програмування

Upload: eleks-developers-courses-if

Post on 26-May-2015

855 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: cpp-2013 #3 OOP Basics

Основи об’єктно-орієнтованого програмування

Page 2: cpp-2013 #3 OOP Basics

ООП є інструментом розробки ПЗ(одним із багатьох)

The Right Way: вміти користуватись кількома інструментами в залежності від потреб

Мета сьогодні: сформувати «відчуття» ООП

Page 3: cpp-2013 #3 OOP Basics

Програмне забезпечення

• Успішне– Legacy (унаслідуване, застаріле)– Maintainable (легко підтримуване)

• Неуспішне

Page 4: cpp-2013 #3 OOP Basics

Legacy software

• Довго експлуатується• Продовжує експлуатуватись• Задовільняє потреби замовника• Але разом з тим– Містить дефекти, не містить нових функцій

• Важко покращується

Page 5: cpp-2013 #3 OOP Basics

Maintainable software

• Довго експлуатується• Продовжує експлуатуватись• Задовільняє потреби замовника• Але разом з тим– Містить дефекти, не містить нових функцій

• Легко покращується

Page 6: cpp-2013 #3 OOP Basics

Неуспішне ПЗ

• Непередбачувано короткий цикл життя• Не задовільняє потреб замовника• Якість не має значення

Page 7: cpp-2013 #3 OOP Basics

Легке покращення

• Хочемо змінювати програму– Проясняються старі/з’являються нові вимоги

• Не хочемо змінювати готовий код– Зміна – внесення нестабільності– Потрібно перетестувати– Залежності транзитивні

Page 8: cpp-2013 #3 OOP Basics

Складність• Розробка ПЗ – управління складністю

Tony Hoare:There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.

QuickSort NULLApologized

Page 9: cpp-2013 #3 OOP Basics

Складність

• Способи зменшення складності:– Підвищення IQ - ?– Декомпозиція– Абстрагування – Перевикористання– …

Page 10: cpp-2013 #3 OOP Basics

Structured programming

• if, while, functions замість goto• Краще розуміння того, що робить програма• За рахунок абстрактніших конструкцій• Мета – уникнути «спагетті-коду»• Bad news: самої парадигми виявилось

недостатньо• Непідтримуваний код все ще можливий

Page 11: cpp-2013 #3 OOP Basics

Object-oriented

• Об’єкти замість процедур• Краще розуміння того, що робить програма• За рахунок абстрактніших конструкцій• Мета – уникнути «спагетті-коду»• Bad news: самої парадигми виявилось

недостатньо• Непідтримуваний код все ще можливий

Page 13: cpp-2013 #3 OOP Basics

ООП

• Набір об’єктів, що взаємодіють між собою (object graph)

• Об’єкти моделюють поняття з – Області задачі (problem domain)– Області реалізації (implementation domain)

Page 14: cpp-2013 #3 OOP Basics

Over-engineered HelloWorld• Приклад ООП стилю• Не приклад доцільності ООП• Взаємодіють між собою об’єкти• Класи описують об’єкти (дані та операції)• У об’єкта є 2 типи клієнтів:– Внутрішні (сам об’єкт)– Зовнішні – Плюс ще наслідування реалізації

• Об’єкти можуть мати явно виділений інтерфейс

Page 15: cpp-2013 #3 OOP Basics

Що видно з прикладу?

Абстракція– Всі класи

Інкапсуляція– Всі класи– SecureMessageWriter

Наслідування інтерфейсу– MessageWriter

Поліморфізм (subtype polymorphism)– Метод MessageWriter.write()

Page 16: cpp-2013 #3 OOP Basics

Абстракція

Ігнорування несуттєвих деталейщоб сфокусуватись на важливому на даний момент

Рівні абстракції (abstraction layers)низький високий

Абстракція даних data abstraction

Абстракція керування control abstraction

Page 17: cpp-2013 #3 OOP Basics

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

Page 18: cpp-2013 #3 OOP Basics

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

Захищається цілісність об’єкту: об’єкт неможливо перевести у невірний стан

Приховується реалізація об’єкту

Інформація доступна через методи

Об’єкт об’єднує дані та методи роботи з даними

Page 19: cpp-2013 #3 OOP Basics

Object-oriented word-wrap

• Приклад моделі задачі• Можливих моделей може бути кілька• Модель містить як сутності з області задачі,

так і сутності з області реалізації• Абстрагування від деталей реалізації

Page 20: cpp-2013 #3 OOP Basics

Синтаксичні конструкції

• сlass: описує структуру і поведінку об’єктів• Конструктор• Поля• Методи• Модифікатори доступу: public, private• Інтерфейс: virtual void method() = 0;• Наслідування інтерфейсу: class C : public I{}

Page 21: cpp-2013 #3 OOP Basics

• ООП є лише одним із інструментів• ООП не є оптимальним для всіх випадків• але:

краще недоцільна якісна реалізація, ніж доцільна неякісна

• Тому існують мультипарадигменні мови