Принципи на обектно-ориентираното програмиране

  •  

    Тема 16. Принципи на обектно-ориентираното програмиране. Класове и обекти. Елементи на класа. Дефиниране и използване на класове

     

    За да се реши една задача, ние първо създаваме опростен модел на реалността, който не отразява всички факти от нея, а се фокусира само върху тези, които имат значение за намирането на решение на нашата задача. След това, използвайки модела, намираме решение (т.е. създаваме алгоритъма) на нашия проблем. Ако искаме да решим задачата чрез компютър, описваме решението чрез средствата на даден език за програмиране.

    В наши дни, най-често използваният тип езици за програмиране са обектно-ориентираните, към които принадлежат С++, C#, Java и др. Обектно-ориентираното програмиране (ООП) се наложи, защото е близко до начина на мислене на човека. Една от причините за това е, че ООП ни предоставя средство за описание на съвкупността от понятия, които описват обектите във всеки модел. Това средство се нарича клас (class). Понятието клас и дефинирането на собствени класове, различни от системните, е част от езика Java и целта на този урок е да се запознаем с него.

    1.      Същност на обектно-ориентираното програмиране

    1.1.  Концепцията на обектно-ориентирания подход

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

    Съществуват 5 компоненти на обектно-ориентираната парадигма: обект, съобщение, клас, наследяване и метод. Тези компоненти много силно зависят една от друга, при това всяка се дефинира в термините на останалите.

    1.2.  Класове и обекти

    Клас (class) наричаме описание на даден обект от реалността. Класът представлява шаблон, който описва видовете състояния и поведението на обектите (екземплярите), които биват създавани от този клас (шаблон).

    Обект (object)

    Под обект се разбира познаваем предмет, елемент или същност (реална или абстрактна), имащ важно функционално предназначение в разглежданата приложна област. Всеки обект има състояние, поведение и индивидуалност. Със­тоянието на обекта се характеризира с изброяване на всички възможни свойс­тва на обекта и текущите стойности на тези свойства. Поведението се характеризира с възможните действия, които могат да се извършват от обекта и с обекта. Индивидуалност означава, че всеки обект има самостоятелност на свойствата и поведението, независими от тези на останалите подобни обекти.

    При програмното представяне на реален обект се използва негов модел. Разглеждат се не всички негови свойства и елементи на поведението, а само тези които ни интересуват за решаване на конкретен проблем. Разглежданите свойства се наричат атрибути. Атрибутите се реализират в програмата под формата на променливи, организирани в структура. Всеки атрибут има област на допустимите стойности. Разглежданите действия, които са елементи на поведението на обекта се наричат операции или още методи. Те се реализират в програмата под формата на функции (процедури).

    В ООП първо се дефинира общото описание на подобните обекти под формата на клас. След това по дефиницията (описанието) на даден клас се създават екземпляри на класа, наречени обекти. Когато един обект е създаден по описанието, което един клас дефинира, казваме, че обектът е от тип "името на този клас".

    Например, ако имаме клас Dog, описващ някакви характеристики на куче от реалния свят, казваме, че обектите, които са създадени по описанието на този клас са от тип – класът Dog. Това означение е същото, като например, низът "някакъв низ" казваме, че е от тип String. Разликата е, че обектът от тип Dog е екземпляр от клас, който не е част от библиотеката с класове на Java, а е дефиниран от самите нас.

    Съобщение. Взаимодействието между обекти се осъществява чрез съобщения (messages). Съобщението предизвиква реакция у обек­та-получател. Той изпълнява посочената в съобщението операция и връща управлението на обекта подател. Чрез съобщенията се описва поведението на обек­тите и на ОО-система като цяло.

    1.3.  Принципи на обектно ориентираното програмиране

    Четири основни характеристики са присъщи на ОО-подход. Те са:

       капсулиране на данните

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

       наследяване

       абстракция на данните

     

    а)  „Капсулиране" в класа на данните и операциите върху тях.

    Капсулиране означава, че за даден обект данните и операциите върху тях са събрани в една структура, наречена клас. Директният достъп до всички данни и методи е ограничен. Само най-необходимата информация за обекта е достъпна за ползване извън него. Обикновено достъпът до данните на обекта се осъществява чрез неговите методи.

    Капсулирането намалява количеството на глобалните променливи в процедурите. Това е важно, защото глобалните променливи са източник на най-честите програмни грешки, които при това се откриват и доста трудно.

    Това има следните преимущества:

             подробностите на вътрешната реализация остават скрити;

             данните и операциите са обединени в едно именовано цяло — класа, което улеснява повторното му използване;

             връзките между „капсулираните" обекти са опростени, защото осъществяването им чрез съобщения не зависи от вътрешните структури от данни.

    б) Наследяване. Същността на наследяването е, че всеки подклас придоби­ва автоматично (наследява) всички атрибути и операции на съответния супер-клас. Така се осигурява повторно използване на проектираните и реализирани вече структури данни и алгоритми. Улеснено е внасянето на изменения, защото те се правят само в съответното ниво в йерархията от класове и чрез наследяване­то се разпространяват. При необходимост от нов клас той може да се конструира изцяло или да се „вмъкне" в съществуващата йерархия от класове, като се допи­шат само специфичните за него елементи. Допуска се и „множествено наследява­не" от няколко различни суперкласа. То е полезно заради по-големия брой насле­дявани свойства, но затруднява проследяването на връзките в йерархията.

    в) Полиморфизъм. Това свойство дава възможност различни операции да имат едно и също име. Той позволява един метод на класа да реагира различно, в зависимост от използвания обект. Така се осигурява настройваемост и гъвкавост, защото с уеднаквено извикване могат да се реализират специфични обработки.

    г) Абстрактност на данните

    Абстрактността представлява възможност да се работи с данните без да се отчита тяхната точна реализация. Известни са само операциите, които може да се извършват с данните.