Обектно-ориентираното програмиране се основава на представянето на програмата под формата на набор от обекти. Всеки обект принадлежи на клас, който от своя страна заема своето място в наследената йерархия. Използването на ООП намалява излишните данни, което подобрява управляемостта, разбирането на програмата.
Какво е ООП
Абстракция
Абстрактен тип данни се представя като интерфейс или структура. Позволява ви да не мислите за нивото на детайлност на изпълнението. ATD не зависи от други раздели на кода. Добре известният афоризъм на Дейвид Уилър свидетелства: Всички проблеми в компютърните науки могат да бъдат решени на различно ниво на абстракция.
Наследяване
Инкапсулиране
Обикновено понятието за капсулиране и укриване се идентифицира, но някои езици разграничават тези понятия. С други думи, критичните свойства са защитени и тяхната промяна става невъзможна. клас животното {частно $ име; функция __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, към този списък е добавена рефлексивна парадигма. Депутатът като Оз е предназначен да комбинира всички концепции, традиционно свързани с различни програмни парадигми.
Полиморфизъм
"Един интерфейс - много изпълнения" Бьорн Страуструп.
Клас
Особености на реализацията
Методология на ООП
В програмирането на прототипа няма концепция за клас - наследяването се извършва чрез клониране на съществуващ прототип. Тя е в основата на обектно-ориентираните JavaScript езици и други диалекти ecmascript, както и lua или lo. Основни характеристики: