стрілка вверх

обєктно орієнтовний малюнок

Об'єктно-орієнтовний стиль програмування
Знайомство з основами ООП

березень 2016

Тема дослідження статті

  1. Глосарій ООП
  2. Визначення ООП. В чому його "сіль"?
    • Місце ООП в світі програмування
    • Переваги та недоліки ООП
  3. Роз'яснення поняття ООП
    • Варіант Wiki
    • Інші розяснення
  4. Клас та об'єкт
    • ООП в контексті БД
  5. Заключення
  6. Список використаних лінків


1. Глосарій ООП

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

Об'єкт ООП - Окремий екземпляр класу.

Клас ООП - це спеціальна конструкція, яка використовується для групування пов'язаних змінних та функцій.

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

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

Конструктор - метод, що встановлює початковий стан об'єкта;

Деструктор - метод, що скидає стан об'єкта;

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

Успадкування - механізм утворення нових класів на основі використання вже існуючих.

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

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

Екземпляр Класу - він же об'єкт.

Батьківський клас (або суперклас, або базовий клас). Клас, визначення якого успадковані іншим класом.

Дочірній клас (або підклас, або похідний клас). Клас, який успадковує свої визначення від іншого класу.

UML - (англ. Unified Modeling Language) — уніфікована мова моделювання, використовується у парадигмі об'єктно-орієнтованого програмування. Є невід'ємною частиною уніфікованого процесу розробки програмного забезпечення.

клас та обєкт в обєктно-орієнтовному програмуванні

Рис.1. Короткий бріф програми Об'єктно-Орієнтованого Програмування.



2. Визначення ООП. В чому його "сіль"?

info label

Об'єктно-орієнтоване програмування (ООП) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. Основу ООП складають три основні концепції: інкапсуляція, успадкування та поліморфізм.

Одною з переваг ООП є краща модульність програмного забезпечення.

Сьогодні багато мов програмування або підтримують ООП (PHP, Lua) або ж є цілком об'єктно-орієнтованими (зокрема, Java, C#, C++, Python, Ruby та Objective-C, ActionScript 3, Swift, Vala).

Ресурс wikipedia.org


preloading articles

Рис.2. Особливості та нюанси об'єктно-орієнтовного програмування, складність матеріалу на перший погляд.

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

Об'єктно-орієнтовне програмування зв'язане з такими поняттями як: клас, об'єкт, метод, властивість, інкапсуляція, успадкування, поліморфізм, абстракція, конструктор, public, protected, private, та деякі інші поняття, - тому варто їх гарненько правильно розташувати у себе в мізках, щоб мати чітке уявлення про всю систему об'єктно-орієнтовного програмування :) .

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

ооп пазли

Рис.3. Усвідомлення нових термінів у визначенні ООП.

Місце ООП в світі програмування

Але перш ніж розбирати пазли ООП, гадаю, варто визначитись, де знаходиться поняття ООП в світі програмування.

- Чому воно виникло, в чому його необхідність, переваги, що сприяло тому, що воно взагалі виникло?

зростання функціональних можливостей парадигм програмування

Рис.4. Зростання функціональних можливостей парадигм програмування.

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

Користувач на власний розсуд може вибирати ту або іншу парадигму програмування з позицій зручності застосування для вирішення власних задач.

- Які є думки щодо переваг ООП?

Переваги:

- зменшення складності програмного забезпечення;

- підвищення надійності програмного забезпечення;

- можливість модифікації окремих компонентів програмного забезпечення без зміни інших його компонентів;

- забезпечення можливості повторного використання окремих компонентів програмного забезпечення;

- забезпечує кращу модульність програмного забезпечення.

Недоліки:

- Великі часові трудозатрати в початковій стадії розробки ООП продукту, необхідність початково спланувати роботи по розробці ООП продукту.

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

- Питання людських зусиль. Програмісти-новачки недолюблюють ООП через те, що необхідно докласти певних зусиль, щоб отримати мінімальний результат.


Як висновок, застосування програм ООП плану є зручним для написання великих програм, тут підтримується модульність частин програми, зручність оновлення, єдине перед створенням такого напрямку програм потрібно добряче спланувати роботу.



3. Роз'яснення поняття ООП

Переглянемо декілька роз'яснень об'єктно-орієнтовного програмування...

Варіант wiki

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

На думку Алана Кея, розробника мови Smalltalk, якого вважають одним з «батьків-засновників» ООП, об'єктно-орієнтований підхід полягає в наступному наборі основних принципів:

