В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633), страница 26
Текст из файла (страница 26)
 ýòîì ñëó÷àå íåêîòîðûå èç êîìïîíåíò òð¼õàäðåñíîãî êîäà ìîãóò íå èñïîëüçîâàòüñÿ. Íàïðèìåð, óñëîâíûé îïåðàòîð8.2. Òð¼õàäðåñíûé êîä185if A > B then S1 else S2ìîæåò áûòü ïðåäñòàâëåí ñëåäóþùèì êîäîì:t := A - BJGT t, S2...Çäåñü JGT äâóìåñòíàÿ îïåðàöèÿ óñëîâíîãî ïåðåõîäà, íåâûðàáàòûâàþùàÿ ðåçóëüòàòà.Ðàçáèåíèå àðèôìåòè÷åñêèõ âûðàæåíèé è îïåðàòîðîâóïðàâëåíèÿ äåëàåò òð¼õàäðåñíûé êîä óäîáíûì ïðè ãåíåðàöèè ìàøèííîãî êîäà è îïòèìèçàöèè. Èñïîëüçîâàíèå èì¼íïðîìåæóòî÷íûõ çíà÷åíèé, âû÷èñëÿåìûõ â ïðîãðàììå, ïîçâîëÿåò ëåãêî ïåðåóïîðÿäî÷èâàòü òð¼õàäðåñíûé êîä.t1t2t3t4t5a:=:=:=:=:=:=-cb * t1-cb * t3t2 + t4t5t1t2t5aà:=:=:=:=-cb * t1t2 + t2t5áÐèñ. 8.3.Ïðåäñòàâëåíèÿ ñèíòàêñè÷åñêîãî äåðåâà è ãðàôà ðèñ.
8.1â âèäå òð¼õàäðåñíîãî êîäà äàíî íà ðèñ. 8.3, à, è 8.3, á,ñîîòâåòñòâåííî.Òð¼õàäðåñíûé êîä ýòî àáñòðàêòíàÿ ôîðìà ïðîìåæóòî÷íîãî êîäà.  ðåàëèçàöèè òð¼õàäðåñíûé êîä ìîæåò áûòüïðåäñòàâëåí çàïèñÿìè ñ ïîëÿìè äëÿ îïåðàöèè è îïåðàíäîâ.Ðàññìîòðèì òðè ñïîñîáà ðåàëèçàöèè òð¼õàäðåñíîãî êîäà:÷åòâ¼ðêè, òðîéêè è êîñâåííûå òðîéêè.×åòâ¼ðêà ýòî çàïèñü ñ ÷åòûðüìÿ ïîëÿìè, êîòîðûå áóäåì íàçûâàòü op, arg1, arg2 è result. Ïîëå op ñîäåðæèòêîä îïåðàöèè.
 îïåðàòîðàõ ñ óíàðíûìè îïåðàöèÿìè òèïàx := −y èëè x := y ïîëå arg2 íå èñïîëüçóåòñÿ.  íåêîòîðûõ186Ãëàâà 8. Ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììûîïåðàöèÿõ (òèïà ¾ïåðåäàòü ïàðàìåòð¿) ìîãóò íå èñïîëüçîâàòüñÿ íè arg2, íè result. Óñëîâíûå è áåçóñëîâíûå ïåðåõîäûïîìåùàþò â result ìåòêó ïåðåõîäà. Íà ðèñ. 8.4, à, ïðèâåäåíû ÷åòâ¼ðêè äëÿ îïåðàòîðà ïðèñâàèâàíèÿ a := b∗−c+b∗−c.Îíè ïîëó÷åíû èç òð¼õàäðåñíîãî êîäà íà ðèñ.
