— Привіт, Аміго! Сьогодні я відкрию для тебе новий та цікавий світ. Цей світ називається ООП – об'єктно-орієнтоване програмування. Ти вже познайомився з класами та об'єктами. Сьогодні ти дізнаєшся про них більше, набагато більше.

Почнемо з чотирьох принципів ООП. Це: абстракція, інкапсуляція, успадкування та поліморфізм. Раніше їх було три, але потім вирішили додати абстракцію.

1) Абстракція.

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

Уяви, що ти проєктуєш структуру своєї майбутньої компанії. Ти можеш розділити обов'язки секретаря: «розкидати» їх на кілька інших посад. Можеш розбити посаду виконавчого директора на кілька незалежних посад: фінансовий директор, технічний директор, директор з маркетингу, директор з персоналу. Або, наприклад, об'єднати посади офіс-менеджера та рекрутера в одну.

Ти вигадуєш назви посад у своїй фірмі, а потім «розкидаєш» обов'язки з цих посад. Це і є абстракція розбиття чогось великого, монолітного на безліч дрібних складових частин.

ООП — основні принципи - 1

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

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

Абстракція – це як стратегія у військовій справі. Якщо стратегія погана, жодною геніальною тактикою ситуацію не виправити.

2) Інкапсуляція.

Мета інкапсуляції – покращити якість взаємодії речей завдяки їх спрощенню.

А найкращий спосіб спростити щось – приховати все складне від сторонніх очей. Наприклад, якщо тебе посадять у кабіну Боїнга, ти не одразу розберешся, як ним керувати:

ООП — основні принципи - 3

З іншого боку, для пасажирів літака все виглядає простіше: купив квиток, сів у літак, злетів та приземлився. Ти можеш легко перелетіти з континенту на континент лише з навичками «купити квиток» і «сісти на літак». Усі складнощі типу підготовки літака до польоту, зльоту, посадки та різних позаштатних ситуацій приховані від нас. Не кажучи вже про супутникову навігацію, автопілот і диспетчерські центри в аеропортах. І це спрощує життя.

З точки зору програмування, інкапсуляція – це «приховування реалізації». Мені подобається таке визначення. Наш клас може містити сотні методів та реалізовувати дуже складну поведінку у різних ситуаціях. Але ми можемо приховати від сторонніх очей усі його методи (позначити модифікатором private), а для взаємодії з іншими класами залишити декілька методів (позначити їх модифікатором public). Тоді всі інші класи нашої програми бачитимуть у цьому класі лише три методи, і викликатимуть саме їх. А всі складнощі будуть приховані всередині класу, як кабіна пілотів від щасливих пасажирів.

3) Успадкування.

В успадкування є дві сторони. Сторона програмування та сторона реального життя. З точки зору програмування, успадкування – це спеціальні стосунки між двома класами. Але набагато цікавіше, що ж це таке успадкування з точки зору реального життя.

Якщо б нам знадобилося щось створити у реальному житті, ми маємо два рішення:

1) створити потрібну нам річ із нуля, витратити купу часу та сил.

2) створити потрібну нам річ на основі тої, що вже існує.

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

Якщо ми простежимо історію виникнення людини, виявиться, що з моменту зародження життя на планеті пройшли мільярди років. Людина пішла від мавпи (на основі мавпи), і з того часу минуло лише кілька мільйонів років. Створення з нуля – довше. Набагато довше.

У програмуванні також є можливість створювати один клас на основі іншого. Новий клас стає нащадком (спадкоємцем) вже існуючого. Це дуже вигідно, коли є клас, який містить 80-90% потрібних нам даних і методів. Ми просто оголошуємо відповідний батьківський клас нашого нового класу, і тоді в новому класі автоматично з'являються всі дані та методи класу-батька. Зручно, правда?

4) Поліморфізм.

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

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

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

ООП – це принципи. Внутрішні закони. Кожен із них у чомусь нас обмежує, але натомість дає великі переваги, коли програма зростає до величезних розмірів. Чотири принципи ООП – це як чотири ніжки стільця. Забери бодай одну, і вся система стане нестійкою.