С++ тілінің объектілі-бағытталған құралдары. Объектілер, кластар

 

Дәріс мақсаты: кластар және объектілер туралы түсінік беру, объект өрістерін инициализациялау жолдарын көрсету, кластың статикалық мүшелерін талдау.

Кілттік сөздер: класс, объект; private; protected; public; inline; this көрсеткіші.

Жоспар:

  1. Класты анықтау
  2. Объект өрістерін инициализациялау
  3. This көрсеткіші
  4. Кластың статикалық компоненттері
  5. Класты анықтау

С++ тілінде басқа тілдерде сияқты класс – бұл мәліметтердің құрылымдық типі. Ол мәліметтер өрістерін және осы мәліметтер өрістерімен жұмыс жасайтын процедуралар мен функцияларды құрайды. Бұл процедуралар мен функциялар әдістер деп аталады. Программада класс типті айнымалылар қолданылады. Ондай айнымалылар обьект деп аталады. С++ тілінде басқа программалау тілдерінде секілді класс дегеніміз ортақ қасиеттері бар обьектілер жиынтығын сипаттауға арналған құрылымдық тип. Ол келесі түрде анықталады:

Class  <класс аты>

{  Private:  <класстың ішкі компоненттері>

   Protected:  <класстың қорғалған компоненттері>

   Public: <класстың жалпы компоненттері>      

 };

Классты сипаттауда компонент ретінде обьект параметрлерін сақтауға арналған өрістер және олармен қарым – қатынас ережелерін сипаттайтын функциялар алынады. Обьектілі бағытталған программалау стандартты терминологиясына сәйкес класс компоненттерін – функцияларды немесе компонентті функцияларды әдістер деп аталады.

Private  бөлімінде анықталған немесе хабарланған класс компоненттері ішкі деп аталады олар тек осы кластың компонеттері функциясына ғана қолжетімді және де сипатталатын класстың достық функциясына қолжетімді.

Protected бөлімінде анықталатын класс компоненттері қорғалған деп аталады. Олар тек осы класстың компонентттері классына ғана емес сонымен қатар оның туынды класстарының да компоненттік класс да қолжетімді. Жаратылыстан ие болу болмаған жағдайды ішкі компонент ретінде интерпретацияланады.

Public бөлімінде анықталатын класс компоненттері жалпы деп аталады. Олар класстан тыс программаның кез келген бөлімінде қолжетімді. Дәл осы бөлімде класстың интерфейстік бөлігінің өрістері мен әдістері анықталады.

Егер классты анықтау кезінде компоненттерге қатысты тип көрсетілмесе, үнсіз жағдайда private типі алынады.

Класс өрістері әрқашан класс ішінде сипатталады, ал компонентті функциялар класстың ішінде де сыртында да сипаттала алады. Соңғы жағдайда классты анықтау осы функциялар прототипін қамту керек, ал функция басы класс атын және “::” белгісін қамту керек. Осылайша компиляторға анықталатын функцияға класстың ішкі өрістері қолжетімді екені хабарланады.

<функция типі> <класс аты> :: <функция аты> (<параметрлер тізімі>)

{<компонентті функция денесі>}

 

  1. Объект өрістерін инициализациялау

С++ ережесі бойынша егер компоненттік функция денесі класс сипаттамасында орналасқан болса, онда бұл функция іштестірілген (inline) болып саналады. Төменде келтірілген мысалда кластың компоненттік функциялары үнсіз жағдайда іштестірілген болады.

#include<stdio.h>

#include<conio.h>

Class x

{private:char c;

 Public:int x,y;

 Void print(void)

{clrscr();

goto(x,y);

printf(“%c”,c);

          x=x+10; y+y+5; goto(x,y);

Printf(“%c”,c);

}

Void set_x(char ach, int ax, int ay)

{c=ach; a=ax; y=ay;  }

};

Іштестірілген компоненттік функцияларды кластан бөлек те сипаттауға болады. Ол үшін функция басына inline қызметші сөзін қосу керек. Компоненттік функцияларды анықтау кезінде келесі функцияларды іштестірілген ретінде алуға рұқсат етілмеуін ескеру қажет:

  • циклді, ассемблерлік қоюларды, ауыстырғыштарды қамтитын функциялар;
  • рекурсивті функциялар;
  • вертуальді функциялар;

