лекции (2008) (by Kravets) (1160829), страница 14
Текст из файла (страница 14)
1.IMPORT<ñïèñîê èìåí ÁÌ> (äåëàåò ïîòåíöèàëüíî âèäèìûâñå âñå èìåíà, êîòîðûåîáúÿâëåííû)VAR S:Stacks, Stack;FROM Stacks IMPORT Stack, PopÏóñòè èìååòñÿ èìÿ X - òîãäà ýòî ëèáî:- ñòàíäàðòíûé èäåíòèôèêàòîð- ëîêàëüíûé îáúåêò- èìÿ èç èìïîðòèðóåìîãî ìîäóëÿ, òîãäà èìååò âèä M.x- èìÿ èìïîðòèðîâàííîå ñ ïîìîùüþ èìïîðòà âî âòîðîé ôîðìå óñëîâèÿõ èñïîëüçîâàíèÿ ðàçíîðîäíûõ ìîäóëåé âîçìîæåí êîíôëèêòèìåí.
Âîçìîæåí ëèáî êîíôëèêò ìåæäó èìåíåì èç èìïîðòèðóåìîãî ìîäóëÿ è èìåíåì îïèñàííûì, â íàøåì ìîäóëå. Ìîäóà - 2 íåò ïåðåãðóçêè èìåí, òî åñòü â ïðåäåëàõ îäíîãî ìîäóëÿâñå èìåíà óíèêàëüíû.Åñëè åñòü êîíôëèêò ëîêàëüíîãî èìåíè ñ èìåíåì, ïîëó÷åííûì ïî uses,òî ïðèîðèòåò èìååò ëîêàëüíîå èìÿ.Äðóãîé âàðèàíò êîíôëèêòà - êîíôëèêò 2 èìïîðòèðóåìûõ èìåí, òîåñòüuses M1, M2;Ïðè÷åì â îáîèõ ìîäóëÿõ åñòü èìÿ X, òîãäà îáðàùåíèå ìîæåò áûòü òîëüêî ïî M1.x èëè M2.x78Ñàìûé íåïðèÿòíûé ìîìåíò - êîíôëèêò äâóõ ìîäóëåé ñ îäèíàêîâûìèíàçâàíèÿìè. Îäèí èç âàðèàíòîâ ðåøåíèÿ - èñïîëüçîâàíèå óíèêàëüíûõêîìáèíàöèé èìåí â èìåíàõ â ìîäóëÿõ.GL_..
äëÿ openGLglu.. äëÿ gluÌîäóëè äåëÿòñÿ íà ñåãìåíòû ýêñïîðòèðóåìûõ è íåâåäèìûõ èìåí. ÿçûêå Îáåðîí Âèðò îòêàçàëñÿ îò ïîíÿòèÿ ãëàâíîãî è ëîêàëüíîãîìîäóëÿ. Ïðåäïîëàãàåòñÿ, ÷òî ïðîãðàììà íà ÿçûêå Îáåðîí ïîãðóæåíà âêîíñîëüíûó ñèñòåìó. Åñòü ñïåöèàëüíàÿ êîììàíäà äëÿ çàãðóçêè ìîäóëÿM â ïàìÿòü, ïîñëå ÷åãî ïîëüçîâàòåëü ìîæåò âûïîëÿòü ëþáóþ ïðîöåäóðóèç ýòîãî ìîäóëÿ.Load M;M.p 1988 ãîäó ïîÿâèëñÿ Îáåðîí - 2.  ñàìîì ïåðâîì îáåðîíå áûëî âñåãî2 ìîäóëÿ - DEFINITION (àíàëîãè÷íî ìîäóëþ â ìîäóëà -2) è MODULE(ïðîñòî ìîäóëü). ïåðåñìîòðåííîé âåðñèè ÿçûêà îáåðîí, Íèêëàóñ Âèðò ðåøèë, ÷òîïðîãðàììû íà ÿçûêå îáåðîí íå ìîãóò áûòü íàïèñàííû â îòðûâå îò ñèñòåìû ïðîãðàììèðîâàíèÿ èëè îïåðàöèîííîé ñèñòåìû.
×òî ïðèâåëî ê òîìó, ÷òî ìîäóëü îïðåäåëåíèÿ ìîæåò áûòü ñãåíåðèðîâàí àâòîìàòè÷åñêè,íà îñíîâå ìîäóëÿ ñ îïèñàíèÿìè.  ìîäóëå âñå, ÷òî òðåáóåòñÿ ïîìåñòèòü âýêñïîðòèðóåìîå, ïîìå÷àåòñÿ çâåçäî÷êîé, òî åñòü åñëè òðåáóåòñÿ ýêñïîðòèðîâàòü èìÿ, òî åãî îïðåäåëåíèå ïîìå÷àåòñÿ çâåçäî÷êîé.À ìîäóëü îïðåäåëåíèÿ ìîæåò áûòü ñãåíåðèðîâàí àâòîìàòè÷åñêè íàîñíîâå èñõîäíîãî ìîäóëÿ ñ ïîìîùüþ ñïåöèàëüíûõ óòèëèò. äàííîì ñëó÷àå, âîçíèêàåò ïðîáëåìà ñ äîñòóïîì íà ÷òåíèå / çàïèñüê ñòðóêòóðàì. Äëÿ ñïåöèôèêàöèè òîãî, ÷òî ïåðåìåííàÿ ýêñïîðòèðóåòñÿ òîëüêî íà ÷òåíèå ñëóæèò ñèìâîë *-. Ïðè ýòîì inline ïðîöåäóð íåòâïðèíöèïå.Äàëåå â ÿýûêå îáåðîí îñòàëîñü òîëüêî åäèíñòâåííàÿ ôîðìà èìïîðòàIMPORT <ñïèñîê èìåí ìîäóëåé>Òî åñòüIMPORT InOut;InOut.writeln;Òî åñòü íåò íåïîñðåäñòâåííîé âèäèìîñòè ãëîáàëüíûõ èìïîðòèðóåìûõèìåí.Ïóíêò 3.
Ëîãè÷åñêèå ìîäóëå â ñëó÷àå ÿçûêà Àäà.79package èìÿ isîáúÿâëåíèÿ;end èìÿ;package body èìÿ isîïðåäåëåíèÿend èìÿ;Ïåðâàÿ ÷àñòü íàçûâàåòñÿ ïàêåòîì, à âòîðàÿ - òåëîì ïàêåòà. ÿçûêå Àäà ïàêåòû ìîãóò áûòü âëîæåííû äðóã â äðóãà. Ñ÷èòàåòñÿ÷òî åñòü ñïåöèàëüíûé ïàêåò STANDARD.packade STANDARD isîáúÿâëåíèÿ èç STANDARDîáúÿâëåíèÿ ïîëüçîâàòåëüñêèé ïàêåòîâend STANDARD; ìîäóëà - 2 çàãðóçêà ìîäóëÿ - çàãðóçêà ñîîòâåñòâóþùåé òàáëèöèèìåí, â Àäà âñ ñëîæíåå.STANDARD...package P ispackage P1 isend P1;end P;package PP ispackage P2 is...end P2;package P3;...end P3;end PP;Âèäèìîñòü òåë ïàêåòîâ òî÷íî òàêàÿ æå ÷òî è ó âëîæåííîñòåé òåë îáúÿâëåíèé.
Âñåãäà âèäèìû èìåíà èç ïàêåòà STANDARD. Èìåíà ñòàíîâÿòñÿ âèäèìû ïîñëå îáúÿâëåíèÿ è ïåðåñòàþò áûòü âèäèìû ïî îêîí÷àíèèñïåöèôèêàöèè ïàêåòà. Âñå èìåíà ñòàíîâÿòñÿ âèäèìûìè ïîòåíöèàëüíî,àíàëîãè÷íî ÿçûêó Ìîäóëà.80Ëåêöèÿ 2011.11.2008Îñíîâíàÿ âîçìîæíîñòü ëîãè÷åñêîãî ìîäóëÿ - âîçìîæíîñòü îïðåäåëåíèåíîâîãî òèïà äàííûõ.Áèáëèîòå÷íûé ìîäóëü - Ìîäóëà - 2Ìîäóëü - ÎáåðîíUnit - DelphiÏðè ýòîì â ÿçûêå Àäà âîçìîæíû âëîæåííûå ìîäóëè è âîçìîæíàñëîæíàÿ ñòðóêòðà âëîæåííîñòè ñïåöèôèêàöèè ïàêåòîâ. Ïðè÷åì âëîæåííîñòü òåë ïàêåòîâ èìååò òàêóþ æå âëîæåííîñòü, ÷òî è ñïåöèôèêàöèÿ.Ìîäóëü íå îáÿçàì èìåòü òåëî, íî âñåãäà îáÿçàí èìåòü èíòåðôåéñ.
Íàïðèìåð, åñëè ìîäóëü èìååò òîëüêî îïðåäåëåíèÿ îáúåêòîâ äàííûõ èëèêîíñòàíò, òî implementation ÷àñòü íå òðåáóåòñÿ.package P ispackage P1 ispackage P12 isend P12end P1Òîãäà òåëà âëîæåííû àíàëîãè÷íî.package body P ispackage body P1 ispackage body P12 ispackage AUX is....end AUXpackage body AUX is...end AUXend P12end P1end PÈìååòñÿ 2 ïîäõîäà ê ïðîåêòèðîâàíèþ ïðîãðàìì.Ïåðâûé - ñâåðõó âíèç, òî åñòü íà÷èíàòü ñ ãëàâíîãî ìîäóëÿ (ñàìîãî àáñòðàêòíîãî) è èäòè âíèç. Íåäîñòàòîê - äî ïðîãðàììèðîâàíèÿ ìîäóëÿ ñàìîãî íèæíåãî óðîâíÿ íå ïîëó÷àåòñÿ çàïóñòèòü ñèñòåìó. (Top - bottom).81Âòîðîé - ñíèçó ââåðõ (Bottom-up).Äëÿ óïðîùåíèå ðàáîòû áûëà ââåäåíà êîíöåïöèÿ âëîæåííûõ ìîäóëåé,òî åñòü íå äëÿ êàæäîãî ìîäóëÿ íà äàííîé ñòóïåíè èåðàðõèè òðóáåþòñÿíå âñå ìîäóëè èç íèæíåãî óðîâíÿ èåðàðõèè. Ýòî ñèëüíî óïðîùàåò ïðîåêòèðîâàíèÿ ïðîãðàììû, íî ñèëüíî óñëîæíÿåò ÿçûê.Ïåðåãóçêà èëè ïîëèìîðôèçì - îäíîìó èìåíè ñîîòâåòñòâóåò íåñêîëüêîîáúÿâëåíèÿ.
Âñå òðàäèöèîííûå ßÏ ïðèäåðæèâàþòñÿ èäåè ÷òî â îäíîéîáëàñòè âèäèìîñòè îäíîìó èìåíè ñîîòâåñòâóåò òîëüêî åäèíñòâåííûå îáúåêò.  ñîâðåìåííûõ ßÏ ïîëèìîðôèçì ðàñïîñòðàíÿåòñÿ òîëüêî íà èìåíàïðîöåäóð è ôóíêöèé.Íå èìåþò ïåðåãðóçêè òîëüêî "Âèðòîâñêèå"ßÏ - Îáåðîí è Ìîäóëà. Âÿçûêå Àäà åñòü ïåðåãðóçêà ïðîöåäóð è ôóíêöèé, ïðè÷åì ó÷èòûâàþòñÿ èâîçâðàùàåìûå çíà÷åíèÿ. Òî åñòü äîïóñòèìà òàêàÿ ïåðåãðóçêà:function P:boolean;function P:integer; java, C++ è àíàëàãè÷íûõ ßÏ òàêàÿ ïåðåãðóçêà íåäîïèñòèìà. Äàëååâîçíèêàåò âîïðîñ è ïåðåãðóçêå ñòàíäàðòíûõ îïåðàöèé. Òóò ñóùåñòâóåò 2òå÷åíèÿ. ïåðâîå âõîäèò Àäà, Ñ#, Ñ++ ïîçâîëÿþùèå ïåðåãðóæàòü ñòàíäàðîòíûå îïåðàöèè. Òðåáîâàíèå ïåðåãðóçêè ñòàíäàðòíûõ îïåðàöèé áûëî âñòàíäàðòå Àäà, ïðè÷åì ïåðåãðóçêà íå äîëæíà áûëà âëèÿòü íà ñèíòàêñè÷åñêèé àíàëèç.Òî åñòü åñëè ïåðåãðóçêà íå äîëæíà áûëà âëèÿòü íà ìåñòíîñòü îïåðàöèé.Êëàññè÷åñêèé ïðèìåð ïåðåãðóçêè îïåðàòîðîâ - ìàòðè÷íàÿ àðèôìåòèêà. Òî åñòüpackage Matrices istype Matrix is ...;function"+"(M1,M2: Matrix):return Matrix;.....end Matrices;x,y,z:Matrix;z:=x + y;z:="+"(x,y)Îäíàêî âñå èìåíà ÿâëÿþòñÿ ëèøü ïîòåíöèàëüíî âèäèìûìè, òî åñòüòàêîé êîä íå âåðåí.
Òðåáóåòñÿ ñïåöèôèöèðîâàòü ïàêåò, òî åñòü ïèñàòüòàê: x,y,z:Matrices.Matrix;z:=Matrices."+"(x,y)82Òàêèì îáðàçîì, ìû ïðèõîäèì ê òðåáîâàíèþ êîíñòðóêöèè, êîòîðàÿñíèìàåò ïîòåíöèàëüíóþ âèäèìîñòü. Òàêîé êîíñòðóêöèåé ÿâëÿåòñÿ èìåíîâàííûé èìïîðò, êîòîðûé ñíèìàåò ïîòåíöèàëüíóþ âèäèìîñòü, åñëè íåòêîíôëèêòà èìåí.use <ñïèñîê èìåí - îáúåêòîâ>;Òî åñòü âîçìîæíî íàïèñàòü òàê.use Matrices;x,y,z:Matrix;z:=x + y;Âñå ïðîáëåìû íà÷èíàþòñÿ, êîãäà ïîÿâëÿåòñÿ êîíôëèêò èìåí. È â îáùåì ñëó÷àå ãëàâíûå ïðîáëåìû ñâÿçàííû ñî ñëîæíîé ñòðóêòóðîé ïðîñòðàíñòâà èìåí, è ñ âîçìîæíîñòüþ èñïîëüçîâàíèÿ ïðîöåäóðû íåêîíòðîëèðóåìîãî èìïîðòà (use - äåëàåò âñþ ñïåöèôèêàöèþ ïàêåòà íåïîñðåäñòâåííî âèäèìîé).Òàáëèöà èìåí ÿçûêà Ìîäóëà - 2 íàìíîãî ïðîùå ÷åì òàáëèöà èìåíÿçûêà Àäà.
 Ìîäóëà - 2 òðåáóåòñÿ òîëüêî ñòåê òàáëèö, â ÿçûêå Àäàñòåê îñòàåòñÿ,íî êàæäàÿ èç òàáëèö â ñòåêå ìîæåò ñîäåðæàòü â ñåáå äðóãèåïîäòàáëèöû.Ïóíêò 4. Èíêàïñóëÿöèÿ è àáñòðàêòíûå òèïû äàííûõ.Ïîíÿòèå àáñòðàêòíîãî òèïà äàííûõ âîøëî â îáèõîä âìåñòå ñ ïîíÿòèåìèíêàïñóëÿöèè. Àáñòðàêòíûé òèï äàííûõ - òèï äàííûõ, ó êîòîðîãî âñÿñòðóêòóðà èíêàïñóëèðîâàííà.Ãîâîðÿò ÷òî îáúåêòíîîðèåíòèðîâàííûé ÿçûê - ÿçûê â êîòîðîì èìååòñÿ 3 ïîíÿòèÿ - èíêàïñóëÿöèÿ, íàñëåäîâàíèå è äèíàìè÷åñêèé ïîëèìîðôèçì. Èíêàïñóëÿöèÿ - íåêîòîðîå ñêðûòèå äåòàëåé.
