Перейти до основного вмісту

Об'єктно-орієнтоване програмування

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

procedural code

Розглянемо приклад процедурного коду, в якому є змінні і функція для підрахунку результату.

const baseSalary = 30000;
const overtime = 10;
const rate = 20;

const getWage = (baseSalary, overtime, rate) => {
return baseSalary + overtime * rate;
};

getWage(baseSalary, overtime, rate);

Об'єктно-орієнтоване програмування (ООП) - методологія, яка описує програму як сукупність об'єктів, кожен з яких містить дані (властивості) і методи для взаємодії з ними.

object-oriented code

Використовуємо ООП, зібравши дані в об'єкт employee.

const employee = {
baseSalary: 30000,
overtime: 10,
rate: 20,
getWage() {
return this.baseSalary + this.overtime * this.rate;
},
};

employee.getWage();

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

Цікаво

З ідеологічної точки зору, ООП - це підхід до програмування як до моделювання, що вирішує основне завдання - структурування інформації з точки зору керованості, що суттєво покращує контроль процесу моделювання.

Сутності ООП

Уявіть собі, що ми проектуємо автомобіль. У нього буде двигун, чотири колеса, бензобак тощо. Автомобіль повинен мати можливість заводитися, збільшувати і зменшувати швидкість. Ми знаємо як взаємодіє двигун і колеса, тобто за якими законами взаємодіють різні частини машини.

Клас

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

Клас - спосіб опису сутності, що визначає стан і поведінку, яка залежить від цього стану, а також правила для взаємодії з цією сутністю (контракт).

У нашому випадку, клас визначає сутність - автомобіль. Властивостями класу будуть двигун, колеса, фари тощо. Методами класу будуть дії: відкрити двері, завести двигун, збільшити швидкість тощо.

Екземпляр

Ми спроектували креслення, та автомобілі, розроблені на підставі них, сходять з конвеєру. Кожен з них точно повторює креслення, усі системи взаємодіють саме так, як ми спроектували, але кожний автомобіль - унікальний. Вони всі мають номер кузова і двигуна, але всі номери різні, автомобілі розрізняються за кольором, оздобленням салону. Ці автомобілі - це екземпляри класу.

Екземпляр (об'єкт) - це окремий представник класу, який має конкретний стан і поведінку, що повністю визначається класом. Це те, що створено за кресленням, тобто на підставі опису з класу.

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

Інтерфейс

Коли ми підходимо до автомата з кавою або сідаємо за кермо автомобіля, існує певний набір елементів управління, з якими ми можемо взаємодіяти.

Інтерфейс - це набір властивостей і методів класу, доступних для використання у роботі з екземпляром.

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

Описуючи інтерфейс класу, дуже важливо витримати баланс між гнучкістю і простотою. Клас з простим інтерфейсом буде легко використовувати, але будуть існувати завдання, які, за допомогою нього, буде складно вирішити.

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