- Все є об'єктами.

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

- Кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів.

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

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

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

Таким чином, програма являє собою набір об'єктів, що мають стан та поведінку. Об'єкти взаємодіють використовуючи повідомлення. Будується ієрархія об'єктів: програма в цілому — це об'єкт, для виконання своїх функцій вона звертається до об'єктів що містяться у ньому, які у свою чергу виконують запит шляхом звернення до інших об'єктів програми. Звісно, щоб уникнути безкінечної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує запит у повідомлення до стандартних системних об'єктів, що даються мовою та середовищем програмування. Стійкість та керованість системи забезпечуються за рахунок чіткого розподілення відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного означення інтерфейсів міжоб'єктної взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції).



Деякий інший варіант роз'яснення ООП.

Ми живемо у світі об'єктів. Стіл, автомобіль, ручка, класна дошка - все це об'єкти. Поряд з фізичними існують так само абстрактні об'єкти, типовими представниками яких є числа. Таким чином, об'єкт - це будь-яка фізична чи абстрактна сутність. Об'єкт - це загальнофілософське поняття, яке вивчалося філософами протягом тривалого часу.

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

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

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

Об'єкт - це екземпляр деякого класу об'єктів або просто класу. Так автомобіль Audi 6 є екземпляром класу автомобілів даної моделі, приймач Sony SW-7600G так само буде представником класу однойменних приймачів. Таким чином, клас - це абстрактне поняття. Ставлення класу і об'єкту приблизно таке ж, як платонівські ідеї та об'єкти реального світу. На UML - уніфікованій мові моделювання - клас відображається у вигляді прямокутника, розділеного на три частини. У першій міститься ім'я класу, в другій - атрибути, в третій - методи (рис. 5)

class description

Рис.5. Опис класу

Класи можуть бути пов'язані один з одним різними відносинами. Одним з основних таких відносин є ставлення клас - підклас, відомий в об'єктно-орієнтованому програмуванні як наслідування. Наприклад, клас автомобілів Audi 6 є підкласом легкових автомобілів, який в свою чергу входить у більший клас автомобілів, а останній є підкласом класу транспортних засобів, який крім автомобілів включає в себе літаки, кораблі поїзда і т. д. Прикладом подібних відносин, є системи класифікації в ботаніці та зоології. Ставленням, зворотним спадкоємству, є узагальнення або генералізація. Вона вказує, що якийсь клас, є більш загальним (узагальненим) класом іншого класу. Клас транспортних засобів, наприклад, є генералізацією класів автомобілів, літаків і кораблів.(рис.6).

наслідування в класах

Рис.6. Схематичне зображення наслідування в класах

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

За рис.6. клас B успадкує атрибути і методи класу A і, отже, буде мати атрибутами A, B, C і D і методами A, B, C і D, а клас C - атрибутами A, B, C, E, F і методами A, B і E.

Якщо розглядати php-скрипт, то успадковування властивостей та методів батьківського класу відбувається за використанням ключового слова extends.

Приклад скрипту:

