Об'єктно-орієнтоване програмування
Процедурне програмування - набір не пов'язаних явно функцій і змінних для зберігання і обробки інформації. Цей підхід - простий і прямолінійний, і може використовуватись для задач, в яких немає тісно пов'язаних сутностей (даних і функцій для їх обробки).
Розглянемо приклад процедурного коду, в якому є змінні і функція для підрахунку результату.
const baseSalary = 30000;
const overtime = 10;
const rate = 20;
const getWage = (baseSalary, overtime, rate) => {
return baseSalary + overtime * rate;
};
getWage(baseSalary, overtime, rate);
Об'єктно-орієнтоване програмування (ООП) - методологія, яка описує програму як сукупність об'єктів, кожен з яких містить дані (властивості) і методи для взаємодії з ними.
Використовуємо ООП, зібравши дані в об'єкт employee
.
const employee = {
baseSalary: 30000,
overtime: 10,
rate: 20,
getWage() {
return this.baseSalary + this.overtime * this.rate;
},
};
employee.getWage();
За такого підходу у методі відсутні параметри, використовуються властивості об'єкта, які задаються на момент створення об'єкта і можуть так само змінюватися іншими методами. На виході отримуємо сутність з простим інтерфейсом, що зменшує складність програми.
З ідеологічної точки зору, ООП - це підхід до програмування як до моделювання, що вирішує основне завдання - структурування інформації з точки зору керованості, що суттєво покращує контроль процесу моделювання.
Сутності ООП
Уявіть собі, що ми проектуємо автомобіль. У нього буде двигун, чотири колеса, бензобак тощо. Автомобіль повинен мати можливість заводитися, збільшувати і зменшувати швидкість. Ми знаємо як взаємодіє двигун і колеса, тобто за якими законами взаємодіють різні частини машини.
Клас
Ми описуємо всі запчастини, з яких складається автомобіль, тоді яким чином ці запчастини взаємодіють між собою і що повинен зробити водій, щоб автомобіль загальмував, увімкнулися фари тощо. Результатом нашої роботи буде певний ескіз (шаблон, схема). Ми тільки що розробили те, що в ООП називається класом.
Клас - спосіб опису сутності, що визначає стан і поведінку, яка залежить від цього стану, а також правила для взаємодії з цією сутністю (контракт).
У нашому випадку, клас визначає сутність - автомобіль. Властивостями класу будуть двигун, колеса, фари тощо. Методами класу будуть дії: відкрити двері, завести двигун, збільшити швидкість тощо.
Екземпляр
Ми спроектували креслення, та автомобілі, розроблені на підставі них, сходять з конвеєру. Кожен з них точно повторює креслення, усі системи взаємодіють саме так, як ми спроектували, але кожний автомобіль - унікальний. Вони всі мають номер кузова і двигуна, але всі номери різні, автомобілі розрізняються за кольором, оздобленням салону. Ці автомобілі - це екземпляри класу.
Екземпляр (об'єкт) - це окремий представник класу, який має конкретний стан і поведінку, що повністю визначається класом. Це те, що створено за кресленням, тобто на підставі опису з класу.
Простіше кажучи, об'єкт має конкретні значення властивостей і методи, що працюють з цими властивостями на основі правил, заданих в класі. У цьому прикладі, якщо клас - це якийсь абстрактний автомобіль на кресленні, то об'єкт - це конкретний автомобіль, що стоїть у нас під вікнами.
Інтерфейс
Коли ми підходимо до автомата з кавою або сідаємо за кермо автомобіля, існує певний набір елементів управління, з якими ми можемо взаємодіяти.
Інтерфейс - це набір властивостей і методів класу, доступних для використання у роботі з екземпляром.
По суті, інтерфейс описує клас, чітко визначаючи усі можливі дії над ним. Хороший приклад інтерфейсу - панель приладів автомобіля, яка дозволяє викликати методи як-от збільшення швидкості, гальмування, повертання, перемикання передач, увімкнення фар тощо.
Описуючи інтерфейс класу, дуже важливо витримати баланс між гнучкістю і простотою. Клас з простим інтерфейсом буде легко використовувати, але будуть існувати завдання, які, за допомогою нього, буде складно вирішити.
Якщо інтерфейс буде гнучким, то, найімовірніше, він буде містити досить складні методи з великою кількістю параметрів, які будуть дозволяти робити дуже багато, але його використання буде пов'язане з великими труднощами і ризиком помилитися, переплутавши щось.