Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»


ГЛАВА 9 Рекомендации по программированию



Download 2 Mb.
bet143/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   139   140   141   142   143   144   145   146   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

ГЛАВА 9


Рекомендации

по программированию


 ýòîé ÷añòè áûëè ðaññìîòðåíû îáúåêòíî-îðèåíòèðîâaííûå âîçìîæíîñòè яçûêa C++, è òåïåðü ïðèøëî âðåìя îñòaíîâèòüñя ía ïðîáëåìaõ, êîòîðûå âîçíèêaþò â ïðîöåññå íaïèñaíèя ïðîãðaìì: êaêèå ñðåäñòâa яçûêa ïðåäïî÷òèòåëüíåå âûáèðaòü â ðaçíûõ ñëó÷aяõ, ía ÷òî îáðaòèòü îñîáîå âíèìaíèå, ÷åãî íóæíî èçáåãaòü, ÷òîáû ïðîãðaììa ïîëó÷èëañü ýôôåêòèâíîé è ëåãêî ñîïðîâîæäaåìîé.
Îäíîçía÷íûå ðåêîìåíäaöèè, êaê âñåãäa, äaòü íåâîçìîæíî — òîëüêî ïîíèìaíèå ìåõaíèçìa ðaáîòû C++ ïîçâîëèò ãðaìîòíî åãî èñïîëüçîâaòü.
Cîçäaíèå ëþáîãî ïðîãðaììíîãî ïðîäóêòa ía÷èíaåòñя ñ ïðîöåñña ïðîåêòèðîâa- íèя, è îäía èç ïåðâûõ çaäa÷, âîçíèêaþùèõ ïðè ýòîì, — îïðåäåëèòü, äîëæía ïðî- ãðaììa áûòü îáúåêòíî-îðèåíòèðîâaííîé èëè íåò. Îáúåêòíî-îðèåíòèðîâaííîå ïðîãðaììèðîâaíèå, ïðèìåíåííîå ê çaäa÷å, â êîòîðîé â íåì íåò íåîáõîäèìîñòè, òîëüêî óâåëè÷èò îáúåì ïðîãðaììû è ñëîæíîñòü åå íaïèñaíèя. Åñëè â ïðîöåññå aíaëèça ïîñòaíîâêè çaäa÷è âûяñíяåòñя, ÷òî íåîáõîäèìîñòè â èåðaðõèè êëaññîâ íåò, ÷aùå âñåãî ìîæíî îáîéòèñü ñòðóêòóðíûì ïîäõîäîì. Á. Còðaóñòðóï ñ÷èòaåò,
÷òî «âåçäå, ãäå íå íóæíî áîëåå îäíîãî îáúåêòa îïðåäåëåííîãî òèïa, äîñòaòî÷íî ñòèëя ïðîãðaììèðîâaíèя ñ ñîêðûòèåì äaííûõ ïðè ïîìîùè ìîäóëåé».
Cìåøèâaòü äâa ïîäõîäa â îäíîì ïðîåêòå íå ðåêîìåíäóåòñя, ïîñêîëüêó ìîæåò îêaçaòüñя, ÷òî ãîòîâûé ïðîäóêò îáëaäaåò íåäîñòaòêaìè è ñòðóêòóðíîãî, è îáúåêò- íî-îðèåíòèðîâaííîãî ïðèíöèïîâ ïîñòðîåíèя.
Òåõíîëîãèè ïðîåêòèðîâaíèя ïðîãðaìì ïîñâяùåíî ìíîãî ëèòåðaòóðû, è îñâåùåíèå ýòîãî âîïðîña íå âõîäèò â çaäa÷ó äaííîé êíèãè. Òåì, êòî ñîáèðaåòñя ïðèíèìaòüñя ça ñåðüåçíûå ïðîãðaììíûå ïðîåêòû, ðåêîìåíäóåòñя ïðåäâaðèòåëüíî èçó÷èòü ñòaâ- øèå êëaññè÷åñêèìè êíèãè Ô. Áðóêña [6], Ã. Áó÷a [7] è Á. Còðaóñòðóïa [17]. Äaëåå ðaññìaòðèâaþòñя âîïðîñû, ía êîòîðûå ñëåäóåò îáðaùaòü âíèìaíèå ía ñëåäóþùåì ýòaïå ñîçäaíèя ïðîãðaììû — â ïðîöåññå íaïèñaíèя ïðîãðaììíîãî êîäa.
Ïðè ñîçäaíèè nëañña, òî åñòü íîâîãî òèïa äaííûõ, ñëåäóåò õîðîøî ïðîäóìaòü åãî èíòåðôåññ — ñðåäñòâa ðaáîòû ñ êëaññîì, äîñòóïíûå èñïîëüçóþùèì åãî ïðîãðaì- ìèñòaì. Èíòåðôåéñ õîðîøî ñïðîåêòèðîâaííîãî êëañña èíòóèòèâíî яñåí, íåïðî-

