Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет68/465
Дата09.01.2023
өлшемі3,66 Mb.
#60709
түріПрограмма
1   ...   64   65   66   67   68   69   70   71   ...   465
union payment{ 
char card[25]; 
long check; 
} info;
/* info жəне ptype мəндерін беру */ 
switch (ptype){
case CARD: cout << "Карта арқылы төлеу: " 
<< info.card; break; 
case CHECK: cout << "Чек арқылы төлеу: " 
<< info.check; break;

return 0;
}
Біріктірмелерді құрылым өрістері ретінде жиі қолданады, мұндайда 
құрылымға əрбір мезетте біріктірменің қай элементі қолданылатынын 
анықтайтын қосымша өріс енгізген ыңғайлы. Біріктірменің атын көрсетпеуге 
болады, бұл мүмкіндік оның өрістеріне тікелей қол жеткізуге (пайдалануға) 
болатынын білдіреді:
#include  
int main(){
enum paytype {CARD, CHECK}; 
struct{
paytype ptype; 
union{
char card[25]; 
long check;
};
} info;
... /* info мəнін беру */ 
switch (info.ptype){
case CARD: cout << "Карта арқылы төлеу: " 
<< info.card; break;
case CHECK: cout << "Чек арқылы төлеу: " 
<< info.check; break;

return 0;
}
Сонымен қатар, біріктірмелер бір биттік бейнелеуді əртүрлі интерпретация-
лау үшін де қолданылады (бірақ, мұндайда типтерді айқын түрде түрлендіруді 
қолданған жөн). Мысал ретінде биттік өрістерден тұратын құрылымды 
қарастырамыз:


72
struct Options{ 
bool centerX:1; 
bool centerY:1; 
unsigned int shadow: 2; 
unsigned int palette: 4;
};
union {
unsigned char ch;
Options bit; 
}option = {0xC4}; 
cout << option.bit.palette; 
option.ch & = 0xF0; // маска қолдану
Құрылымдармен салыстырғанда біріктірмелерге бірқатар шектеулер 
қойылады. Олардың кейбіреуінің мағынасы кейін түсінкті болады:
□ біріктірме тек алғашқы элементінің мəні арқылы инициалдана алады;
□ біріктірме құрамында биттік өрістердің болуы мүмкін емес;
□ біріктірменің құрамында виртуалды əдістердің, конструкторлардың, 
деструкторлардың жəне меншіктеу операциясының болуы да мүмкін 
емес;
□ біріктірме кластар иерархиясына кіре алмайды.


73
2-ТАРАУ
Модульдік программалау 
Модульділік – барлық нəтижелі жұмыс 
істейтін ірі жүйелердің іргелі аспектісі.
Б. Страуструп 
Программаның көлемі ұлғайған сайын оның барлық ұсақ-түйек мəселелерін 
есте сақтау мүмкіндігі азаяды. Кез келген есептің күрделілігін төмендетудің 
табиғи тəсілі оны шағын бөліктектерге бөлу болып табылады. С++ тілінде кез 
келген программаны функциялар арқылы қарапайым жəне түсінікті бөліктерге 
бөлуге болады, осыдан кейін программаны функциялардың өзара əрекеттесуі 
деңгейінде ірілендірілген түрде қарастыру мүмкіндігі туады. Адам фактілердің 
шектеулі көлемін ғана есте сақтауға қабілетті болғандықтан, осы мəселенің 
өзі өте маңызды болып саналады. Функцияларды пайдалану программаның 
абстрактылық дəрежесін арттырудың алғашқы қадамы болғандықтан, ол про-
грамма құрылымын қарапайым етуге мүмкіндік береді.
Сонымен қатар, программаны функцияларға бөле отырып жазу оның 
ішіндегі ұқсас кодтарды қайталаудан құтқарады, өйткені функция тек бір рет 
жазылады, ал оны программаның əртүрлі орындарында қажеттілігіне қарай
бірнеше рет қайталап орындауға болады. Функциялардан тұратын програм-
маны түзету процесі де жеңіл атқарылады. Жиі қолданылатын функциялар-
ды кітапханаларға орналастыруға болады. Осылайша, оңай жөнделіп, жеңіл 
сүйемелденетін программалар құрылады.
Программаның абстрактылық дəрежесін арттыратын келесі қадам – функ-
цияларды жəне олармен байланысқан мəліметтерді жеке файлдарға (мо-
дульдерге) топтастырып жазу, олардың əрқайсысы компиляциядан жеке-же-
ке өткізіледі. Компиляция нəтижесінде пайда болған объектілік модульдер 
жинақтауыш көмегімен атқарылатын программаға біріктіріледі. Программа-
ны модульдерге бөлу қайта компиляциялау уақытын азайтады жəне програм-
маны түзету процесін жеңілдетеді, себебі ол маңызды емес іс-əрекеттерді 
модуль интерфейсінен тыс орналастырады да, программаны бөлшектей оты-
рып түзетуге (немесе əртүрлі программалаушылардың көмегімен түзетуіне) 
мүмкіндік береді. 
Модуль мəліметтер мен оларды өңдейтін функциялардан тұрады. Басқа 
модульдердің осы мəліметтерді өңдейтін өзіндік құралдарының болмағаны 
дұрыс, олар бұл үшін алғашқы модуль функцияларын қолдануы тиіс. Модульді 
қолдану үшін оның жүзеге асырылуының барлық ерекшеліктерін білудің 
қажеті жоқ, тек оның интерфейсін білу жеткілікті. Модульдер бір-бірінен 


74
неғұрлым тəуелсіз түрде жұмыс істейтін болса, программаны түзету соғұрлым 
жеңіл болады. Мұндай тəсіл программаны жөндеу кезінде бір мезгілде есте 
сақталуы қажет ақпараттың жалпы көлемін азайтады. Программаны барынша 
тəуелсіз бөліктерге бөлу күрделі мəселе болып табылады, ол программаны жо-
балау кезеңінде жүзеге асырылуы тиіс.
Жүзеге асыру ерекшеліктерін жасыру инкапсуляция деп аталады. Инкапсу-
ляция тек құрылымдық емес, объектіге бағытталған программалаудың да негізгі 
идеясы болып табылады. Инкапсуляция мысалы – программалық код бөлігін 
функцияға жазып орналастыру жəне оған қажетті барлық мəліметтерді пара-
метрлер ретінде беру. Мұндай функцияны пайдалану үшін оның тақырыбымен 
анықталатын (аты, қайтаратын мəнінің типі жəне параметрлерінің типі) 
интерфейсін білу жеткілікті. Барлық функциялардың тақырыптары жəне сырт-
тан қол жеткізуге болатын типтердің, айнымалылардың жəне тұрақтылардың 
сипаттамалары интерфейстің модулі болып табылады. Ауқымды (глобал-
ды) программалық объектілердің сипаттамалары программаның барлық 
модульдеріне сəйкес келуі тиіс.
С++ тіліндегі программаның модульділігі препроцессор директиваларының, 
атаулар кеңістіктерінің, жады кластарының, аластаулар мен жеке 
компиляциялаудың (анығын айтқанда, программаны бөлшектей отырып ком-
пиляциялау тілдің элементі болып табылмайды, ол тілдің жүзеге асырылуына 
байланысты орындалады) көмегімен сүйемелденеді.


Достарыңызбен бөлісу:
1   ...   64   65   66   67   68   69   70   71   ...   465




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

    Басты бет