<?php
class SimpleClass
{
    
// оголошення властивості
    
public $var 'дефолтне значення';

    
// оголошення методу
    
public function displayVar() {
        echo 
$this->var;
    }
}
class ExtendClass extends SimpleClass
{
    
// перевизначення методу
    
function displayVar()
    {
        echo 
"Успадковування\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

Результат виконання скрипту:


Успадковування
дефолтне значення



Деякий інший варіант роз'яснення ООП.

Двійковий код — це набір команд 0 (немає сигналу) та 1 (є сигнал), завдяки яким комп'ютер отримує завдання, здійснює обчислення й повертає результат. Але для людини, яка хоче скласти якусь програму, надзвичайно складно мислити двійковими кодами. На початку, коли програми були нескладними, це припускалося, але з їхнім ускладненням з'явилася потреба в узагальненні та об'єднанні двійкових кодів у команди, які інтуїтивно були б зрозумілими та простими у використанні. Тому двійкові коди почали замінювати на слова, вислови та десяткові (вісімкові, шістнадцяткові) числа, а саме спілкування із комп'ютером, який і надалі працює за допомогою двійкових сигналів, здійснювалося й здійснюється за допомогою "перекладачів" — компіляторів. Певний набір висловів та чисел перероблявся компілятором у двійкову послідовність складних команд для комп'ютера.

Але із ускладненням програм і цього було замало. Програмний код почали об'єднувати в структури, які були складними задачами, що внутрішньо складалися із декількох простіших задач. Це допомагало зробити код зрозумілішим і розбити його на логічні одиниці. Однією із таких є мова C. Такі мови програмування ще називають структурними.

Але із часом програми ставали ще складнішими й містили величезну кількість стрічок коду. Щоб ще більше впорядкувати програмні коди, спростити перебіг програмування, потрібні були нові засоби. Тому почали створюватись нові засоби програмування, які стали основою об'єктно-орієнтованих мов, таких як С++, Java, С#, PHP, Swift.

Об'єктно-орієнтовані мови складаються із об'єктів — одиниць програмування, які вміщують у собі певну кількість даних та способи їх взаємодії між собою. Крім того, що об'єкти є міні-програмками, вони можуть взаємодіяти із іншими такими ж об'єктами. Завдяки цьому вдалося значно спростити перебіг програмування — замість сотень стрічок коду, програміст може оперувати лише кількома об'єктами. Щоб створити об'єкт, спочатку створюють його “сутність” — клас, який являє собою образ даних та їх взаємодії за допомогою яких об'єкт “втілюється”.



4. Клас та об'єкт в ООП

За офіційним ресурсом PHP Classes and Objects.

клас та обєкт в обєктно-орієнтовному програмуванні

Рис. 7. Об'єкт - центральний елемент ООП.

Визначення класу йде за ключевим словом class, в фігурних дужках йде визначення властивостей та методів, що належать до цього класу.

class SimpleClass
{
   
//оголошення властивості
    //оголошення методу
}

Клас може складатись із власних констант та змінних (називаються "властивість"), та функцій (називаються "метод").

Синтаксис визначення класу:

<?php
class SimpleClass
{
    
// оголошення властивості
    
public $var 'a default value';

    
// оголошення методу
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

Об'єкт програми визначається ключевим словом new, до об'єкту можна застосовувати методи вказаного класу та надавати значення властивостей вказаного класу.

<?php
$instance 
= new SimpleClass();

// Визначити клас можна й так:
$className 'SimpleClass';
$instance = new $className(); // new SimpleClass()
?>

Доступ до методів та властивостей відбувається застосуванням оператору ->

Щоб переглянути, що має обєкт, використовується var_dump():

var_dump($instance);

ООП в контексті БД

Як приклад, деякий запис частини php-скрипту ООП має вигляд:

<?php
// Зєднуємось та вибираємо БД  a MySQL , що має назвуnamed sakila
// Hostname: 127.0.0.1, username: your_user, password: your_pass, db: sakila
$Some_Object = new mysqli('127.0.0.1''your_user''your_pass''sakila');
$Some_Object
->real_query("SELECT id FROM test ORDER BY id ASC");
$result $Some_Object->use_result();

echo 
"Дані результуючої вибірки ...\n";
while (
$row $result->fetch_assoc()) {
    echo 
" id = " $row['id'] . "\n";
};
/* Очищуємо результуючу вибірку даних */ $result->free_result(); /*закриваємо зєднання із сервером БД*/ $Some_Object->close();
?>

Ця частинка php-скрипту використовує:
клас - mysqli та mysqli_result
об'єкт - $Some_Object,
метод класу - real_query(), use_result(), fetch_assoc().

Наприклад, в окремій вкладці браузера можна переглянути клас mysqli офіційного php.net

Об'єкт є окремою одиницею сховища даних під час роботи програм.



Думаю зрозуміло, що в програмі ми оперуємо обєктами, обєкт (методи та властивості) вміє те, що прописано в його класі.

Наприклад, давайте переглянемо деякі можливості класу mysqli:

Властивості:

$Some_Object->affected_rows; - повертає кількість задіяних рядків в SQL-запиті до таблиці Бази Даних.

$Some_Object->connect_errno; - повертає код помилки з'єднання з таблицею БД.

$Some_Object->field_count; - повертає кількість колонок таблиці БД.

Методи:

$Some_Object->character_set_name(); - метод, що вказує тип кодування з'єднання з БД.



5. Висновок

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



Об'єм вивчення матеріалу досить великий, тому продовження тематики ООП за лінком Класи ООП.



P.S. Що Вони хотіли сказати? :)

Поняттю "об'єкт" зіставляють ряд доповнюючих один одного визначень:

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

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

- це відчутна реальність, що характеризується чітко визначеною поведінкою;

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

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

Абстрагування.
Спрощення складної дійсності шляхом моделювання класів, що відповідають проблемі, та використання найприйнятнішого рівня деталізації окремих аспектів проблеми.



6. Використані лінки