8.3, à.op arg1 arg2 result(0) ct1(1) *bt1t2(2) ct3(3) *bt3t4(4) +t2t4t5(5) := t5aop arg1 arg2(0) c(1) *b(0)(2) c(3) *b(2)(4) + (1)(3)(5) :=a(4)à) ÷åòâ¼ðêèá ) òðîéêèÐèñ. 8.4.Îáû÷íî ñîäåðæèìîå ïîëåé arg1, arg2 è result ýòî óêàçàòåëè íà âõîäû òàáëèöû ñèìâîëîâ äëÿ èì¼í, ïðåäñòàâëÿåìûõ ýòèìè ïîëÿìè. Âðåìåííûå èìåíà âíîñÿòñÿ â òàáëèöóñèìâîëîâ ïî ìåðå èõ ãåíåðàöèè.×òîáû èçáåæàòü âíåñåíèÿ íîâûõ èì¼í â òàáëèöó ñèìâîëîâ, íà âðåìåííîå çíà÷åíèå ìîæíî ññûëàòüñÿ, èñïîëüçóÿïîçèöèþ âû÷èñëÿþùåãî åãî îïåðàòîðà.
 ýòîì ñëó÷àå òð¼õàäðåñíûå îïåðàòîðû ìîãóò áûòü ïðåäñòàâëåíû çàïèñÿìèòîëüêî ñ òðåìÿ ïîëÿìè: op, arg1 è arg2, êàê ýòî ïîêàçàíîíà ðèñ. 8.3, á. Ïîëÿ arg1 è arg2 ýòî ëèáî óêàçàòåëè íà òàáëèöó ñèìâîëîâ (äëÿ èì¼í, îïðåäåë¼ííûõ ïðîãðàììèñòîì,èëè êîíñòàíò), ëèáî óêàçàòåëè íà òðîéêè (äëÿ âðåìåííûõçíà÷åíèé). Òàêîé ñïîñîá ïðåäñòàâëåíèÿ òð¼õàäðåñíîãî êîäà íàçûâàþò òðîéêàìè. Òðîéêè ñîîòâåòñòâóþò ïðåäñòàâëåíèþ ñèíòàêñè÷åñêîãî äåðåâà èëè ÎÀà ñ ïîìîùüþ ìàññèâàâåðøèí.×èñëà â ñêîáêàõ ýòî óêàçàòåëè íà òðîéêè, à èìåíà ýòî óêàçàòåëè íà òàáëèöó ñèìâîëîâ. Íà ïðàêòèêå èíôîðìàöèÿ, íåîáõîäèìàÿ äëÿ èíòåðïðåòàöèè ðàçëè÷íîãî òèïàâõîäîâ â ïîëÿ arg1 è arg2, êîäèðóåòñÿ â ïîëå op èëè äîïîë-8.2.