òèâîðå÷èâ è îáîçðèì. Êaê ïðaâèëî, îí äîëæåí âêëþ÷aòü òîëüêî ìåòîäû, íî íå ïîëя äaííûõ. Ïîëя äaííûõ äîëæíû áûòü ñêðûòûìè (private). Ýòî äaåò âîçìîæ- íîñòü âïîñëåäñòâèè èçìåíèòü ðåaëèçaöèþ êëañña áåç èçìåíåíèé â åãî èíòåðôåé- ñå, a òaêæå ðåãóëèðîâaòü äîñòóï ê ïîëяì êëañña ñ ïîìîùüþ íaáîða ïðåäîñòaâëяå- ìûõ ïîëüçîâaòåëþ ìåòîäîâ.


Íå ñëåäóåò îïðåäåëяòü ìåòîäû òèïa get/set äëя âñåõ ñnðûòûõ ïîëåñ nëañña — ýòî âñå ðaâíî, ÷òî îòêðûòü ê íèì äîñòóï, òîëüêî áîëåå ñëîæíûì ñïîñîáîì. Âaæíî ïîìíèòü, ÷òî ïîëя êëañña ââîäяòñя òîëüêî äëя òîãî, ÷òîáû ðåaëèçîâaòü ñâîéñòâa êëañña, ïðåäñòaâëåííûå â åãî èíòåðôåéñå ñ ïîìîùüþ ìåòîäîâ. Êîíå÷íî, íåò íè÷å- ãî ïëîõîãî â òîì, ÷òîáû óñòaíîâèòü èëè ïîëó÷èòü çía÷åíèå íåêîòîðîãî ïîëя ñ ïî- ìîùüþ ìåòîäa, åñëè òaêèì îáðaçîì ðåaëèçóåòñя ñâîéñòâî êëañña (òaêèì îáðaçîì, êîä áóäåò òîò æå, a åãî ñìûñë — ñîâñåì äðóãèì).
Íå íóæíî ðañøèðяòü èíòåðôåéñ êëañña áåç íåîáõîäèìîñòè, «ía âñяêèé ñëó÷aé», ïîñêîëüêó óâåëè÷åíèå êîëè÷åñòâa ìåòîäîâ âåäåò ê òðóäíîñòè ïîíèìaíèя êëañña ïîëüçîâaòåëåì1.  èäåaëå èíòåðôåéñ äîëæåí áûòü ïîëíûì, òî åñòü ïðåäîñòaâëяòü âîçìîæíîñòü âûïîëíèòü ëþáûå ðaçóìíûå äåéñòâèя ñ êëaññîì, è ìèíèìaëüíûì — áåç äóáëèðîâaíèя è ïåðåñå÷åíèя âîçìîæíîñòåé ìåòîäîâ.
 âèäå ìåòîäîâ ðåêîìåíäóåòñя îïðåäåëяòü òîëüêî äåéñòâèя, ðåaëèçóþùèå ñâîé- ñòâa êëañña. Åñëè êaêîå-ëèáî äåéñòâèå ìîæíî ðåaëèçîâaòü, íå îáðaùaяñü ê ñêðû- òûì ïîëяì êëañña, åãî íåò íåîáõîäèìîñòè îïèñûâaòü êaê ìåòîä; ëó÷øå îïèñaòü åãî êaê îáû÷íóþ ôóíêöèþ, ïîìåñòèâ åå â îáùåå ñ êëaññîì ïðîñòðaíñòâî èìåí. Åñëè ôóíêöèя âûïîëíяåò äåéñòâèå, íå яâëяþùååñя ñâîéñòâîì êëañña, íî íóæ- äaåòñя â äîñòóïå ê åãî ñêðûòûì ïîëяì, åå ñëåäóåò îáúяâèòü êaê äðóæåñòâåííóþ. Íî â îáùåì ñëó÷aå äðóxåñòâåííûõ ôóínöèñ è nëaññîâ íaäî èçáåãaòü, ïîñêîëüêó ãëaâíîé èäååé ÎÎÏ яâëяåòñя ìèíèìèçaöèя ñâяçåé ìåæäó èíêaïñóëèðîâaííûìè êëaññaìè.
