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