Обектно-ориентирани езици. Основи на обектно-ориентираното програмиране

Обектно-ориентираното програмиране се основава на представянето на програмата под формата на набор от обекти. Всеки обект принадлежи на клас, който от своя страна заема своето място в наследената йерархия. Използването на ООП намалява излишните данни, което подобрява управляемостта, разбирането на програмата.

Какво е ООП

Възникна като резултат от разработването на процедурно програмиране. Основата на обектно-ориентираните езици са следните принципи, като:
  • капсулиране;
  • наследяване;
  • полиморфизъм.
  • Някои принципи, които първоначално бяха установени в първите ООП, претърпяха съществена промяна.
    Примери на обектно-ориентирани езици:
  • Pascal. С пускането на Delphi 7 на официалното ниво започнаха да се наричат ​​Delphi. Основната област на използване на Object Pascal е писането на приложен софтуер.
  • C ++ се използва широко за разработване на софтуер, който е един от най-популярните езици. Отнася се за създаването на операционни системи, приложения, драйвери на устройства, приложения, сървъри, игри.
  • Java се предава в байт-код, обработван от Java виртуалната машина. Предимството на този метод на изпълнение е независимостта на операционната система и оборудването. Съществуващи семейства: Standard Edition, Enterprise Edition, Micro Edition, Card.
  • javascript се използва като скриптов език за уеб страници. Синтаксисът до голяма степен напомня на C и Java. Е реализация на Ecmascript. Самият Ecmascript се използва като основа за изграждането на други скриптови езици, като JScript, ActionScript.
  • Обектив-Cбазиран на езика на C, а самият C код е ясен за компилатора Objective-C.
  • Perl - високото ниво се интерпретира в динамичния общ език на Microsoft. Има богати възможности за работа с текст, първоначално проектиран специално за манипулации с текст. В момента се използва в системното администриране, разработването на мрежово програмиране, биоинформатиката и др.
  • PHP. Съкращението се превежда като препроцесор за хипертекст. Използва се за разработване на уеб приложения, включително сървърната част. Тя ви позволява да създавате gui-приложения, използващи пакети PHP-GTK, PHP-Qt, WinBinder.
  • Python е език с общо предназначение, насочен към подобряване на производителността на разработчиците и четливостта на кода. Разработен е проект на Cython за превеждане на програми, написани на Python, в C код.
  • Абстракция

    Всяка книга от жанра "Обектно-ориентирано програмиране за манекени" подчертава един от основните принципи - абстракция. Идеята е да се разделят детайлите или характеристиките на изпълнението на програмата на важни и маловажни. Задължително за големи проекти ви позволява да работите на различни нива на системно представяне, без да уточнявате подробности.


    Абстрактен тип данни се представя като интерфейс или структура. Позволява ви да не мислите за нивото на детайлност на изпълнението. ATD не зависи от други раздели на кода. Добре известният афоризъм на Дейвид Уилър свидетелства: Всички проблеми в компютърните науки могат да бъдат решени на различно ниво на абстракция.

    Наследяване

    Налице са обектно-ориентирани езицинаследството е един от най-важните принципи.
    Показва, че функционалността на някакъв тип може да бъде използвана повторно. Клас, който наследява свойствата на друг, се нарича дериват, потомък или подклас. Този, от който се случва наследството, се нарича предшественик, база или суперклас. Връзката с наследниците на поколението създава специална йерархия. Има няколко вида наследяване:
  • просто;
  • множествено число.
  • Когато множественото наследяване може да бъде няколко деца от един предшественик, когато е на обикновен - само едно. Това е основната разлика между видовете. Наследството изглежда така: клас Animal {функция draw () {return "just animal"; } функция ядат {} {върне животното се яде}}}} Клас Cow разширява животно {функция draw () {Връщане "нещо, което прилича на крава"}} Виждаме, че клас Cow е наследил всички методи от клас животни. ако правим Cow.eat (), получаваме "животното яде", а след това draw () се променя. Cow.draw () ще върне "нещо, което прилича на крава" и Animal.draw () ще върне "само животно" "


    Инкапсулиране

    Инкапсулирането ограничава достъпа до други компоненти, свързва данните с методите за обработка, а спецификаторът за частен достъп се използва за опаковане.
    Обикновено понятието за капсулиране и укриване се идентифицира, но някои езици разграничават тези понятия. С други думи, критичните свойства са защитени и тяхната промяна става невъзможна. клас животното {частно $ име; функция __construct ($ name) {$ this- & gt; име = $ name; } функция getName {} {return $ this-> name; }} Името се приема като аргументи на конструктора. Когато конструкторът се използва в други части на кода, нищо не може да промени елемента на името. каквиж, той е посочен отвътре, за други части от кода той не е достъпен.

    Полиморфизъм

    Полиморфизмът позволява едното и името да се използват за решаване на подобни, но технически различни задачи.
    В горния пример има таблица. Виждаме клас CardDesk и клас GraphicalObject. И двете имат функция наречена draw (). Тя извършва различни действия, въпреки че има едно име. Ad hoc полиморфизъм или специален полиморфизъм използва:
  • претоварване на функции, методи;
  • въвеждане на типове.
  • Претоварването включва използването на няколко функции с едно име, когато изборът на съответното се случва по време на фазата на компилиране. Привеждането на типовете означава преобразуване на стойност от един тип на стойност към друг тип. Има изрична трансформация - функция, която приема един тип, но се връща към друга, неявна, се изпълнява от компилатор или интерпретатор.
    "Един интерфейс - много изпълнения" Бьорн Страуструп.

    Клас

    Класът е тип данни, който се състои от един набор от полета и методи.
    Има вътрешни и външни интерфейси за управление на съдържанието. Когато копирате чрез присвояване, копиран интерфейс, но не и данни. Различни видове взаимодействат помежду си чрез:
  • наследяване;
  • асоциации;
  • агрегиране.
  • Когато се наследи, дъщерният клас наследява всички свойства на родителя, асоциацията се отнася до взаимодействието на обектите. Когато обект от един клас влезе в друг, той се нарича агрегация. Но когато те все още зависят един от друг по време на живота си, това е композиция. Един от основнитехарактеристиките са обхват на видимост. Концепцията е различно определена от различните депутати. Обектът Pascal е описан по следния начин: ClassName = class (SuperClass) private {използването на елементи е ограничено само от границите на модулите} {тук полетата са посочени} строг частен {спецификаторът на достъпа става достъпен с изходния Delphi 2007 означава същото като private} защитено {елементи използвани вътре в ClassName или наследство} public {} публикувани {елементи са достъпни за всички, те се показват в Object Inspector} end; Тук Суперкласът е предшественик, от който се случва наследяването. За C ++ създаването изглежда така: class MyClass: public Родител {public: MyClass (); //конструктора ~ MyClass (); //destructor protected: private:}; В този пример Родителят е прародител, ако има такъв. Спецификациите частни, публични, защитени означават същото като в предишния пример за Pascal. Също така виждаме конструктор, деструктор, достъпен за всяка част на програмата. В C ++ всички елементи по подразбиране са частни, съответно, това може да се пропусне.

    Особености на реализацията

    В центъра на обектно-ориентираните езици един обект е част от клас. Състои се от:
  • полета;
  • метод.
  • ​​Полето за данни описва параметрите на обекта. Те представляват определена стойност, принадлежаща на даден клас, описват нейното състояние, свойства. По подразбиране те са затворени и промените в данните се дължат на използването на различни методи. Метод - набор от функции, които определят всички възможни действия, достъпни за изпълнение над обект. Всички обекти взаимодействат с извикването на методите на другите. Може да бъде външен или вътрешенкоето е определено от модификаторите за достъп.

    Методология на ООП

    Съществуват следните методологии:
  • Компонентно-ориентирано програмиране;
  • Прототипно програмиране;
  • Класово-ориентирано програмиране.
  • Компонентното програмиране се основава на концепцията за компонент - такава интегрална програма, която е предназначена за повторна употреба. Реализиран като набор от дизайни с обща характеристика, правила, ограничения. Подходът се използва в обектно-ориентирания Java език, където ориентацията на компонента се осъществява чрез JavaBeans, написани в съответствие със същите правила.
    В програмирането на прототипа няма концепция за клас - наследяването се извършва чрез клониране на съществуващ прототип. Тя е в основата на обектно-ориентираните JavaScript езици и други диалекти ecmascript, както и lua или lo. Основни характеристики:
  • потомците не трябва да запазват структурното сходство на прототипа (по отношение на класа - копие от това се случва точно);
  • При копиране на прототип всички методи се наследяват един към един. Класово-ориентираното програмиране се фокусира върху понятието клас и инстанция. Класът определя общата структура, поведението на случаите, които ги вземат.

    Обектно-ориентирани езици

    Всички OSOA напълно спазват принципите на OOP-елементите са обекти, които имат свойства. В този случай може да има допълнителни средства.
    OSO задължително съдържа набор от следните елементи:
  • деклариране на класове с полета, методи;
  • разширяване чрез наследяванефункции;
  • Полиморфно поведение.
  • В допълнение към списъка по-горе, могат да бъдат добавени допълнителни средства:
  • конструктор, деструктор, финализатори;
  • свойства;
  • индексатори;
  • модификатори за достъп.
  • Някои OSO отговарят на всички основни елементи, други - отчасти. Другите са хибридни, т.е. те са съчетани с подсистеми на други парадигми. Обикновено принципите на ООП могат да се прилагат и към езика, ориентиран към пристрастия. Въпреки това, използването на OBO все още не прави обектно ориентирания код. JAPs подкрепят повече от една парадигма. Например, PHP или JavaScript поддържат функционално, процедурно, обектно-ориентирано програмиране. Java работи с пет парадигми: обектно-ориентирани, обобщени, процедурни, аспектно-ориентирани, конкурентни. C # се смята за един от най-успешните примери за мултипарадигмалност. Той поддържа същите подходи като Java, към този списък е добавена рефлексивна парадигма. Депутатът като Оз е предназначен да комбинира всички концепции, традиционно свързани с различни програмни парадигми.

    Свързани публикации