Îñíîâíàÿ çàäà÷à ïðèïðîåêòèðîâàíèè ñòðóêòóðû ïðîãðàììû - ïðîåêòèðîâàíèÿ èíòåðôåéñà,äëÿ ÷åãî òðåáóåòñÿ èìåííî ìåõàíèõ èíêàïñóëÿöèè.Ïîíÿòèå åäèíèöû çàùèòû ïî÷òè âî âñåõ ßÏ - òèï. Òî åñòü âñå îáúåêòûîäíîãî òèïà äàííûõ îáëàäàþò îäèíàêîâûìè ñâîéñòâàìè ñ òî÷êè çðåíèÿçàøèòû äàííûõ. Àòîìîì æå çàùèòû ÿâëÿåòñÿ ëèáî òèï öåëèêîì, ëèáî÷àñòü òèïà - ïåðåìåííàÿ, ìåòîä è òàê äàëåå.  ÿçûêàõ Ìîäóëà - 2 èëèÀäà àòîìîì çàùèòû ÿâëÿåòñÿ òèï, òî åñòü ëèáî âñå çàêðûâàåòñÿ ëèáî âñåîòêðûâàåòñÿ. Òî åñòü òðåáóåòñÿ çàêðûâàòü âñå ÷ëåíû äàííûõ. ÿçûêàõ Îáåðîí è ÿçûêàõ ñ êëàññàìè àòîìîì çàùèòû ÿâëÿåòñÿ ÷ëåíêëàññà.83Ðàññìîòðèì ïðèìåð íà ìîäóëà - 2.DEFINITION MODULE M;....END M; EMPLEMENTATION MODULE M;....END M; Àäà òàê æå åñòü ñïåöèôèêàöèÿ è òåëî ïàêåòà.
Âñå ÷òî îáúÿâëåííî âìîäóëå îïðåäåëåíèÿ âèäíî èçâíå, âñå ÷òî îáúÿâëåíî â ìîäóëå ðåàëèçàöèèçàêðûòî.Îáåðîí.TYPE T* = RECORDv1:T1;v2:T2;end;Ñ ýòîé òî÷êè çðåíèÿ îáåðîí ïîõîä íà ÿçûêè ñ êëàññîâîé ñòðóêòóðîé,òî åñòü èìïîðòèðóåòñÿ èìÿ òèïà, íî ïîëÿ äàííûõ ÿâëÿþòñÿ çàêðûòûìè.Èòàê àáñòðàêòíûé òèï äàííûõ â îáùåì ñëó÷àå - ýòî ïðîñòî ìíîæåñòâîîïåðàöèé. Ðàññìîòðèì ðåàëèçàöèè ÀÒÄ. ÿçûêå Ìîäóëà - 2 ÀÒÄ îïðåäåëÿåòñÿ êàê ñêðûòûé òèï äàííûõ.Îíîáúÿâëåí â ìîäóëå îïðåäåëåíèÿ ïðîñòî êàê TYPE T;.Òî åñòü íàïðìèåðDEFINITION MODULE stacks;TYPE STACK;PROCUDERE Init (var s:stack);PROCUDURE Push (var s:stack, x:integer);....END stacks;Íàä òàêèì òèïîì äàííõ ïðèìåíèìû îïåðàöèè, îïðåäåëåííûå â ìîäóëå, à òàê äå îïåðàöèè ïðèñâàíèâàíèÿ è ñðàâíåíèÿ íà ðàâåíñòâî / íåðàâåíñòâî.
Ïðè÷åì ñåìàíòèêà ýòèõ îïåðàöèé èñêëþ÷èòåëüíî ïîâåðõíîñòíàÿ, òî åñòü ïðîèçâîäèòñÿ èñêëþ÷èòåëüíî ïîâåðõíîñòíîå êîïèðîâàíèÿ.Ñòðóêòóðû ÀÒÄ äîëæíà áûòü îïèñàííà âíóòðè ìîäóëÿ ðåàëèçàöèè, ïðè÷åì íà îïðåäåëåíèå íàêëàäûâàþòñÿ íåêîòîðûå îãðàíè÷åíèÿ.Òàêèì îáðàçîì, äëÿ âñåõ îáúåêòîâ ÀÒÄ èñïîëüçóåòñÿ ðåôåðåíöàëüíàÿ ìîäåëü äîñòóïà.
Íàïèøåì îïðåäåëåíèå ñòåêà.TYPE PLINK = POINTER TO LINK;TYPE LINK = RECORD84NEXT:PLINK;INF:INTEGER:END: Stack = plink;Òàêèì îáðàçîì, â ëþáîì ñëó÷àå âñå îáúåêòû ÀÒÄ - óêàçàòåëè íà ÷òî ëèáî.Òàêèì îáðàçîì Ìîäóëà - 2 çàñòàâëÿåò ïðîãðàììèðîâàòü â òåðìèíàõÀÒÄ è áîëåå òîãî â òåðìèíàõ ðåôåðåíöèàëüíîé ìîäåëè äàííûõ.85Ëåêöèÿ 21.13.11.2008Ññûëî÷íàÿ ìîäåëü ðàáîòû áûëà ñâÿçàííà ñ ìåõàíèçìîì ðàçäåëüíîé êîìïèëÿöèè è ïðèíöèïîì ÐÎÐÈ.Ïðèíöèï ÐÎÐÈ - ðàçäåëåíèå îïðåäåëåíèÿ, ðåàëèçàöèè è èñïîëüçîâàíèÿ. ñòðóêòóðå òàêèõ ßÏ, êàê ìîäóëà - 2, Àäà, Delphi, ÷åòêî âèäíî, ÷òîîïðåäåëåíèå, ðåàëèçàöèÿ è èñïîëüçîâàíèÿ ÷åòêî ðàçäåëåíû.