Класты анықтауды программа текстінен бұрын орындауға болады не болмаса бөлек файлға жазып, оны программаға #include дерективасы көмегімен қосуға болады. Жазылуы: #include <файл аты>

Бұрын анықталған кластарды қолдану программада қажет жағдайда класс объектілері хабарлайды, мұндай хабарлау келесі түрде болады:

<класс аты> <объектілер немесе көрсеткіштер тізімі>

Класс өрістерін хабарлаған кезде оларды инициялизациялау мүмкін емес. Себебі, өрісті сипаттау кезінде оның орналасуы үшін жады бөлінбейді. Оның бөлінуі – класс үшін емес, класс объектілері үшін орындалады.

Сондықтан, өрістің инициализациясы тек нақты класс оъектілерін хабарлағаннан кейін мүмкін болады. Объект өрісіне мән беру программасын орындау барысында бірнеше әдістерді іске асырады:

  • объект өрісіне тікелей мән меншіктеу
  • қолданылып отырған кластың кез-келген компонентті функциясы ішінде
  • С++ ережесіне сәйкес инициализациялау операторының қолданылуы

Жоғарыда келтірілген әдістер тек Public секциясында сипатталған өрістерді инициализациялауға қолданылады.

Private және Pratected секциясында сипатталған өрістерді инициализациялау тек компоненттік функциялар көмегімен жүзеге асырылады.

 

  1. This көрсеткіші

Егер функция – нақты объектінің мәліметтерін өңдеу үшін шақыратын болса, онда бұл функция көрсеткіші автоматты түрде функция шақырған объектіге беріледі. Бұл көрсеткіш This деп аталады және класс функциясында мына түрде сипатталады:

<Класс_аты> * const this = <объект_адресі>;

This көрсеткіші әрбір статикалық емес компонентті функцияның қосымша жасырын параметрі болып табылады. Класқа тиісті функцияның денесіне кіру кезінде – this көрсеткіші функция шақырған  объект адресінің мәні ретінде инициялизациялайды. Нәтижесінде бұл объект функцияның ішінде қол жетімді болып таблады.

Көп жағдайда this көрсеткіші нақты түрде қолданылады. Кластың статикалық емес функциясының әрбір мүшелеріне this көрсеткіші – сәйкес объектіге кіру үшін қолданылады.

 

  1. Кластың статикалық компоненттері

Класс – бұл тип. Ал обьект сол класстың программадағы нақты көрінісі. Әр обьект үшін өзінің класс өрістерінің көшірмесі болады, егер бір типтің барлық обьектілері кейбір мәліметтерді бірігіп қолданса, онда сол мәліметтерді орналастыру және оларға класстың барлық обьектілерінен қатынауды қамтамасыз ету мәселесі туындайды. Ол үшін статикалық компоненттер механизмі қолданылады. Статикалық деп – static модификаторы мен хабарланған класс компоненттері аталады. Мұндай компоненттер класс бөлігі болып табылады бірақ осы класстың обьектілеріне кірмейді.

Класстың статикалық өрістерінің тек бір ғана көшірмесі бар болады. Бұл өрістердің инициализациясы міндетті түрде классты анықтаудан тыс орналасады.

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

Төменде статикалық өрістің ерекшеліктері көрсетілген:

  • Жады статикалық өрісте құрылған объектілердің санынан тәуелсіз (тіпті ол қатыспаған кезде) инициялизацияланған кезде бір-ақ рет белгіленеді және әрекет ету облысына рұқсат беру операциясы көмегімен инициализациялайды:
  • Статикалық өрістер – кластың аты арқылы қол жетімді болғаны тәрізді, объектілер атымен де қол жетімді.

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

Статикалық өрістердегі жады  “size of“ операциясының  көмегімен объектінің размерін анықтау кезінде саналмайды

 

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

  1. Класс дегеніміз не?
  2. Класс типті айнымалы қалай аталады?
  3. private; protected; public қызметші сөздері нені анықтайды?
  4. This көрсеткіші қалай қолданылады?

 

Әдебиеттер:

  1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.
  2. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.
  3. Бьерн Страуструп. Язык программирования С++. Третье издание. — М.: Изд. Бином, Невский Диалект, 1999.
  4. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

 

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

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