Энергетика


 Дәріс №3. Класс абстрактылы тип ретінде



Pdf көрінісі
бет8/23
Дата07.02.2022
өлшемі1,03 Mb.
#91462
түріПрограмма
1   ...   4   5   6   7   8   9   10   11   ...   23
Байланысты:
is 1

3 Дәріс №3. Класс абстрактылы тип ретінде
 
Дәрістің мақсаты:
класс ұғымын толық түсіндіру. 
Дәрістің мазмұны:
«Клиент-сервер» технологиясы бойынша класс 
әдістерін анықтау. Конструктор мағынасы. Деструктор мағынасы. 


13 
Деректер абстракциясына негізделетін программаларды жүзеге асыру 
және құрастыру, жобалау принциптерінің жиынтығы, шешілмелі есептердің 
ерекшеліктері мен түсініктерін анағұрлым толық көрсететін деректердің жаңа 
типтерін құруды қарастырады. С++ тілінде программалаушының өзіндік 
деректер типтерін енгізуге және олармен кластар көмегімен орындалатын 
операцияларды анықтауға мүмкіндігі болады. 
Класс - бұл бар типтер негізіндегі туынды құрылымдық 
(структурированный) тип. Класты келесідей ең оңай әдіс арқылы анықтауға 
болады: 
Класс_кілті класс_аты {компоненттер тізімі}; 
мұнда класс_кілті - class, struct, union қызметші сөздерінің бірі; 
класс_аты - еркін таңдалатын идентификатор; 
компоненттер тізімі - класқа қатысты функциялар мен типтелген 
деректердің сипаттаушылары мен анықтамалары. Компоненттер обьект күйін 
анықтайды және класс объектісінің тәртібін шартқа негіздейді. Класс 
компоненттері деректер, функциялар, кластар, санауыштар, биттік өрістер
достық функциялар мен типтер атаулары бола алады. Мысалы: 
class Classid 
{ int k; // к, х, у жабық мүшелер - үнсіздік бойынша деректер 
double x,y; 
public: char lit, ch; // lit,ch ашық мүшелер - деректер
int f3(int,int); // кластың ашық әдістері 
int Get x (void) 
// кластың орнына қою әдісі 
{ return x; } 
private: 
void f
1
(void); // жабық мүшелер - класс әдістері 
int f

(int);
}; 
Қатынау спецификаторлары public: және private: қатынау
спецификаторлары класс мүшелеріне өтуге мүмкін беретін режимді 
анықтайды: private - класс мүшелерін жабыққа айналдырады, ал public - 
ашық. Кластың жабық мүшелеріне тек берілген класс мүшелерінің қатынауға 
рұқсаты бар, сонымен қатар функциялардың – класс достары. Кластың ашық 
мүшелеріне кез келген функциялардың қатынауға мүмкіншіліктері бар. Олар 
бар болып табылатын бағдарлама мен класс объектілерінің байланысы үшін 
арналған. 
Класты жобалап отырып, оның қай мүшесін ашық, ал қайсысын жабық 
етуді мұқият ойластырған жөн. Көптеген жағдайда класс анықтамасы блокта 
локализацияланбаған және класс атауының іс-әрекет облысы бүкіл файл 
болып табылады. 
Жай кластық әдістерін анықтау класс анықтамасының ішінде болуы 
мүмкін және мұндай жағдайда олар автоматты түрде орын ауыстырғандар 


14 
болып табылады. Орын ауыстыратын функцияларды егер функция қарапайым 
және қысқа болса, қолданған жөн, мысалы, Getx ( ) функциясы. 
Әдетте, қауіпсіздікті жоғарылату мақсатымен кластың мүше-
берілгендерін жалпыға бірдей рұқсат етілмейтін етеді және еркін бағдарлама 
ортасынан олармен тікелей байланысуға болмайды. Бірақ оған қарамастан 
олармен кластың барлығына рұқсат етілген әдістерін қолданып ерікті 
бағдарламалық ортадан да жұмыс істеуге болады (public:). Жоғарыда 
қарастырылған мысал үшін келесі әдіс қолданылады: 
int Getx (void) 
{ return x; } 
жабық мүше мәнін берілген х қайтарады. 
Арнайы түрде мұндай әдістердің «жүдеу» денелерін тиімділікті 
жоғарылату үшін орын ауыстырушы етіп класс анықтамасының ішінде 
енгізеді. Класс анықтамасынан тыс орналастыратын әдістерді анықтаған 
жағдайда әдістер тақырыбына inline спецификаторы қосылады. 
«Клиент-сервер» технологиясы бойынша класс әдістерін анықтау класс 
анықтамасынан тыс орналастырған жөн. Көру облысының «::» рұқсат ету 
операторы арқылы компиляторға берілген анықталатын әдіс қандай класқа 
қатысты екендігін хабарлайды, мысалы:
int Classid:: f

