Що таке ООП (обʼєктно-орієнтоване програмування)?
ООП — підхід до розробки, за якого програма будується з обʼєктів: кожен обʼєкт зберігає свої дані та вміє виконувати дії над ними. Клас описує, як влаштований обʼєкт, а обʼєкт — це конкретний екземпляр, створений за цим описом.
У підходу чотири опорні принципи. Інкапсуляція ховає внутрішню будову й відкриває назовні лише безпечні операції. Успадкування дозволяє будувати новий клас на основі наявного. Поліморфізм дає різним класам відповідати на той самий виклик по-своєму. Абстракція залишає в інтерфейсі лише те, що важливо ззовні.
Сенс усього цього — керованість. У великій системі зміни мають зачіпати обмежену ділянку коду, а не розходитися хвилею по всьому проєкту. ООП — базова модель у Java, C# і Python, тому питання про нього звучать майже на кожній співбесіді.
Де застосовується
Обʼєктна модель лежить в основі майже всіх корпоративних технологій: Spring у Java, ASP.NET Core у C#, Django у Python. Працюючи з будь-яким із цих фреймворків, ви постійно створюєте класи — контролери, сервіси, сутності бази даних — і успадковуєте поведінку від базових.
Той самий підхід трапляється і за межами бекенду: сторінка в автоматизації тестування описується класом Page Object, елемент інтерфейсу у фронтенді — компонентом зі своїм станом. Тому питання про інкапсуляцію, успадкування і поліморфізм звучать майже на кожній технічній співбесіді.
Приклад
У системі є звичайні, корпоративні та преміум-клієнти. Знижка в кожного рахується по-своєму, але решта коду викликає один і той самий метод розрахунку. Додавання четвертого типу клієнта не потребує правити місця, де ця знижка застосовується.
public class Customer {
protected String name;
public BigDecimal discount(BigDecimal total) {
return BigDecimal.ZERO;
}
}
public class PremiumCustomer extends Customer {
@Override
public BigDecimal discount(BigDecimal total) {
return total.multiply(new BigDecimal("0.15"));
}
} Часті запитання
Чим клас відрізняється від обʼєкта?
Клас — це опис: які поля й методи будуть в обʼєктів цього виду. Обʼєкт — конкретний екземпляр, створений за описом, зі своїми значеннями полів. Клас один, обʼєктів за ним може бути скільки завгодно, і кожен живе своїм життям.
Що таке інкапсуляція простими словами?
Приховування внутрішньої будови: поля закриті, а ззовні доступні лише безпечні операції. Завдяки цьому не можна випадково виставити відʼємний баланс чи зіпсувати стан обʼєкта в обхід правил — зміни проходять через методи, які перевіряють коректність.
Чи потрібне ООП, якщо писати на Python або JavaScript?
Так, хоча обидві мови допускають і інші стилі. Класи використовуються в популярних бібліотеках і фреймворках, їх доведеться читати в чужому коді. Крім того, розуміння обʼєктної моделі допомагає структурувати власний проєкт, коли він переростає пару файлів.
Чи завжди успадкування — хороше рішення?
Ні. Глибокі ланцюжки успадкування роблять код заплутаним: зміна в базовому класі несподівано ламає нащадків. Сучасна практика частіше радить композицію — збирати поведінку з окремих обʼєктів, а успадкування використовувати там, де звʼязок справді означає «є різновидом».