Äëя óâåëè÷åíèя ïðîèçâîäèòåëüíîñòè ïðîãðaììû íaèáîëåå ÷añòî âûçûâaåìûå ìåòîäû ìîæíî îáúяâèòü êaê âñòðîåííûå (inline).  îñíîâíîì ýòî êañaåòñя êîðîò- êèõ ìåòîäîâ, òåëî êîòîðûõ îêaçûâaåòñя ìåíüøå ðaçìåða êîäa, ãåíåðèðóåìîãî äëя èõ âûçîâa. Êðîìå óñêîðåíèя ïðîãðaììû ça ñ÷åò èñêëþ÷åíèя âûçîâîâ, ýòî äaåò âîçìîæíîñòü êîìïèëяòîðó ïðîèçâîäèòü áîëåå ïîëíóþ îïòèìèçaöèþ. Îäíaêî íå- îáõîäèìî ó÷èòûâaòü, ÷òî äèðåêòèâa inline íîñèò äëя êîìïèëяòîða ðåêîìåíäa- òåëüíûé õaðaêòåð, è îí ìîæåò åé íå ïîñëåäîâaòü — íaïðèìåð, åñëè ìåòîä ñîäåð- æèò ñëîæíûå öèêëû èëè îáúяâëåí êaê âèðòóaëüíûé. Êðîìå òîãî, åñëè ïðîãðaììa èëè êîìïèëяòîð èñïîëüçóþò óêaçaòåëü ía ìåòîä èëè ôóíêöèþ, äîïîëíèòåëüíî áóäåò ñãåíåðèðîâaía èõ íåâñòðaèâaåìaя êîïèя. Åùå îäíèì ñîîáðaæåíèåì, êîòî- ðîå òðåáóåòñя ïðèíèìaòü âî âíèìaíèå, яâëяåòñя òî, ÷òî ìíîãèå îòëaä÷èêè èìåþò ïðîáëåìû ñî âñòðaèâaåìûìè ôóíêöèяìè.
Êîíñòðóêòîðû è äåñòðóêòîðû äåëaòü âñòðaèâaåìûìè íå ðåêîìåíäóåòñя, ïîñêîëü- êó â íèõ ôaêòè÷åñêè ïðèñóòñòâóåò êîä, ïîìåùaåìûé êîìïèëяòîðîì, è ðaçìåð ýòîãî êîäa ìîæåò áûòü âåñüìa çía÷èòåëüíûì (íaïðèìåð, â êîíñòðóêòîðå ïðîèç- âîäíîãî êëañña äîëæíû áûòü âûçâaíû êîíñòðóêòîðû âñåõ áaçîâûõ è âëîæåííûõ êëaññîâ).


1 Ïîä ïîëüçîâaòåëåì èìååòñя â âèäó ïðîãðaììèñò, èñïîëüçóþùèé êëaññ.

Ïåðåãðóæåííûå îïåðaöèè êëañña äîëæíû èìåòü èíòóèòèâíî ïîíяòíûé îáùåïðè- íяòûé ñìûñë (íaïðèìåð, íå ñëåäóåò çañòaâëяòü îïåðaöèþ + âûïîëíяòü ÷òî-ëèáî, êðîìå ñëîæåíèя èëè äîáaâëåíèя).  îñíîâíîì ïåðåãðóçêa îïåðaöèé èñïîëüçóåò- ñя äëя ñîçäaâaåìûõ ïðîãðaììèñòîì aðèôìåòè÷åñêèõ òèïîâ, a â îñòaëüíûõ ñëó÷a- яõ äëя ðåaëèçaöèè êaêèõ-ëèáî äåéñòâèé ñ îáúåêòaìè êëañña ïðåäïî÷òèòåëüíåå èñïîëüçîâaòü ìåòîäû, ïîñêîëüêó èì ìîæíî äaòü îñìûñëåííûå èìåía.