(int х)
{ әдіс денесі } 
Класс анықтамасы берілген класс объектілерін құрмайды. Объектілер 
оларды анықтау жолымен ғана құрады, мысалы:
Classid obj1, obj2, obj Array [10]; 
Класс объектісінің өлшемі кластың статикалық емес мүше 
берілгендерінің өлшемдер қосындысымен жадыда анықталады. Класс әдістері 
класс объектісі үшін бөлінген жады облысының орнын алмайды.
Бірнеше файлдардан тұратын бағдарламалық жобалармен жұмыс 
жасағанда класс анықтамасы берілген класс объектілері қолданатын немесе 
оның әдістері анықталатан файлдарда болуға міндетті. Сондықтан класс 
анықтамасын арнайы түрде ол қажет болып табылатын файлдарда #include 
дерективасы көмегімен қосылатын тақырыптық файлға (хедер-файл) 
орналастырылады. Егер класс әдісінің анықтамасы анықталудан тыс 
орналасса, онда ол міндетті түрде өзі қолданылатын файлдарда анықталған 
болуы керек. Мұндай әдістің анықтамасы класс анықтамасымен бірге 
тақырыптық файлда болуы керек. 


15 
Белгілі бір класс объектісінің ашық мүшелеріне қатынауға рұқсат алуды 
тура «.» және жанама « » таңдау операторлары көмегімен жүзеге 
асырылады. 
C++ тілінде объектілерді жою мен инициализациялау жұмыстарын 
орындайтын, обьектілердің жойылуы мен құрылуы кезінде автоматты түрде 
шақырылатын, кластың арнайы әдістері сәйкесінше конструкторлар мен 
деструкторлар деп аталады. Класта бірнеше конструкторларды құруға 
болады. Әрбір конструктордың өзінің басқалардан айырмашылығы бар 
параметрлері болады. Параметрлері жоқ конструктор үнсіздік конструкторы. 
Деструктор әрқашан жалғыз және параметрлері болмайды. 
Тек ашық мүшелері бар және конструкторы жоқ класс объектісі мәндер 
тізімі арқылы жай құрылымдық айнымалы сияқты инициализациялануы 
мүмкін. 
Егер класс конструкторларының біреуі де ашық функция – класс мүшесі 
болып табылмаса, онда мұндай кластың мүшелері құрыла алмайды. Мұндай 
кластар басқа кластар (мұрагерлік) үшін базалық кластар (родительские) 
болып табылады. 
Класс объектісін құрған кезде ол үшін сәйкес келетін конструктор 
автоматты түрде шақырылады. Объекттің деректер мүшесі (объект 
айнымалыларының) инициализациясы конструктордың орындалуы сияқты 
инициализациясы кезінде де орындала алады. 
Конструктор параметрі өз класы бола алмайды, бірақ көшіру 
конструкторы сияқты оған жасалған сілтеме болуы мүмкін. 
Кластың деректер компонентінің жалғыз данасы болуы үшін және әрбір 
жаңа кластың объектісінің құрылуы кезінде тираждалмауы үшін ол класты 
статикалық сияқты анықтау керек, яғни Static атрибуты болуы керек. 
Кластың статикалық компоненттік функциялары нақты обьект атауы 
жоқ кластың Static берілгендеріне қатынасуды қамтамасыз етеді. Кластың
Static функциялары функциялардың жай (статикалық емес) компоненттік 
барлық негізгі ерекшеліктерін сақтайды. Класқа қатысты функция нақты 
объекттің деректерін өңдеу үшін шақырған кезде бұл функцияға автоматты 
және айқын емес функция шақырылған объект көрсеткіші беріледі. Бұл 
нұсқауыштың бекітілген 
this
аты бар және программалаушы үшін кластың 
әрбір функциясы келесі түрде анықталған:
класс_аты*const this=өңделетін_обьекттің_адресі; 
this нұсқауышын қолдану тиімділігі көрінетін жағдайлар: 
-
берілген класс компонентінің аты класс функциясының формальды 
параметрінің атымен сәйкес келгенде; 
-
класс функциясының денесінде айқын түрде бұл функция шақырылған 
объект адресін көрсету қажет болғанда; 


16 
-
функция параметрі ретінде бұл кластың функция атын жазған кезде 
объекттің нақты атына жол берілмегенде (керек объектіге мұндай функция 
сілтемесін немесе нұсқауышын берудің орнына). 
Бақылау сұрақтары: 
1)
Белгілі бір кластың екі объектісін анықтағанда, деректер мүшелері 
өздерінің әртүрлі (бірдей) мәндеріне ие бола ала ма? 
2)
Кластың 
қандай 
деректер 
мүшелерін 
қандай 
жолмен 
инииализациялау керек? 
3)
this нұсқаушысы нені білдіреді? 


Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   ...   23




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет