Кластарды мұрагерлік ету. Мұрагерлік түрлері

 

Дәріс мақсаты: объектіге бағытталған программалаудың негізгі қасиеттерінің бірі – мұрагерлікпен танысу, оның түрлерін ажырата білуге үйрену.  

Кілттік сөздер: мұрагерлік; жалғызданған мұрагерлік; көпше түрдегі мұрагерлік; мұрагерлік түрі; туынды класс; базалық класс.

Жоспар:

  1. Жалғызданған мұрагерлік
  2. Көпше түрдегі мұрагерлік

 

  1. Жалғызданған мұрагерлік

Объектілі бағытталған класстар шынайы және бағдарламалы желінің концепцияларын модельдеуге қолданылады. Пәндік аймақтың концепциялары әр түрлі қарым қатынаста болады. Сондай қарым-қатынастардың бірі – мұрагерлік қатынасы. 

Мұрагерлік – класс алдындағы ұрпақтың барлық қасиеттерін және әдістерін сақтай отырып, бір кластың басқа кластан пайда болу мүмкіндігі. Мұрагерлік қатынасымен байланысқан кластар жиынтығы – иерархия деп атайды. Нақтырақ  айтқанда, объект келесі объектінің негізгі қасиеттерін мұра ете алады және тек оған ғана сәйкес кескіндер қоса алады. Мұрагерлік маңызды, себебі ол кластар иерархиясын қолдану үлкен информация лектерін басқарылатындай етеді.

Мысалы, егерде 1.2 тапсырманың шарты тек қана үшбұрыштарды ғана емес, сонымен қатар төртбұрыштарды өңдеу талаптарында сақталса, жаңа Tetragon класының талдануы Triangle класының жалпы болмысын анықтар еді. Үшбұрыштардың да, төртбұрыштардың да “көпбұрыш” деген жалпы ұғымнан гөрі жеке(арнайы, нақты) жағдай, бұндай жалпылықтың себебі болып табылады. Сондықтанда Triangle және Polygon класын жасау, ал соңғы екі класты базалық Polygon класының мұрагері деп хабарлау ұтымды болар еді. С++ тілі бұны жеңіл жасауға мүмкіндік береді:

class Polygon{

// . . .

};

class Triangle: public Polygon{

public:

Show();

};

class Tetragon:public Polygon{

public:

Show();

}:

Бұл мысалда туынды кластар Triangle және Tetragon барлық базалық элементтерді Polygon мұрагерлікке алады, бірақ олардың әрқайсысының өзіндік әдісі бар show(). Кейбір кезде мұрагерлік қарым қатынас <<is a>> қарым-қатынас деп аталады, кей кезде бұны “өзімен көрсету” депте атайды. Туынды кластың ортақ синтаксисы жай мұрагерліктің пайда болуы:

class аты: пайда_болу кілті, базалық_класс аты {

// класстың денесі

}:

Көпші түрдегі мұрагерлік кезінде екі нүктеден кейін үтір қойылады және барлық базалық кластар пайда болу кілтімен бірге.

   Мұрагерлік түрі

         Базалық класта компоненттерді анықтау

    Туынды класта              компоненттердің көрінуі

Private

Private

protected

public

мүмкін емес

Private

Private

Protected

Private

protected

public

мүмкін емес

protected

protected

Public

Private

protected

public

мүмкін емес

protected

public

Туынды кластың өзі қандай да бір класс үшін базалық бола алады. Бұндай класс аралық байланыстар кластар иеархиясын құрайды. Иеархия көбінесе ағаш болып табылады, бірақ та графалын құрылым бола алмайды. Мұндағы мұрагерлік түрі  public, protected, private кілттік сөздермен анықталады. Егер мұрагерлік түрі көрсетілмесе онда үнсіз жағдайда public қолданылады. Бірақ программалардың жақсы стилі кез – келген жағдайда мұрагерлік түрі көрсетілуін талап етеді.

 

 

Т

 

 

 

 

 

 

 

 

 

 

 

 

Туынды класстан базалық класстың өрістерімен функцияның көрінуі мұрагерлік түрімен анықталады және кестеде келтірілген:

Жалпы мұрагерліктің екі түрі бар:

  1. Жалғызданған мұрагерлік
  2. Көпше түрдегі мұрагерлік

 

  1. Көпше түрдегі мұрагерлік

С++ тағы туынды класс базалық кластың кез–келген санынан туындауы мүмкін. Туынды кластың құрамында бірден көп базалық кластың болуы көпше түрдегі мұрагерлік деп атайды. Синтаксистік көпше түрдегі мұрагерлік жекеше түрдегі мұрагерліктен бірнеше элементтен тұратын база тізімен ерекшеленеді.

Class A

{

};

Class B

{

};

Class C: public A, public B

{

};

Туынды кластың таныстырушы – объектісін қалыптастырғанда, база тізіміндегі базалық кластардың орналасу қалпы (умолчания) конструкторларының шақыруының кезеңімен анықталады.

Бұл қалпы осы объектілерді жою кезінде деструкторлардың шақыруы кезегіне де септігін тигізеді. Бірақ бұл мәселелер алгоритм секілді базалық объектілерге бөлінген памяттер және де бұл релизация сұрағына қатысты болып табылады. Әдетте программист бұған арнайы көңіл бөлмеуі мүмкін.

Шектеу орналғандықтан туынды кластарды хабарлауда база тізіміне бірдей атаудағы класс бірнеше рет кіре алмайды. Бұл, туынды класты қалыптастырғанда қатысқан қайталанатын элементтер базалық кластарды қабылдаған кезде кездеспеуі керек дегенді білдіреді.

Сонымен бірге, бірдей класс белгіленген туынды кластағы бірнеше базалық кластарды қалыптастырғанда қатыса алады. Сондықтан туынды класты қалыптастырғанда қатысқан тура емес базалық  кластарға туынды кластың хабарламасына кіру санына еш шектеу қойылмайды.

class A

{

public:

int x0,xA;

};

class B: public A

{

public:

int xB;

};

class C:public A

{

public:

int x0,xC;

};

class D:public B, public C

{

public:

int x0,xD;

}; 

Бұл мысалда А мен Д класын хабарлауда екі рет тура емес базалық класс ретінде қолданылады.

Туынды кластың құрылымын таныстарғанда ацикличестік графалар, кластар мен объектілердің сызба нұсқасы қолданылады.

Бұрындағы секілді туынды класта көрсетіп бағытталған, ацикличестік графаның ең төменгі бөлігі, сызба нұсқаның төменгі деңгейімен туынды класс пен объект фрагментінен сәйкес келеді.

Біз бұндай объекті фрагменттін белгіленген кластың туынды таныстырушы – фрагменті деп атаймыз.

Графаның жоғарғы бөлігі, сызба нұсқаның жоғарғы деңгейі базалық класс пен объект фрагментіне сәйкес келеді.

Біз бұндай объекттін фрагментін кластың базалық таныстырушы базалық фрагменті деп атаймыз.

 

Бақылау сұрақтары:

  1. Мұрагерлік дегеніміз не?
  2. Мұрагерліктің қандай түрлері бар?
  3. Базалық класс пен туынды класс арасындағы байланыс?

 

Әдебиеттер:

  1. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.
  2. А.В. Замулин. Курс лекций: Объектно-ориентированное программирование (С++)
  3. А.В. Замулин. Курс лекций: ООП (С++, Ява, C#)
  4. Бьерн Страуструп. Язык программирования С++. Третье издание. — М.: Изд. Бином, Невский Диалект, 1999.
  5. Г. Шилдт. Самоучитель C++. — Санкт-Петербург, Изд. BHV, 2004.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *