Введення в об'єктно-орієнтоване програмування
З введенням поняття «об'єкт» розробники отримали можливість описувати структуру програмних систем, використовуючи терміни «реального світу», і підтримувати системи з мільйонами рядків коду, що було неможливо при використанні процедурної парадигми. Процедурне програмування не могло забезпечити належний рівень розвитку та підтримки складних програмних систем у банківській, телекомунікаційній та інших сферах діяльності, де вимоги до програм постійно ускладнювалися. Стиль (парадигма) програмування, в основі якого лежить поняття класу і об'єкту, розроблявся як розвиток процедурної парадигми, яка перестала бути ефективною у міру розвитку складності програмних проектів, і отримав назву «об'єктно-орієнтоване програмування» (ООП).
Історія розвитку
Вперше об'єктно-орієнтоване програмування початок застосовуватися в мові Simula 67, який справив великий вплив на розвиток таких мов, як Lisp і Smalltalk. Але найбільший розвиток ООП отримав в середині 90-х, коли був створений «класик ООП» C ++, роботу якого з об'єктами перейняли популярні середовища програмування Delphi і VisualFoxPro. ООП продовжує розвиватися, і серед нових парадигм можна виділити аспектно-орієнтовану і суб'єктно-орієнтовану парадигму. Кожен об'єктно-орієнтована мова розширює базові поняття ООП унікальними доповненнями і розширеннями, залежно від специфіки використання. У цій статті ми розглянемо реалізацію ООП в середовищі програмування Delphi і мовою веб-розробки PHP.
Основні концепції ООП
Парадигма ООП складається з трьох основних концепцій: інкапсуляція, поліморфізм і успадкування.
Інкапсуляція (encapsulation)
Механізм об'єднання коду і даних всередині об'єкта, а також їх захисту від зовнішніх змін. Усередині об'єкту дані і код можуть бути відкритими (public) для доступу і модифікації іншими об'єктами і закритими (private) для зовнішніх змін.
Поліморфізм (polymorphism)
Найважливіший елемент концепції ООП, що дозволяє використовувати єдине найменування для функцій, що виконують схожі дії. Спочатку зрозуміти сенс поліморфізму складно, тому наведемо простий приклад. У будь-якій мові програмування для кожного типу чисел, наприклад, в «класичному» C для знаходження модуля числа нам потрібно використовувати для цілих чисел функцію abs (), для довгих цілих labs (), для чисел з плаваючою точкою fabs (). Це призводить до необхідності пам'ятати синтаксис безлічі функцій і додаткового навантаження на пам'ять і процесор комп'ютера. Об'єктно-орієнтоване програмування, використовуючи механізм поліморфізму, дозволяє написати свою функцію визначення модуля modul () і використовувати її в арифметичних обчисленнях, не замислюючись про тип чисел. Просто пишемо у вираженні modul () і отримуємо правильну відповідь. Плюс скорочення коду програми і навантаження системи. Ще один приклад поліморфізму представлений на малюнку - загальний клас «Крива» (Shape) є «батьком» для кола, прямокутника і зірки.
Спадкування (inheritance)
Механізм ООП, що дозволяє об'єкту мати (успадковувати) методи іншого об'єкта. Точніше, об'єкт отримує (успадковує) всі основні властивості свого «предка» і додає до них методи, властиві тільки йому. «Спадкоємець» об'єкта отримає в «спадок» методи вже двох об'єктів і т. Д. Спадкування ще називають ієрархією класів. Використання успадкування дозволяє просто управляти великими обсягами інформації та програмного коду. Далі ви можете побачити, як об'єкти успадковують загальні властивості від батьківського класу «Автомобіль».
Основні елементи класів і об'єктів в ООП
Всі мови, що підтримують об'єктно-орієнтоване програмування, мають однакову трактування поняття класу і об'єкту. Клас - тип даних для опису властивостей і роботи «реального» об'єкта, такого як банківський рахунок. Об'єкт - окремий екземпляр класу. Метод - програмний код, що змінює поведінку об'єкта або його стан в залежності від значення його властивостей. Модифікатор доступу - метод, що розділяє елементи класу на відкриті і закриті поля. Конструктор - метод, що виконується першим після ініціалізації об'єкту і приводить його в початковий стан. Деструкція - метод, що викликається при видаленні об'єкта. На схемі показано взаємодію елементів класу.
Реалізація ООП в Delphi
В основі середовища розробки лежить підмножина мови Pascal з елементами ООП - Object Pascal. Середа і мова Delphi були першою графічної середовищем розробки програм для MS Windows. Об'єктно-орієнтоване програмування delphi є набір стандартних абстрактних класів, інкапсулюючих в собі певні елементи Windows-програми, такі як графічний інтерфейс, робота з оперативною пам'яттю і т. д. Delphi справив значний вплив на розвиток усіх об'єктно-орієнтованих мов, особливо на мову C # для середовища розробки .NET компанії Microsoft. Остання версія Delphi 8 працює тільки з .NET.
Ієрархія стандартних класів Delphi
TObject - «батько» всіх класів Delphi. Клас забезпечує всіх своїх «нащадків» підтримкою функцій об'єктно-орієнтованого програмування, і його конструктор забезпечує запуск і коректну роботу програми в Windows. TPersistent - забезпечує об'єктам взаємодія на рівні потоків передачі даних. Він передає потоки даних і забезпечує доступ до Інспектора об'єктів. TComponent - дозволяє створювати будь невізуальні об'єкти і забезпечує їх взаємодію з усією середовищем розробки. Саме він дає можливість роботи з об'єктами і компонентами програми у візуальному середовищі розробки. Його нащадок TGraphicControl створює різні неоконів елементи інтерфейсу, наприклад, графічні фони і т. Д. TControl - все об'єкти, які відображаються на екрані (вікна, списки, кнопки, форми т. Д.) Є його нащадками. Інкапсулює в собі роботу з функціями графічного інтерфейсу Windows. TWinControl - забезпечує роботу з вікнами програми. Його нащадок TCustomControl дає можливість створювати такі елементи управління, як текстові редактори, списки вибору.
Реалізація ООП в PHP
PHP є одним з найпопулярніших мов для веб-розробки і спочатку представляв собою повністю процедурний мову програмування. Тому об'єктно-орієнтоване програмування на php з'явилося пізніше, починаючи з четвертої версії. Необхідність підтримувати обидва стилю програмування - процедурний і об'єктно-орієнтована - призвела до того, що елементи ООП досі є доповненням, а не основою мови. Але ситуація стрімко змінюється в бік об'єктного PHP. Версія PHP 5 повністю підтримує всі елементи ООП, і розробник має повну свободу у створенні власних класів та об'єктів, на відміну від Delhi, де розробник так чи інакше повинен використовувати стандартні класи з усіма їх можливими недоліками. Синтаксис об'єктних елементів PHP не представляє складності програмістам, раніше працюючим на C ++ / # і Delphi.
Розвиток ООП
Об'єктно-орієнтована парадигма програмування продовжує розвиватися і використовується в багатьох елементах програмних систем, наприклад, в спеціалізованих базах даних, що підтримують об'єктну модель даних, і при розробці додатків для планшетів і мобільних телефонів. Серед нових об'єктних мов можна виділити Python, що широко використовується для розробки інтернет-систем, і Go- багатофункціональний мова програмування від компанії Google.