лекции (2008) (by Kravets) (укороченное) (1160827), страница 7
Текст из файла (страница 7)
ßïîíñêèåæå òåêñòû óæå ïî òèïó ÿçûêà îáëàäàþò êîìïàêòíîñòüþ, òî åñòü èì íå òàê ñòðàøíî ðàçðàñòàíèå ÿçûêà.Íàïðèìåð, ñòàíäàðòíàÿ êîäèðîâêà äëÿ XML UTF-8. Âñå ñîâðåìåííûå ßÏ èìåþ ïðåäñòàâëåíèå ñèìâîëîâ ââèäÿ unicode, äàæå Äåëüôè ( íà÷èíàÿ ñ 5 âåðñèè). Ñèìâîëüíûé òèï äàííûõ èìååòñÿ âî âñåõ ïåðå÷èñëåííûõÿçûêàõ, ïðè÷åì òîëüêî â äâóõ èç íèõ (Ñ/Ñ++) èìååòñÿ íåÿâíîå ïðåîáðàçîâàíèå ê ÷èñëîâûì òèïàì..Ï5.Ïîðÿäêîâûé òèï(äèàïàçîíû è ïåðå÷èñëåíèÿ).Äèàïàçîí ïåðâûé ïðèìåð òèïà, íå ÿâëÿþùèìñÿ òèïîì â ñåáå, òî åñòü îí îñíîâàí íà íåêîì äðóãîì òèïå.Òî åñòü åñëè åñòü áàçîâûé òèï T è äâå êîíñòàíòû ýòîãî òèïà A B òî äèàïàçîíîì ýòîãî òèïà íàçûâàåòñÿìíîæåñòâî çíà÷åíèé òèïà T îò A äî B.Íà áàçîâûé òèï íàêëàäûâàåòñÿ îãðàíè÷åíèå îíè äîëæíû áûòü ïîääåðæèâàòü îïåðàöèè suck è prev(Pascal).
Ê òèïàì ñ ïëàâàþùåé òî÷êîé íåëüçÿ ïðèìåíèòü îïåðàöèþ succ õîòÿ îíè è óïîðÿäî÷åííû, òàê êàêïðåäñòàâëåíèå ýòîãî òèïà çàâèñèò îò ðåàëèçàöèè. Òî åñòü áàçîâûìè òèïàìè äëÿ äèàïàçîíîâ ìîãóò áûòü òèïû,îñíîâàííûå íà öåëûõ ÷èñëàõ (÷èñëà, ñèìâîëû è òàê äàëåå). Äèàïàçîíû áûëè óæå â ÿçûêå ïàñêàëü. Ñèñòåìàîïèðàåòñÿ íà ðàáîòû Äåéêñðû è Âèðòà. Òàê æå äèàïàçîíû åñòü â ÿçûêå Àäà.type NEWINT is new INTEGER range 1..N íàñëåäíèêå ïàñêàëÿ ìîäóëå-2 äèàïàçîíû âêëþ÷àþò â ñåáÿ []. Äèàïàçîí óäîáåí òåì, ÷òî îí îãðàíè÷èâàåò ïîâåäåíèå ñîîòâåòñòâóþùåãî òèïà, ÷òî ïîçâîëÿåò îñóùåñòâëÿòü êâàçèñòàòè÷åñêèé êîíòðîëü.
Òî åñòüïðîâåðêà íà âûõîä çà çíà÷åíèå äèàïàçîíà ïðîèñõîäèò ëèáî âî âðåìÿ êîìïèëÿöèè ëèáî íà ýòàïå âûïîëíåíèÿ. ÿçûêå Îáåðîí(ïðèíöèï ìèíèìàëüíîñòè ÿçûêîâûõ êîíñòðóêöèé) äèàïàçîíîâ íåò.  ìîäèôèêàöèèýòîãî ÿçûêà Îáåðîí-2 èõ òàê æå íåò. Òàê æå èõ íåò â java è C#. ÷åì ïðè÷èíà ýòîãî îáúÿñíèë Âèðò,êîãäà ðàññêàçûâàë î äèçàéíå Îáåðîí-2.
Îí ñêàçàë, ÷òî îñíîâíîå ïîíÿòèå ÿçûêà îáåðîí-2 ýòî íàñëåäîâàíèå(ðàñøèðåíèå). Ñ òî÷êè çðåíèÿ îñíîâíîé êîíöåïöèè ðàñøèðåíèÿ òèïà, äèàïàçîíû íè÷åãî íå äàþò èáîëåå òîãî ïðîòèâîðå÷àò èäåå ðàñøèðåíèÿ òèïà. Òî åñòü äèàïàçîí ÿâëÿåòñÿ íå ðàñøèðÿåìûì òèïîì äàííûõ.Äèàïàçîíû èñïîëüçîâàëèñü â îñíîâíîì äëÿ ðàáîòû ñ ìàññèâàìè ( êàê èíäåêñû).Ïîíÿòèå êâàçèñòàòè÷åñêîãîêîíòðîëÿ òàê æå ñâÿçàííî ñ ïîíÿòèåì äèàïàçîíà. ìíîãèõ êîìïèëÿòîðàõ Turbo Pascal ìîæíî îòêëþ÷àòü êâàçèñòàòè÷åñêèé êîíòðîëü. Áûëî ñäåëàíî íàáëþäåíèå, ÷òî âñå ñðåäñòâà êîíòðîëÿ îòêëþ÷àþòñÿ ïðîãðàììèñòàìè (â ðåëèçîâîé âåðñèè).
À ðàç íåò äèàïàçîíîâ,ñëåäîâàòåëüíî âñå ìàññèâû óäîáíåå âñåãî íà÷èíàòü ñ 0. È âî âñåõ ñîâðåìåííûõ ßÏ âñå ìàññèâû ïîõîæè íàìàññèâû â ÿçûêå Ñ, òî åñòü îáúÿâëåíèå òðåáóåò òîëüêî äëèíó ìàññèâà. Òî åñòü Äèàïàçîí èñ÷åç èç ßÏ ïîòîìó ÷òî îí íå ñîîòâåòñòâîâàë êîíöåïöèè ÎÎÏ.17Ïåðå÷èñëåíèÿ áûëè ïðèäóìàíû Âèðòîì (ïàñêàëü) ïîòîì îí æå èõ è âûâåë èç èñïîëüçîâàíèÿ, íî ñåé÷àñîíè âíîâü âîçâðàùàþòñÿ.18Ëåêöèÿ 9Ïåðå÷èñëèìûå òèïû äàííûõ ïîÿâèëèñü âïåðâûå â ßÏ ïàñêàëü (1969). Ïîñëå ýòîãî îíè âõîäèëè ïî÷òè âîâñå ÿçûêè ïðîãðàììèðîâàíèÿ.type T= (C1,C2,..,CN)Pascal styleÃîâîðÿò, ÷òî ïåðå÷èñëèìûé òèï óïðîùàåò ÷òåíèå ïðîãðàììû, ïîâûøàåò íàäåæíîñòü ïðîãðàììû ( àáñòðàãèðóåìñÿ îò ÷èñëîâîãî çíà÷åíèå ïåðåìåííîé), ìîæåò óëó÷øàòü ýôôåêòèâíîñòü ïðîãðàììû (ïóòåì óìåíüøåíèÿ ìåñòà äëÿ õðàíåíèÿ òàêèõ ïåðåìåííûõ). Ïðè ýòîì â 1988 ãîäó, â ÿçûêå Îáåðîí, Âèðò îòêàçàëñÿ îò ïåðå÷èñëèìîãî òèïà äàííûõ â ßÏ Îáåðîí (ïðèíöèï ìèíèìàëüíîñòè ÿçûêîâûõ êîíñòðóêöèé).
Âòîðàÿ ïðè÷èíà ïåðå÷èñëèìûå òèïû â òîì âèäå êàê îíè ïîÿâèëèñü â ïàñêàëå è ñîîòâåòñòâåííî äðóãèõ ßÏ, ïðîòèâîðå÷èëèêîíöåïöèè ÎÎÏ. Ïåðå÷èñëèìûå òèïû äàííûõ (â âèäå â êîòîðîì îíè ïîÿâèëèñü â Ïàñêàëå) íå ìîãóò áûòüðàñøèðåííû.1995 Java. (Ðàçðàáàòûâàëñÿ ñ íóëÿ, ÷àñòè÷íàÿ ñèíòàêñè÷åñêàÿ ñîâìåñòèìîñòü ñ Ñ).  Java ïåðå÷èñëèìûõòèïîâ íåò.1999 Ñ#.  íåì òàêèå òèïû åñòü, íî â îïèñàíèè ÿçûêà àâòîðû óæå â ñàìîì íà÷àëå ¾îïðàâäûâàþòñÿ¿â òîì ïî÷åìó îíè âêëþ÷èëè ýòîò òèï äàííûõ. Îñíîâíîé àðãóìåíò ïåðå÷èñëèìûå òèïû äàííûõ õîðîøî èíòåãðèðóþòñÿ ñî ñðåäñòâàìè âèçóàëüíîãî ïðîãðàììèðîâàíèÿ (VS).
Òî åñòü ìíîãèå ñâîéñòâà êîìïîíåíòóäîáíî ïðåäñòàâëÿòü â âèäå ïåðå÷èñëåíèÿ. Òåêñò ñ èñïîëüçîâàíèåì òàêèõ òèïîâ èíîãäà íàçûâàþò ¾ñàìîäîêóìåíòèðîâàííûì¿. Òðåòüå íåïðèÿòíîå ñâîéñòâî ïåðå÷èñëèìîãî òèïà äàííûõ âìåñòå ñ èìåíåì òèïàíåÿâíî èìïîðòèðóþòñÿ èìåíà êîíñòàíò.2005 ãîä java 5.0 ïåðå÷èñëèìûå òèïû äàííûõ áûëè âîçâðàùåíû.
Ñèíòàêñè÷åñêè ïåðå÷èñëèìûå òèïûäàííûõ â java ïîõîæè íà ïåðå÷èñëèìûå òèïû äàííûõ â Ïàñêàëå, íî ïðè ýòîì îíè ïðåäñòàâëÿþòñÿ êàê îòäåëüíûé êëàññ.Ðåàëèçàöèÿ ïåðå÷èñëèìûé òèïîâ äàííûõ.1.Êëàññè÷åñêàÿ ñõåìà.(Ïàñêàëü, Àäà)type T=(..); Ïàñêàëü, ìîäóëà-2type T is (C1,...,CN); ÀäàÏðè ýòîì íåò íåÿâíûõ ïðåîáðàçîâàíèé èç ïåðå÷èñëèìîãî òèïà ê öåëî÷èñëåííîìó è íàîáîðîò.  ñòàíäàðòíîì Ïàñêàëå áûëà ôóíêöèÿ ord ïåðåâîä ïåðå÷èñëèìîãî òèïà ê öåëî÷èñëåííîìó.  Ìîäóëà-2 åñòü ôóíêöèÿval êîòîðàÿ ïðèíèìàåò ïåðå÷èñëèìóþ êîíñòàíòó èìÿ òèïà è öåëîå çíà÷åíèå è âîçâðàùàåò çíà÷åíèå ñîîòâåòñòâóþùåãî ïåðå÷èñëèìîãî òèïà èëè âûäàåò îøèáêó âðåìåíè âûïîëíåíèÿ.Ðåàëèçàöèÿ ïåðå÷èñëèìîãî òèïà â ÿçûêå Àäà íåìíîãî îòëè÷àåòñÿ. Òàê êàê ñèìâîëüíûé òèï äàííûõ â ÿçûêå Àäà ðåàëèçîâàí êàê ïåðå÷èñëåíèå, òî åñòü êðîìå îáû÷íîãî ïåðå÷èñëåíèÿ åñòü åùå ëèòåðàëû ïåðå÷èñëåíèÿ. Àäå âîçìîæíî ïåðåñå÷åíèå èìåí â ïåðå÷èñëåíèÿõ, òî åñòü ëèòåðàëû ïåðå÷èñëåíèÿ ìîãóò ïåðåñåêàòüñÿ ìåæäó ñîáîé.type RGBColor in (..
Red...);type TracColor in (Reg,Green,Yellow);Òàê êàê ïî ïðàâèëó ïåðåãðóæàòüñÿ ìîãóò òîëüêî èìåíà ôóíêöèé, òî òðåáîâàëèñü íåêîòîðûå óõèùðåíèÿ ÷òîáâïèñàòü ýòî â ÿçûê Àäà. Ðàññìîòðèì ïðèìåð ô-èè íà ÿçûêå Àäà.function Funñ return T//îáúåêòû ëîêàëüíûõ ïåðåìåííûõbegin//îïåðàòîðûend Funñ;x:=T;x:=Funñ:Òàêèì îáðàçîì òàêèå ëèòåðàëû ïåðå÷èñëåíèÿ ðàññìàòðèâàþòñÿ êàê èìåíà ôóíêöèé áåç ïàðàìåòðîâ. Îòñþäàâîçíèêàåò ñëåäóþùàÿ ïðîáëåìà.procedure P(X:RGBColor);procedure P(Y:TracColor);è òîãäà P(Red) íåîäíîçíà÷íîñòü.
Ïîýòîìó äëÿ ýòèõ ñëó÷àåâ â Àäå ñóùåñòâóåò ñïåöèàëüíàÿ êîíñòðóêöèÿóêàçàíèÿ òèïà ( íå ÿâëÿåòñÿ ïðåîáðàçîâàíèåì). Îíà èñïîëüçóåòñÿ êîãäà íóæíî èìåííî óêàçàòü êîìïèëÿòîðó÷òî äàííîå çíà÷åíèå èìååò ñîîòâåòñòâóþùèé òèï. P(RGBColor'Red);Âñå ýòè ïðîáëåìû âîçíèêëè èç-çà òîãî ÷òî èìåíà ïåðå÷èñëèìûõ êîíñòàíò íàõîäÿòñÿ â òîé æå îáëàñòèâèäèìîñòè ÷òî è èìÿ òèïà. Íàïðèìåð â ÿçûêå Ñ# èìåíà êîíñòàíò ëîêàëèçîâàíû âíóòðè òèïà. Òî åñòü òåïåðüRGBColor.Red. ÒÎ åñòü òåïåðü îäíà è òà æå êîíñòàíòà ìîæåò ïðèíàäëåæàòü ðàçíûì ïåðå÷èñëåíèÿì.
ßçûêÑ# ïðîäîëæàåò òðàäèöèþ òðàäèöèîííûõ ßÏ, òî åñòü êîíñòàíòû ïåðå÷èñëèìîãî òèïà â Ñ# - ýòî êîíñòàíòûöåëîãî òèïà. Ïî óìîë÷àíèþ êîíñòàíòû öåëîãè òèïà äàííûõ ïðåäñòàâëÿþòñÿ çíà÷åíèåì öåëîãî òèïà äàííûõ,ïðè ýòî çíà÷åíèÿ áóäó (0 .. N-1) ïðè ýòîì ïðåäñòàâëåíèÿ ìîæíî âûáèðàòü ÿâíî (ïî óìîë÷àíèþ 0 int). Èïðè ýòîì íå ñóùåñòâóåò íåÿâíîãî ïðåîáðàçîâàíèÿ, êðîìå êîíñòàíòû 0, êîòîðàÿ ìîæåò ïðåîáðàçîâûâàòüñÿ â19ëþáóþ ïåðå÷èñëèìóþ êîíñòàíòó íåÿâíî. Ïðè ÿâíîì ïðåîáðàçîâàíèè âñåãäà îñóùåñòâëÿåòñÿ êîíòðîëü.Îñîáíÿêîì ñòîÿò ÿçûêè Ñ è Ñ++.  íåêîòîðîì ñìûñë â ýòèõ ÿçûêàõ ïåðå÷èñëèìûé òèï íå ÿâëÿåòñÿ òèïîìâ ïîëíîì ñìûñëå ñëîâà òèï.emun(C1,C2,C3);Òåïåðü Ñ1=0,Ñ2=1,Ñ3=2.Ïðè ýòîìenum c x;x=-25; - Ñåìàíòè÷åñêè äîïóñòèìî.
Òî åñòü ïåðå÷èñëèìûé òèï âñåãî ëèøü ñïîñîá çàäàíèå íåêîåãî íàáîðàêîíñòàíò. Òî åñòü const int C1=0 èëè #dene C1 0 ýêâèâàëåíòíû îïðåäåëåíèþ ïåðå÷èñëèìîãî òèïà. Ïîýòîìóýòîò òèï íå îñîáî ïîïóëÿðåí ïðîãðàììèñòàìè ÿçûêà Ñ. Ïðè ðàçðàáîòêå ÿçûêà Ñ++ ïî ïîâîäó ïåðå÷èñëèìîãîòèïà âîçíèêëî íåñêîëüêî ïðîáëåì.1-Ïðîáëåìà òåãîâ.  ÿçûêå Ñ âîçìîæíî çàäàíèå áåçûìÿííîãî enum.  Ñ+ òàêîé enum ìîæíî íàáëþäàòü òàêîéenum â STL. Òî åñòü enum <ios modes> è ïðè ýòîì open(..,int); Òî åñòü enum ïîëíîñòüþ ñîâìåñòèì ñ öåëî÷èñëåííûì òèïîì äàííûõ.
Òî åñòü Ñòðàóñòðóï âñòàë ïåðåä ñëåäóþùåé ïðîáëåìîé ñ îäíîé ñòîðîíû òðåáîâàëîñüïîääåðæèâàòü ïîëíóþ ñîâìåñòèìîñòü ñ Ñ, ñ äðóãîé ñòîðîíû äëÿ ïåðåãðóçêè ôóíêöèé áûëî áû óäîáíî ñäåëàòüåãî îòäåëüíûì òèïîì. Òàêèì îáðàçîì ñóùåñòâóåò ÿâíîå ïðåîáðàçîâàíèå èç int -> enum(îòñóòñòâèå êîíòðîëÿ)à ïðåîáðàçîâàíèå èç emun ->int îñóùåñòâëÿåòñÿ íåÿâíî.  Ñ++ òàê êàê ïåðå÷èñëåíèÿ íåÿâíî ñîâìåñòèìû ñöåëî÷èñëåííûìè êîíñòàíòàìè, òî ïðîãðàììèñòó äàíà âîçìîæíîñòü óïðàâëÿòü çíà÷åíèÿìè ñîîòâåòñòâóþùèõêîíñòàíò. Òî åñòüenum Modereed = 0x1,write = 0x2,RW = reed|write; áîëüøèíñòâå ñëó÷àåâ íàä öåëî÷èñëåííûìè êîíñòàíòàìè òðåáóåòñÿ âûïîëíÿòü íåêîòîðûé íàáîð áèòîâûõ îïåðàöèé.
Ïîäõîä ÿçûêà Ñ# ïîçâîëÿåò èçáàâèòüñÿ îò íåäîñòàòêîâ ïåðå÷èñëèìîãî òèïà ÿçûêà Ñ îòíåíàäåæíîñòè è íåÿâíîãî èìïîðòà èìåí.  Ñ# ïîÿâèëàñü âîçìîæíîñòü âûáîðà áàçèñà ïðåäñòàâëåíèÿ.Àòðèáóòèðîâàíèå ÷àñòíûé ñëó÷àé áîëåå îáùåé êîíñòðóêöèè Ñ# - ðåôëêåêñèè. Òî åñòü ýòî îòðàæåíèåñòðóêòóðû êîäà ïðîãðàììû â ðåçóëüòèðóþùåì áèíàðíîì êîäå ðåôëåêñèÿ. Àòðèáóòèðîâàíèå ïðèïèñûâàíèå êîíñòàíòàì ïåðå÷èñëèìîãî òèïà äàííûõ íåêîòîðûõ àòðèáóòîâ. Ðàññìîòðèì îäèí èç òàêèõ àòðèáóòîâ ags. Íàïðèìåð enum â àòðèáóòîì [ags] ïîçâîëÿåò âûïîëíÿòü íàä êîíñòàíòàìè ïåðå÷èñëèìîãî òèïà ëîãè÷åñêèå áèòîâûå îïåðàöèè.Óïàêîâêà/ðàñïàêîâêà. ÷èñòî îáúåêòíî îðèåíòèðîâàííûõ ßÏ âñå ÿâëÿåòñÿ îáúåêòîì. Òî åñòü 3+5 ýòî îïåðàöèÿ ñ äâóìÿ îáúåêòàìè.
Ñòðóêòóðû, ïåðå÷èñëåíèÿ è ïðîñòûå òèïû äàííûõ â Ñ# íàçûâàþòñÿ value types (òèïû çíà÷åíèé). Òî åñòüýòè ýëåìåíòû ïðåäñòàâëÿþòñÿ èìåííî êàê ñîáñòâåííûå çíà÷åíèÿ à íå êàê ññûëêè íà îáúåêò. Äëÿ êàæäîãîòàêîãî òèïà ñóùåñòâóåò åãî êîðîáêà (box) êëàññ. Èòàê äëÿ êàæäîãî òàêîãî êëàññà ñóùåñòâóåò ñâîé êëàññ îáåðòêà. Òî åñòü åñëè ðå÷ü èäåò îá îïåðàöèÿõ íàä ïðèìèòèâíûìè êëàññàìè òî îïåðàöèÿ ïðîâîäèòñÿ íàäîáúåêòîì, åñëè æå îïåðàöèÿ êëàññîâàÿ òî íàä îáåðòêå. Íàïðèìåð äëÿ enum ñóùåñòâóåò îáåðòêà êëàññEnum êîòîðûé ÿâëÿåòñÿ îáåðòêîé äëÿ ëþáîãî ïåðå÷èñëèìîãî òèïà äàííûõ. ÿçûêå java ïåðå÷èñëèìûé òèï äàííûõ âîîáùå íèêàê íå ñâÿçàí ñ öåëî÷èñëåííûì òèïîì äàííûõ.