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

21 0 Новини високих технологій

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

Що таке ООП

Виникло як результат розвитку процедурного програмування. Основою об'єктно-орієнтованих мов є такі принципи, як:
  • інкапсуляція;
  • спадкування;
  • поліморфізм.
  • Деякі принципи, які були спочатку закладені в перші ООЯ, зазнали істотної зміни.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    Приклади об'єктно-орієнтованих мов:
  • Pascal. З виходом Delphi 7 на офіційному рівні став називатися Delphi. Основна область використання Object Pascal - написання прикладного ПО.
  • C++ широко використовується для розробки програмного забезпечення, що є одним з найбільш популярних мов. Застосовується для створення ОС, прикладних програм, драйверів пристроїв, додатків, серверів, ігор.
  • Java транслюються в байт-код, обробляється віртуальною машиною Java. Перевагою такого способу виконання є незалежність від операційної системи та обладнання. Існуючі сімейства: Standard Edition, Enterprise Edition, Micro Edition, Card.
  • javascript застосовується в якості мови сценаріїв для web-сторінок. Синтаксис багато в чому нагадує Сі та Java. Є реалізацією Ecmascript. Сам Ecmascript використовується в якості основи для побудови інших скриптових мов, таких як JScript, ActionScript.
  • Objective-C побудований на основі мови Сі, а сам код Сі зрозумілий компілятору Objective-C.
  • Perl - високорівневий інтерпретується в microsoft динамічний мова загального призначення. Має багаті можливості для роботи з текстом, спочатку розроблений саме для маніпуляцій з текстом. Зараз використовується в системному адмініструванні, розробці мережевому програмуванні, біоінформатики і т. д.
  • PHP. Абревіатура перекладається як препроцесор гіпертексту. Застосовується для розробки веб-додатків, зокрема серверної частини. З його допомогою можна створювати gui-додатків за допомогою пакетів PHP-GTK, PHP-Qt, WinBinder.
  • Python - мова загального призначення, орієнтований на підвищення продуктивності розробника і читаність коду. Був розроблений проект Cython, з допомогою якого здійснюється трансляція програм, написаних на Python в код на мові Сі.
  • Абстракція

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


    Абстрактний тип даних представляється як інтерфейс або структура. Дозволяє не замислюватися над рівнем деталізації реалізації. АТД не залежить від інших ділянок коду. Відомий афоризм Девіда Уїлера свідчить: Всі проблеми в інформатиці можна вирішити на іншому рівні абстракції.

    Спадкування

    Об'єктно-орієнтовані мови є успадкованими - це один з найважливіших принципів.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    Означає, що функціональність деякого типу може бути повторно використана. Клас, який успадковує властивості іншого, називається похідним, нащадком або підкласом. Той, від якого відбувається спадкування, називається предком, базовим або суперкласом. Зв'язок нащадок-спадкоємець породжує особливу ієрархію. Існує кілька типів успадкування:
  • просте;
  • множина.
  • При множинному успадкуванні може бути кілька дітей від одного предка, коли при простому - тільки один. Це є основною відмінністю між типами. Спадкування виглядає так: class Animal { function draw() { return "just animal"; } function eat() { return the animal is eating"; } } class Cow extends Animal { function draw() { Return "something that looks like a cow"; } } Бачимо, що class Cow успадкував всі методи від class Animal. Тепер, якщо виконати Cow.eat(), отримуємо "the animal is eating", відповідно, метод draw() змінено. Cow.draw() поверне "something that looks like a cow", а Animal.draw() поверне "just animal".


    Інкапсуляція

    Інкапсуляція обмежує доступ до інших компонентів, пов'язує дані з методами для обробки. Для пакування використовується спецификатор доступу private.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    Зазвичай поняття інкапсуляція і приховування ототожнюються, але деякі мови розрізняють ці поняття. Іншими словами, критичні для роботи властивості захищаються, а їх зміна стає неможливим. class Animal { private $name; function __construct($name) { $this->name = $name; } function getName() { return $this->name; } } Name приймається в якості аргументів конструктора. Коли конструктор буде використаний в інших частинах коду, ніщо не зможе змінити елемент name. Як бачимо, він вказується всередині, для інших частин коду він недоступний.

    Поліморфізм

    Поліморфізм дозволяє використовувати один і ім'я для вирішення схожих, але технічно різних завдань.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    У прикладі вище знаходиться таблиця. Ми бачимо class CardDesk і class GraphicalObject. У обох є функція під назвою draw(). Вона виконує різні дії, хоча має одне ім'я. Ad hoc поліморфізм або спеціальний поліморфізм використовує:
  • перевантаження функцій, методів;
  • приведення типів.
  • Перевантаження передбачає використання кількох функцій з одним ім'ям, коли вибір відповідних відбувається на етапі компіляції. Приведення типів означає перетворення значення одного типу значення іншого типу. Існує явне перетворення - застосовується функція, яка приймає один тип, а повертає іншій, неявне - виконується компілятором або інтерпретатором.
    «Один інтерфейс — багато реалізацій» Бьерн Страуструп.

    Клас

    Клас - це такий тип даних, який складається з єдиного набору полів і методів.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    Має внутрішні і зовнішні інтерфейси для управління вмістом. При копіюванні через присвоювання копіюється інтерфейс, але не дані. Різні види взаємодіють між собою за допомогою:
  • спадкування;
  • асоціації;
  • агрегації.
  • При спадкуванні дочірній клас успадковує всі властивості батька, асоціація має на увазі взаємодію об'єктів. Коли об'єкт одного класу входить в інший, це називається агрегацією. Але коли вони ще залежать один від одного за часом життя, - це композиція. Однією з головних характеристик є область видимості. Поняття по-різному визначається різними МП. У Object Pascal описується наступним чином: ClassName = class(SuperClass) private {використання елементів обмежується тільки межами модуля} {тут вказуються поля} strict private {спецификатор доступу став доступним з виходом Delphi 2007 позначає те ж, що і private} protected {елементи можуть використовуватися всередині ClassName або при спадкуванні} public {} published {елементи доступні всім, вони відображаються в Object Inspector'e} end; Тут SuperClass - предок, від якого відбувається спадкування. Для C++ створення виглядає так: class MyClass: public Parent { public: MyClass(); //конструктор ~MyClass(); //деструктор protected: private: }; У цьому прикладі Parent є предком, якщо такий є. Специфікатори private, public, protected позначають те ж саме, що і в попередньому прикладі на Паскалі. Також ми бачимо конструктор, деструктор, доступні для будь-якої частини програми. У C++ всі елементи за замовчуванням є private, відповідно, це можна не вказувати.

    Особливості реалізації

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

    ООП-методології

    Існують такі методології:
  • Компонентно-орієнтоване програмування;
  • Прототипних програмування;
  • Классоориентированное програмування.
  • Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    Компонентно-орієнтоване програмування спирається на поняття компонента - такого складового програми, яке призначене для повторного використання. Реалізується як безліч конструкцій з загальним ознакою, правилами, обмеженнями. Підхід використовується в об'єктно-орієнтованій мові Java, де компонентна орієнтація реалізується за допомогою "JavaBeans", написаних за одними правилами.
    У прототипном програмуванні немає поняття класу - спадкування здійснюється за рахунок клонування існуючого прототипу. Це основа об'єктно-орієнтованих мов javascript та інших діалектів ecmascript, а також lua або lo. Головні особливості:
  • нащадки не повинні зберігати структурний подібність прототипу (щодо клас - примірник це відбувається саме так);
  • при копіюванні прототипу всі методи успадковуються один в один.
  • Классоориентированное програмування фокусується на понятті клас і примірник. Клас визначає загальну структуру, поведінку для примірників, які їх переймають.

    Об'єктно-орієнтовані мови

    Всі ООЯ повністю відповідають принципам ООП - елементи являють собою об'єкти, у яких є властивості. При цьому, можуть бути додаткові кошти.
    Об'єктно-орієнтовані мови. Основи об'єктно-орієнтованого програмування
    ООЯ обов'язково містить набір таких елементів:
  • оголошення класів з полями, методами;
  • розширення за рахунок успадкування функцій;
  • поліморфний поведінку.
  • Крім перерахованого вище списку, можуть бути додані додаткові кошти:
  • конструктор, деструктор, финализаторы;
  • властивості;
  • індексатори;
  • модифікатори доступу.
  • Деякі ООЯ відповідають всім основним елементам, інші - частково. Треті є гібридними, тобто поєднуються з підсистемами інших парадигм. Як правило, принципи ООП можуть застосовуватися для необъектно-орієнтованої мови теж. Однак застосування ООЯ ще не робить код об'єктно-орієнтованим. ЯП підтримують більше, ніж одну парадигму. Наприклад, PHP або javascript підтримують функціональне, процедурне, об'єктно-орієнтоване програмування. Java працює з п'ятьма парадигмами: об'єктно-орієнтованої, узагальненої, процедурної, аспектно-орієнтованого, конкурентної. C# вважається одним з найбільш успішних прикладів мультипарадигмальности. Він підтримує ті ж підходи, що Java, до цього списку додається ще рефлексивна парадигма. Такий МП, як Oz, розроблений для того, щоб об'єднати всі поняття, традиційно пов'язані з різними програмними парадигмами.