Åñëè êaêaя-ëèáî îïåðaöèя ïåðåãðóæåía, ñëåäóåò, åñëè âîçìîæíî, ïåðåãðóçèòü è aíaëîãè÷íûå îïåðaöèè, íaïðèìåð, +, += è ++ (êîìïèëяòîð ýòîãî aâòîìaòè÷åñêè íå ñäåëaåò). Ïðè ýòîì îïåðaöèè äîëæíû èìåòü òó æå ñåìaíòèêó, ÷òî è èõ ñòaíäaðò- íûå aíaëîãè.
Îñíîâîé ëþáîãî êëañña яâëяþòñя åãî nîíñòðónòîðû è äåñòðónòîðû. Êaê èçâåñò- íî, ïðè îòñóòñòâèè яâíî çaäaííûõ êîíñòðóêòîðîâ, êîíñòðóêòîða êîïèðîâaíèя è îïåðaöèè ïðèñâaèâaíèя êîìïèëяòîð ñîçäaåò èõ aâòîìaòè÷åñnè.
È êîíñòðóêòîð êîïèðîâaíèя, è îïåðaöèя ïðèñâaèâaíèя, ñîçäaâaåìûå ïî óìîë-
÷aíèþ, âûïîëíяþò ïîýëåìåíòíîå êîïèðîâaíèå èç îáëañòè-èñòî÷íèêa â îá- ëañòü-ïðèåìíèê. Åñëè îáúåêò ñîäåðæèò óêaçaòåëè, ýòî ïðèâåäåò ê òîìó, ÷òî ïîñëå êîïèðîâaíèя äâa ñîîòâåòñòâóþùèõ óêaçaòåëя ðaçíûõ îáúåêòîâ áóäóò ññûëaòüñя ía îäíó è òó æå îáëañòü ïaìяòè. Ïðè óíè÷òîæåíèè ïåðâîãî èç îáúåêòîâ ýòa ïa- ìяòü áóäåò îñâîáîæäåía, a ïîâòîðíaя ïîïûòêa îñâîáîäèòü åå ïðè óíè÷òîæåíèè âòîðîãî îáúåêòa ïðèâåäåò ê íåîïðåäåëåííîìó ïîâåäåíèþ ïðîãðaììû. Ïîýòîìó äëя êëaññîâ, ñîäåðæaùèõ ïîëя-óêaçaòåëè, ñëåäóåò âñåãäa яâíî îïðåäåëяòü êîíñò- ðóêòîð êîïèðîâaíèя è îïåðaöèþ ïðèñâaèâaíèя, âûïîëíяþùèå âûäåëåíèå ïaìя- òè ïîä äèíaìè÷åñêèå ïîëя îáúåêòa.
Êðîìå òîãî, äèíaìè÷åñnaя ïaìяòü, âûäåëåííaя â nîíñòðónòîðå îáúånòa, äîëxía îñâîáîxäaòüñя â åãî äåñòðónòîðå. Íåâûïîëíåíèå ýòîãî òðåáîâaíèя ïðèâîäèò ê óòå÷êaì ïaìяòè. Óäaëåíèå íóëåâîãî óêaçaòåëя áåçîïañíî (ïðè ýòîì íè÷åãî íå ïðîèñõîäèò), ïîýòîìó åñëè êîíñòðóêòîðû, êîíñòðóêòîðû êîïèðîâaíèя è îïåða- öèя ïðèñâaèâaíèя íaïèñaíû ïðaâèëüíî, ëþáîé óêaçaòåëü ëèáî ññûëaåòñя ía âû- äåëåííóþ îáëañòü ïaìяòè, ëèáî ðaâåí íóëþ, è ê íåìó ìîæíî ïðèìåíяòü delete áåç ïðîâåðêè.
Ðaçíèöa ìåæäó êîíñòðóêòîðîì êîïèðîâaíèя è îïåðaöèåé ïðèñâaèâaíèя çaêëþ-
÷aåòñя â òîì, ÷òî ïîñëåäíяя ðaáîòaåò â òîì ñëó÷aå, êîãäa îáúåêò-ïðèåìíèê óæå ñóùåñòâóåò, ïîýòîìó â íåé ïåðåä âûäåëåíèåì äèíaìè÷åñêîé ïaìяòè ñëåäóåò îñ- âîáîäèòü çaíяòóþ ðaíåå. Èç ýòîãî ñëåäóåò, ÷òî ïðè ðåaëèçaöèè îïåðaöèè ïðè- ñâaèâaíèя äëя êëaññîâ, ñîäåðæaùèõ ïîëя-óêaçaòåëè, íåîáõîäèìî ïðîâîäèòü ïðî- âåðêó ía ñaìîïðèñâaèâaíèå è â ýòîì ñëó÷aå îñòaâèòü îáúåêò áåç èçìåíåíèé. Íåîáõîäèìî òaêæå ïîìíèòü î òîì, ÷òî îïåðaöèя ïðèñâaèâaíèя äîëæía âîçâða- ùaòü ññûëêó ía êîíñòaíòó. Òaêèì îáðaçîì, îïðåäåëåíèå îïåðaöèè ïðèñâaèâaíèя äîëæíî èìåòü âèä:
Class X{
COnst X & OperatOr=(COnstX& r);

};
COnst X & X::OperatOr=(COnstX& r){ if(this != &r){

// Êîïèðîâaíèå


}
return *this;
}

Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   139   140   141   142   143   144   145   146   ...   232




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish