ОБЕКТНО ОРИЕНТИРАН ПОДХОД ЗА ПРОГРАМИРАНЕ. КЛАСОВЕ. ОБЕКТИ Печат
Написано от sevda   
Вторник, 30 Април 2013 07:02

ОБЕКТНО ОРИЕНТИРАН ПОДХОД ЗА ПРОГРАМИРАНЕ. КЛАСОВЕ. ОБЕКТИ Наследяване.

Обектно ориентирано програмиране т.е начин на организиране на изчисленията.

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

2.Втори принцип на ООП-всички обекти са екземпляри на клас. Кой метод ще се активира в отговор на едно съобщение се определя от класа на получателя и всички обекти от даден клас изпълняват един и същ метод за подобни съобщения.

Йерархия-по-долните класове имат своиствата на по-горните класове.

Принцип на наследяването – знанията за по общата категория са валидни и за по-специфичните.

3.Трети принцип на ООП- класовете могат да се организират в йерархична структора. Класът наследник наследява свойствата на класа родител. Абстрактен клас-клас, който се използва само за създаване на подкласове т.е. няма преки екземпляри.

Основни характеристики на ООП

1.Всичко е обект.

2.Изчислението се извършва от  обекти, комуникиращи по между си, давайки заявки други обекти да извършват действието. Обектите комуникират по между си като приемат и получават съобщения. Съобщението е заявка за действие, заедно с аргументи, необходими за изпълнението на заявката.

3.Всеки обект има собственс памет, която се състои от други обекти.

4.Всеки обект е екземпляр от даден клас, който представлява групиране на подобни обекти.

5.Класът е склад за поведението,асоциирано с един обект т.е.  всички обекти, които са екземпляри на един и същ клас магат да изпълняват едни и същи действия.

6.Класовете са организи-рани в дървовидна структора, наречена йерархия. Паметта и поведението, асоциирани с екземпляр на един клас автоматично са достъпни до всеки клас, по-надолу в йерархията т.е. се наследяват.

Видове абстрактни механизми:

Процедурни- позволяват извършване на операциите в цикъл;

Блокови структори- инициализираните в блок променлививажат смоза него.

Модули- пространството на имената се разделя на две : public(публични)- достъпни и за програмите извън модула, private (частни)- достъпни само за модула. Чрез модулите моигат да се правят екземпляри т.е. има само един стек.

Абстрактни типове данни – типове данни, декларирани от програмистта, който могат да се обработват подобно на системно дефинираните типове данни.. Модулите са техника за реализация на абстрактни типове данни . за реализацията им са нужни:

-да експортираме дефиниции на тип;

-да представим множество от операции за обработка на екземпляри от типа;

-да защитим данните, така че да могат да се обработват чрез представените процедури;

-да създаваме много екземпляри на типа.

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

Чрез обектите адекватно се представят понятията и обектите сот реалния свят и обектната област. Класовете са типове състоящи се от компоненти, които са данни или функции. Функциите, принадлежащи на класовете наричаме методи. На един дефиниран клас могат да се създават екземпляри, наречени обекти.

Дефинирането на класове се състои от декларация на класа и дефиниране на неговите методи. Общ вид на декларацията:

class[]

{

;

}

Имената на класовете трябва да са уникални. Имената на компонентите са локални.

class Person

{

char name[50];

unsigned age;

public:

void getdata();

void display();

}

void Person::getdata()

{

cout<<”vavedi ime: ”;

cin>>name;

cout<<”vavedi vazrast: ”;

cin>>age;

}

void Person::display()

{

cout<<”ime: ”<

}

Дефиниция на методи:

::

Методите на даден клас имат достъп до всички негови компоненти. Методите могат да използват компонентите без те да се предават като параметри. Видове достъп:

public-всички функции имат доистъп до компонента.

private- имат достъп само методите от класа.

protected – при наследяване

По подразбиране всички компоненти са private.

Обектите като компоненти

В един клас може да компонентите да са обекти от други класове.

Указателят this- при създаване на членове(представители) на класа се отделя памет за данните, но не и за методите за представителя.

Статични компоненти данни- декларират се като преди компонента записваме static. Особенности – памет за тях се заделя еднократно. Достъп до тези памет имат всички обекти.

Статичните компоненти данни имат статут на външни променливи и достъпът от вънншни обекти става така: ::.

Саттичните компоненти данни задължително се инициализират извън декларацията на класа.

Статични методи:

Преди метода записваме static. Статичните методи могат да се извикват и самостоятелно т.е. без обект, но тогава пак се използва пълното име:

::

На тези методи не се предава this.

class x{

int m;

public:

static void f1(int x,x & ob);

……..

}

void x::f1(int x,x&ob)

{

m=x;//грешка

ob.m=x;//вярно

}

void main()

{…………..

x obekt;

f1(1,obekt);

x::f1(5,obekt);//m ще стане 5

obekt.f1(5,obekt);

………….

}

На тези методи не се слага указателя this.

Конструктори и деструктори

Това са специални методи на всеки клас. Особенности при дефинирането:

-имената на конструкторите са същите като на класа, на който принадлежат;

-конструкторите се изпълнява автоматично при създаване на обект от класа, затова не е нужно да се извикват в главната функция void main();

-името на деструктора е името на класа предшестванно от знака ~(~Клас);

-при уништожаване обект от класа деструктора също автоматично се изпълнява;

-конструктора се изпълнява първи а деструктора последен след приключването на програмата;

-конструктора връща указател към новосъздадения обект т.е. указателя this;

-на деструктора типа е жоид т.е. не връща стойност при изпълнение;

-типовете на деструктора и конструктора не се пишат;

-един клас маоже да има много конструктори , но има само един деструктор;

Област на действие на обектите (променливите)

В зависимост от областта на действие разглеждаме два вида обекта:

1.Автоматични обекти- параметрите на методите и обектите дефинирани вътре във метода. Те са достъпни само в тялото на метода, в който са дефинирани. Съсдава се при всяко извикване на метод, след приключването му, те се унищожават. За автоматични обекти и променливи памет се заделя в стек, това позволява рекурсия. Стекът е вид динамична памет, която сама се освобождава.

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

Производни класове (Наследяване)

Йерархията на класовете се реализира чрез тях. Производните класове се създават на основата на  създадени т.н. базови класове. При създаване на производен клас се осъществява т.н. наследяване (inheritance). То отразява това че след създаването на един производен клас, той съдържа компонентите на своя базов клас. Възможно е един производен клас да има няколко базови класове, тогава има множествено наследяване multiple inheritance. Преимущества:

-дефинирането на производни класове е еквивалентно на създаване на йерархия от класове, които са адекватен модел между йерархиите в предметната област или реалния свят;

-ако мнажество от класове имат общи части, данни или методи, то те могат да се обособят в базови класове и класовете да се препишат като производни на базовите;

-за да се създаде производен клас е достатъчно да се разполага само с обектните модули на базовия клас. Могат да се създадът библиотеки от класове предварително;

-производните класове разполагат с виртуални методи. Те дават средства за полиморфизъм в С++.