Òð¼õàäðåñíûé êîä187op arg1 arg2(0) [ ]=xi(1) := (0)yop arg1 arg2(0) =[ ]yi(1) :=x(0)à) x[i] := yá ) x := y[i]Ðèñ. 8.5.íèòåëüíûõ ïîëÿõ. Òðîéêè ðèñ. 8.4, á, ñîîòâåòñòâóþò ÷åòâ¼ðêàì ðèñ. 8.4, à.Äëÿ ïðåäñòàâëåíèÿ òðîéêàìè òð¼õìåñòíîé îïåðàöèè òèïà x[i] := y òðåáóåòñÿ äâà âõîäà, êàê ýòî ïîêàçàíî íàðèñ. 8.5, à, ïðåäñòàâëåíèå x := y[i] äâóìÿ îïåðàöèÿìè ïîêàçàíî íà ðèñ. 8.5, á.Òð¼õàäðåñíûé êîä ìîæåò áûòü ïðåäñòàâëåí íå ñïèñêîì òðîåê, à ñïèñêîì óêàçàòåëåé íà íèõ.
Òàêàÿ ðåàëèçàöèÿ îáû÷íî íàçûâàåòñÿ êîñâåííûìè òðîéêàìè. Íàïðèìåð,òðîéêè ðèñ. 8.4, á, ìîãóò áûòü ðåàëèçîâàíû òàê, êàê ýòîèçîáðàæåíî íà ðèñ. 8.6.(0)(1)(2)(3)(4)(5)îïåðàòîð(14)(15)(16)(17)(18)(19)(14)(15)(16)(17)(18)(19)op**+:=arg1cbcb(15)aarg2(14)(16)(17)(18)Ðèñ. 8.6.Ïðè ãåíåðàöèè îáúåêòíîãî êîäà êàæäîé ïåðåìåííîé,êàê âðåìåííîé, òàê è îïðåäåë¼ííîé â èñõîäíîé ïðîãðàììå, íàçíà÷àåòñÿ ïàìÿòü ïåðèîäà èñïîëíåíèÿ, àäðåñ êîòîðîéîáû÷íî õðàíèòñÿ â òàáëèöå ãåíåðàòîðà êîäà. Ïðè èñïîëüçîâàíèè ÷åòâ¼ðîê ýòîò àäðåñ ëåãêî ïîëó÷èòü ÷åðåç ýòó òàáëèöó.188Ãëàâà 8. Ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììûÁîëåå ñóùåñòâåííî ïðåèìóùåñòâî ÷åòâ¼ðîê ïðîÿâëÿåòñÿ â îïòèìèçèðóþùèõ êîìïèëÿòîðàõ, êîãäà ìîæåò âîçíèêíóòü íåîáõîäèìîñòü ïåðåìåùàòü îïåðàòîðû. Åñëè ïåðåìåùàåòñÿ îïåðàòîð, âû÷èñëÿþùèé x, íå òðåáóåòñÿ èçìåíåíèéâ îïåðàòîðå, èñïîëüçóþùåì x.
 çàïèñè æå òðîéêàìè ïåðåìåùåíèå îïåðàòîðà, îïðåäåëÿþùåãî âðåìåííîå çíà÷åíèå,òðåáóåò èçìåíåíèÿ âñåõ ññûëîê íà ýòîò îïåðàòîð â ìàññèâàõ arg1 è arg2. Èç-çà ýòîãî òðîéêè òðóäíî èñïîëüçîâàòü âîïòèìèçèðóþùèõ êîìïèëÿòîðàõ. ñëó÷àå ïðèìåíåíèÿ êîñâåííûõ òðîåê îïåðàòîð ìîæåòáûòü ïåðåìåù¼í ïåðåóïîðÿäî÷èâàíèåì ñïèñêà îïåðàòîðîâ.Ïðè ýòîì íå íàäî ìåíÿòü óêàçàòåëè íà op, arg1 è arg2.Ýòèì êîñâåííûå òðîéêè ïîõîæè íà ÷åòâ¼ðêè.
Êðîìå òîãî, ýòè äâà ñïîñîáà òðåáóþò ïðèìåðíî îäèíàêîâîé ïàìÿòè.Êàê è â ñëó÷àå ïðîñòûõ òðîåê, ïðè èñïîëüçîâàíèè êîñâåííûõ òðîåê âûäåëåíèå ïàìÿòè äëÿ âðåìåííûõ çíà÷åíèé ìîæåò áûòü îòëîæåíî íà ýòàï ãåíåðàöèè êîäà. Ïî ñðàâíåíèþñ ÷åòâ¼ðêàìè ïðè èñïîëüçîâàíèè êîñâåííûõ òðîåê ìîæíîñáåðå÷ü ïàìÿòü, åñëè îäíî è òî æå âðåìåííîå çíà÷åíèå èñïîëüçóåòñÿ áîëåå îäíîãî ðàçà. Íàïðèìåð, íà ðèñ. 8.6 ìîæíîîáúåäèíèòü ñòðîêè (14) è (16), ïîñëå ÷åãî ìîæíî îáúåäèíèòü ñòðîêè (15) è (17).8.3.
Ëèíåàðèçîâàííûå ïðåäñòàâëåíèÿ êà÷åñòâå ïðîìåæóòî÷íûõ ïðåäñòàâëåíèé âåñüìà ðàñïðîñòðàíåíû ëèíåàðèçîâàííûå ïðåäñòàâëåíèÿ äåðåâüåâ.Ëèíåàðèçîâàííîå ïðåäñòàâëåíèå ïîçâîëÿåò îòíîñèòåëüíîëåãêî õðàíèòü ïðîìåæóòî÷íîå ïðåäñòàâëåíèå âî âíåøíåéïàìÿòè è îáðàáàòûâàòü åãî. Íàèáîëåå ðàñïðîñòðàí¼ííîéôîðìîé ëèíåàðèçîâàííîãî ïðåäñòàâëåíèÿ ÿâëÿåòñÿ ïîëüñêàÿ çàïèñü ïðåôèêñíàÿ (ïðÿìàÿ) èëè ïîñòôèêñíàÿ(îáðàòíàÿ).Ïîñòôèêñíàÿ çàïèñü ýòî ñïèñîê âåðøèí äåðåâà, â êîòîðîì êàæäàÿ âåðøèíà ñëåäóåò (ïðè îáõîäå ñíèçó-ââåðõñëåâà-íàïðàâî) íåïîñðåäñòâåííî çà ñâîèìè ïîòîìêàìè.
Äå-8.3. Ëèíåàðèçîâàííûå ïðåäñòàâëåíèÿ189ðåâî íà ðèñ. 8.1, à, â ïîñòôèêñíîé çàïèñè ìîæåò áûòü ïðåäñòàâëåíî ñëåäóþùèì îáðàçîì:a b c - * b c - * + := ïîñòôèêñíîé çàïèñè âåðøèíû ñèíòàêñè÷åñêîãî äåðåâà ÿâíî íå ïðèñóòñòâóþò. Îíè ìîãóò áûòü âîññòàíîâëåíû èçïîðÿäêà, â êîòîðîì ñëåäóþò âåðøèíû è èç ÷èñëà îïåðàíäîâñîîòâåòñòâóþùèõ îïåðàöèé. Âîññòàíîâëåíèå âåðøèí àíàëîãè÷íî âû÷èñëåíèþ âûðàæåíèÿ â ïîñòôèêñíîé çàïèñè ñ èñïîëüçîâàíèåì ñòåêà. ïðåôèêñíîé çàïèñè ñíà÷àëà óêàçûâàåòñÿ îïåðàöèÿ, àçàòåì å¼ îïåðàíäû. Íàïðèìåð, äëÿ ïðèâåä¼ííîãî âûøå âûðàæåíèÿ èìååì:= a + * b - c * b - cÐàññìîòðèì äåòàëüíåå îäíó èç ðåàëèçàöèé ïðåôèêñíîãî ïðåäñòàâëåíèÿ Ëèäåð [12]. Ëèäåð ýòî àááðåâèàòóðàîò ¾ËÈíåàðèçîâàííîå ÄÅÐåâî¿. Ýòî ìàøèííî-íåçàâèñèìàÿïðåôèêñíàÿ çàïèñü.  Ëèäåðå ñîõðàíÿþòñÿ âñå îáúÿâëåíèÿè êàæäîìó èç íèõ ïðèñâàèâàåòñÿ ñâîé óíèêàëüíûé íîìåð,êîòîðûé èñïîëüçóåòñÿ äëÿ ññûëêè íà îáúÿâëåíèå.
Ðàññìîòðèì ïðèìåð.module M;var X,Y,Z: integer;procedure DIF(A,B:integer):integer;var R:integer;begin R:=A-B;return(R);end DIF;begin Z:=DIF(X,Y);end M.Ýòîò ôðàãìåíò èìååò ñëåäóþùèé îáðàç â Ëèäåðå.program 'M'var intvar int190Ãëàâà 8. Ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììûvar intprocbody proc int int end intvar intbegin assign var 1 7 endint int mi par 1 5 end par 1 6 endresult 0 int var 1 7 endreturnendbegin assign var 0 3 end inticall 0 4 int var 0 1 endint var 0 2 end endendÐàññìîòðèì åãî áîëåå äåòàëüíî:program 'M'Èìÿ ìîäóëÿ íóæíî äëÿ ðåäàêòîðàñâÿçåé.var intÝòî îáðàç ïåðåìåííûõ X, Y, Z;var intïåðåìåííûì X, Y, Z ïðèñâàèâàþòñÿvar intíîìåðà 1, 2, 3 íà óðîâíå 0.procbody procÎáúÿâëåíèå ïðîöåäóðû ñ äâóìÿint int endöåëûìè ïàðàìåòðàìè, âîçâðàùàþùåé öåëîå.intÏðîöåäóðà ïîëó÷àåò íîìåð 4 íàóðîâíå 0 è ïàðàìåòðû èìåþò íîìåðà5, 6 íà óðîâíå 1.var intÏåðåìåííàÿ R èìååò íîìåð 7 íàóðîâíå 1.beginÍà÷àëî òåëà ïðîöåäóðû.assignÎïåðàòîð ïðèñâàèâàíèÿ.var 1 7 endËåâàÿ ÷àñòü ïðèñâàèâàíèÿ (R).intÒèï ïðèñâàèâàåìîãî çíà÷åíèÿ.int miÖåëîå âû÷èòàíèå.par 1 5 endÓìåíüøàåìîå (A).par 1 6 endÂû÷èòàåìîå (B).result 0Ðåçóëüòàò ïðîöåäóðû óðîâíÿ 0.intÐåçóëüòàò èìååò öåëûé òèï.var 1 7 endÐåçóëüòàò ïåðåìåííàÿ R.returnÎïåðàòîð âîçâðàòà.8.4.
Âèðòóàëüíàÿ ìàøèíà Javaendbeginassignvar 0 3inticall 0int varint varendendend40 1 end0 2 end191Êîíåö òåëà ïðîöåäóðû.Íà÷àëî òåëà ìîäóëÿ.Îïåðàòîð ïðèñâàèâàíèÿ.Ëåâàÿ ÷àñòü ïåðåìåííàÿ Z.Òèï ïðèñâàèâàåìîãî çíà÷åíèÿ.Âûçîâ ëîêàëüíîé ïðîöåäóðû DIF.Ôàêòè÷åñêèå ïàðàìåòðû Xè Y.Êîíåö âûçîâà.Êîíåö òåëà ìîäóëÿ.8.4. Âèðòóàëüíàÿ ìàøèíà JavaÏðîãðàììû íà ÿçûêå Java òðàíñëèðóþòñÿ â ñïåöèàëüíîå ïðîìåæóòî÷íîå ïðåäñòàâëåíèå, êîòîðîå çàòåì èíòåðïðåòèðóåòñÿ òàê íàçûâàåìîé ¾âèðòóàëüíîé ìàøèíîé Java¿.Âèðòóàëüíàÿ ìàøèíà Java ïðåäñòàâëÿåò ñîáîé ñòåêîâóþìàøèíó: îíà íå èìååò ïàìÿòè ïðÿìîãî äîñòóïà, âñå îïåðàöèè âûïîëíÿþòñÿ íàä îïåðàíäàìè, ðàñïîëîæåííûìè íàâåðõóøêå ñòåêà.
×òîáû, íàïðèìåð, âûïîëíèòü îïåðàöèþ ñó÷àñòèåì êîíñòàíòû èëè ïåðåìåííîé, èõ ïðåäâàðèòåëüíîíåîáõîäèìî çàãðóçèòü íà âåðõóøêó ñòåêà. Êîä îïåðàöèè âñåãäà îäèí áàéò. Åñëè îïåðàöèÿ èìååò îïåðàíäû, îíè ðàñïîëàãàþòñÿ â ñëåäóþùèõ áàéòàõ.Ê ýëåìåíòàðíûì òèïàì äàííûõ, ñ êîòîðûìè ðàáîòàåòìàøèíà, îòíîñÿòñÿ short, integer, long, float, double (âñåçíàêîâûå).8.4.1. Îðãàíèçàöèÿ ïàìÿòèÌàøèíà èìååò ñëåäóþùèå ðåãèñòðû:pc ñ÷¼ò÷èê êîìàíä;optop óêàçàòåëü âåðøèíû ñòåêà îïåðàöèé;frame óêàçàòåëü íà ñòåê-ôðåéì èñïîëíÿåìîãî ìåòîäà;vars óêàçàòåëü íà 0-þ ïåðåìåííóþ èñïîëíÿåìîãî ìåòîäà.Âñå ðåãèñòðû 32-ðàçðÿäíûå.
Ñòåê-ôðåéì èìååò òðè êîìïîíåíòû: ëîêàëüíûå ïåðåìåííûå, ñðåäó èñïîëíåíèÿ, ñòåê îïåðàíäîâ. Ëîêàëüíûå ïåðåìåííûå îòñ÷èòûâàþòñÿ îò àäðåñà192Ãëàâà 8. Ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììûâ ðåãèñòðå vars. Ñðåäà èñïîëíåíèÿ ñëóæèò äëÿ ïîääåðæàíèÿ ñàìîãî ñòåêà. Îíà âêëþ÷àåò óêàçàòåëü íà ïðåäûäóùèéôðåéì, óêàçàòåëü íà ñîáñòâåííûå ëîêàëüíûå ïåðåìåííûå,íà áàçó ñòåêà îïåðàöèé è íà âåðõóøêó ñòåêà. Êðîìå òîãî,çäåñü æå õðàíèòñÿ íåêîòîðàÿ äîïîëíèòåëüíàÿ èíôîðìàöèÿ,íàïðèìåð, äëÿ îòëàä÷èêà.Êó÷à ñáîðêè ìóñîðà ñîäåðæèò ýêçåìïëÿðû îáúåêòîâ,êîòîðûå ñîçäàþòñÿ è óíè÷òîæàþòñÿ àâòîìàòè÷åñêè. Îáëàñòü ìåòîäîâ ñîäåðæèò êîäû, òàáëèöû ñèìâîëîâ è ò.ä.Ñ êàæäûì êëàññîì ñâÿçàíà îáëàñòü êîíñòàíò. Îíà ñîäåðæèò èìåíà ïîëåé, ìåòîäîâ è äðóãóþ ïîäîáíóþ èíôîðìàöèþ, êîòîðàÿ èñïîëüçóåòñÿ ìåòîäàìè.8.4.2.
Íàáîð êîìàíä âèðòóàëüíîé ìàøèíûÂèðòóàëüíàÿ Java-ìàøèíà èìååò ñëåäóþùèå êîìàíäû:ïîìåùåíèå êîíñòàíò íà ñòåê,ïîìåùåíèå ëîêàëüíûõ ïåðåìåííûõ íà ñòåê,çàïîìèíàíèå çíà÷åíèé èç ñòåêà â ëîêàëüíûõ ïåðåìåííûõ,îáðàáîòêà ìàññèâîâ,óïðàâëåíèå ñòåêîì,àðèôìåòè÷åñêèå êîìàíäû,ëîãè÷åñêèå êîìàíäû,ïðåîáðàçîâàíèÿ òèïîâ,ïåðåäà÷à óïðàâëåíèÿ,âîçâðàò èç ôóíêöèè,òàáëè÷íûé ïåðåõîä,îáðàáîòêà ïîëåé îáúåêòîâ,âûçîâ ìåòîäà,îáðàáîòêà èñêëþ÷èòåëüíûõ ñèòóàöèé,ïðî÷èå îïåðàöèè íàä îáúåêòàìè,ìîíèòîðû,îòëàäêà.Ðàññìîòðèì íåêîòîðûå êîìàíäû ïîäðîáíåå.8.4. Âèðòóàëüíàÿ ìàøèíà Java193Ïîìåùåíèå ëîêàëüíûõ ïåðåìåííûõ íà ñòåêÊîìàíäà iload çàãðóçèòü öåëîå èç ëîêàëüíîé ïåðåìåííîé.
Îïåðàíäîì ÿâëÿåòñÿ ñìåùåíèå ïåðåìåííîé â îáëàñòèëîêàëüíûõ ïåðåìåííûõ. Óêàçûâàåìîå çíà÷åíèå êîïèðóåòñÿíà âåðõóøêó ñòåêà îïåðàöèé. Èìåþòñÿ ïîäîáíûå êîìàíäûäëÿ ïîìåùåíèÿ ïëàâàþùèõ, äâîéíûõ öåëûõ, äâîéíûõ ïëàâàþùèõ è ò.ä.Êîìàíäà istore ñîõðàíèòü öåëîå â ëîêàëüíîé ïåðåìåííîé. Îïåðàíäîì îïåðàöèè ÿâëÿåòñÿ ñìåùåíèå ïåðåìåííîé â îáëàñòè ëîêàëüíûõ ïåðåìåííûõ. Çíà÷åíèå ñ âåðõóøêèñòåêà îïåðàöèé êîïèðóåòñÿ â óêàçûâàåìóþ îáëàñòü ëîêàëüíûõ ïåðåìåííûõ. Èìåþòñÿ ïîäîáíûå êîìàíäû äëÿ ïîìåùåíèÿ ïëàâàþùèõ, äâîéíûõ öåëûõ, äâîéíûõ ïëàâàþùèõ èò.ä.Âûçîâ ìåòîäàÊîìàíäà invokevirtual.Ïðè òðàíñëÿöèè îáúåêòíî-îðèåíòèðîâàííûõ ÿçûêîâïðîãðàììèðîâàíèÿ èç-çà âîçìîæíîñòè ïåðåêðûòèÿ âèðòóàëüíûõ ìåòîäîâ, âîîáùå ãîâîðÿ, íåëüçÿ ñòàòè÷åñêè ïðîòðàíñëèðîâàòü âûçîâ ìåòîäà îáúåêòà.
Ýòî ñâÿçàíî ñ òåì,÷òî åñëè ìåòîä ïåðåêðûò â ïðîèçâîäíîì êëàññå, è âûçûâàåòñÿ ìåòîä îáúåêòà-ïåðåìåííîé, òî ñòàòè÷åñêè íåèçâåñòíî,îáúåêò êàêîãî êëàññà (áàçîâîãî èëè ïðîèçâîäíîãî) õðàíèòñÿ â ïåðåìåííîé. Ïîýòîìó ñ êàæäûì îáúåêòîì ñâÿçûâàåòñÿòàáëèöà âñåõ åãî âèðòóàëüíûõ ìåòîäîâ: äëÿ êàæäîãî ìåòîäà òàì ïîìåùàåòñÿ óêàçàòåëü íà åãî ðåàëèçàöèþ â ñîîòâåòñòâèè ñ ïðèíàäëåæíîñòüþ ñàìîãî îáúåêòà êëàññó â èåðàðõèè êëàññîâ. ÿçûêå Java ðàçëè÷íûå êëàññû ìîãóò ðåàëèçîâûâàòüîäèí è òîò æå èíòåðôåéñ. Åñëè îáúÿâëåíà ïåðåìåííàÿ èëèïàðàìåòð òèïà èíòåðôåéñ, òî äèíàìè÷åñêè íåëüçÿ îïðåäåëèòü îáúåêò êàêîãî êëàññà ïðèñâîåí ïåðåìåííîé:interface I;class C1 implements I;class C2 implements I;194Ãëàâà 8. Ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììûI O;C1 O1;C2 O2;...O=O1;...O=O2;... ýòîé òî÷êå ïðîãðàììû, âîîáùå ãîâîðÿ, íåëüçÿ ñêàçàòü,êàêîãî òèïà çíà÷åíèå õðàíèòñÿ â ïåðåìåííîé O.