лекции (2008) (by Kravets), страница 7
Описание файла
PDF-файл из архива "лекции (2008) (by Kravets)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 7 страницы из PDF
Îäíèì èç ïåðâûõ òàêèõ ôîðìàòîâáûë ôîðìàò uft-7 (ïðåîáðàçîâàíèå â 7 áèòíûé êîä).Utf-8 ñïîñîá ïðåäñòàâëåíèÿ ëþáîãî ucs â 8-áèòíûõ çíà÷åíèÿõ. Ñïîñîá ðàáîòû òàêîâ. Âñå íîìåðà ðàçáèâàþòñÿ íà òðè äèàïàçîíà.0-127128-20472047-65535Ñèìâîëû èç ïåðâîãî äèàïàçîíà êîïèðóþòñÿ ñàìè â ñåáÿ. Òî åñòü ëþáîéàíãëèéñêèé òåêñò ÿâëÿåòñÿ òåêñòîì â utf-8.Ñèìâîëû èç âòîðîãî äèàïàçîíà (òðåáóþò 11 áèòîâ). È ïðåäñòàâëÿþòñÿ â âèäå (110<5 áèòîâ>,10<îñòàëüíûå 6>)  ýòîò äèàïàçîí ïîïàäàþòïî÷òè âñå îäíî-áàéòîâûå ÿçûêè. òðåòèé äèàïàçîí ïîïàäàþò îñòàëüíûå ÿçûêè.
êîòîðûå íå ìîãóò íè30êàê óìåñòèòüñÿ â 1 áàéò ( ÿïîíñêèé, êèòàéñêèé è òàê äàëåå). Ôîðìàò (1110<4> 10<6> 10<6>).Ýêîíîìèÿ èìååò ìåñòî òàê êàê âñå óïðàâëÿþùèå ñèìâîëû è ïðî÷ååêîäèðóþòñÿ îäíèì áàéòîì. ßïîíñêèå æå òåêñòû óæå ïî òèïó ÿçûêà îáëàäàþò êîìïàêòíîñòüþ, òî åñòü èì íå òàê ñòðàøíî ðàçðàñòàíèå ÿçûêà.Íàïðèìåð, ñòàíäàðòíàÿ êîäèðîâêà äëÿ 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 ýòî íàñëåäîâàíèå(ðàñøèðåíèå). Ñ òî÷êè çðåíèÿ îñíîâíîéêîíöåïöèè ðàñøèðåíèÿ òèïà, äèàïàçîíû íè÷åãî íå äàþò è áîëåå òîãîïðîòèâîðå÷àò èäåå ðàñøèðåíèÿ òèïà.
Òî åñòü äèàïàçîí ÿâëÿåòñÿ íå ðàñøèðÿåìûì òèïîì äàííûõ. Äèàïàçîíû èñïîëüçîâàëèñü â îñíîâíîì äëÿðàáîòû ñ ìàññèâàìè ( êàê èíäåêñû).Ïîíÿòèå êâàçèñòàòè÷åñêîãî êîíòðîëÿ òàê æå ñâÿçàííî ñ ïîíÿòèåì äèàïàçîíà.31 ìíîãèõ êîìïèëÿòîðàõ Turbo Pascal ìîæíî îòêëþ÷àòü êâàçèñòàòè÷åñêèé êîíòðîëü. Áûëî ñäåëàíî íàáëþäåíèå, ÷òî âñå ñðåäñòâà êîíòðîëÿîòêëþ÷àþòñÿ ïðîãðàììèñòàìè (â ðåëèçîâîé âåðñèè). À ðàç íåò äèàïàçîíîâ, ñëåäîâàòåëüíî âñå ìàññèâû óäîáíåå âñåãî íà÷èíàòü ñ 0. È âî âñåõñîâðåìåííûõ ßÏ âñå ìàññèâû ïîõîæè íà ìàññèâû â ÿçûêå Ñ, òî åñòü îáúÿâëåíèå òðåáóåò òîëüêî äëèíó ìàññèâà.
Òî åñòü Äèàïàçîí èñ÷åç èç ßÏïîòîì ó ÷òî îí íå ñîîòâåòñòâîâàë êîíöåïöèè ÎÎÏ.Ïåðå÷èñëåíèÿ áûëè ïðèäóìàíû Âèðòîì (ïàñêàëü) ïîòîì îí æå èõ èâûâåë èç èñïîëüçîâàíèÿ, íî ñåé÷àñ îíè âíîâü âîçâðàùàþòñÿ.32Ëåêöèÿ 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 êîòîðàÿ ïðèíèìàåò ïåðå÷èñëèìóþ êîíñòàíòó èìÿ òèïà è öåëîåçíà÷åíèå è âîçâðàùàåò çíà÷åíèå ñîîòâåòñòâóþùåãî ïåðå÷èñëèìîãî òèïàèëè âûäàåò îøèáêó âðåìåíè âûïîëíåíèÿ.Ðåàëèçàöèÿ ïåðå÷èñëèìîãî òèïà â ÿçûêå Àäà íåìíîãî îòëè÷àåòñÿ. Òàêêàê ñèìâîëüíûé òèï äàííûõ â ÿçûêå Àäà ðåàëèçîâàí êàê ïåðå÷èñëåíèå,33òî åñòü êðîìå îáû÷íîãî ïåðå÷èñëåíèÿ åñòü åùå ëèòåðàëû ïåðå÷èñëåíèÿ. Àäå âîçìîæíî ïåðåñå÷åíèå èìåí â ïåðå÷èñëåíèÿõ, òî åñòü ëèòåðàëûïåðå÷èñëåíèÿ ìîãóò ïåðåñåêàòüñÿ ìåæäó ñîáîé.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, êîòîðàÿ ìîæåò ïðåîáðàçîâûâàòüñÿ â ëþáóþ ïåðå÷èñëèìóþ êîíñòàíòó íåÿâíî.Ïðè ÿâíîì ïðåîáðàçîâàíèè âñåãäà îñóùåñòâëÿåòñÿ êîíòðîëü.Îñîáíÿêîì ñòîÿò ÿçûêè Ñ è Ñ++.  íåêîòîðîì ñìûñë â ýòèõ ÿçûêàõïåðå÷èñëèìûé òèï íå ÿâëÿåòñÿ òèïîì â ïîëíîì ñìûñëå ñëîâà òèï.emun(C1,C2,C3);Òåïåðü Ñ1=0,Ñ2=1,Ñ3=2.Ïðè ýòîì34enum c x;x=-25; - Ñåìàíòè÷åñêè äîïóñòèìî.
Òî åñòü ïåðå÷èñëèìûé òèï âñåãî ëèøüñïîñîá çàäàíèå íåêîåãî íàáîðà êîíñòàíò. Òî åñòü const int C1=0 èëè#dene C1 0 ýêâèâàëåíòíû îïðåäåëåíèþ ïåðå÷èñëèìîãî òèïà. Ïîýòîìóýòîò òèï íå îñîáî ïîïóëÿðåí ïðîãðàììèñòàìè ÿçûêà Ñ. Ïðè ðàçðàáîòêåÿçûêà Ñ++ ïî ïîâîäó ïåðå÷èñëèìîãî òèïà âîçíèêëî íåñêîëüêî ïðîáëåì.1-Ïðîáëåìà òåãîâ.  ÿçûêå Ñ âîçìîæíî çàäàíèå áåçûìÿííîãî enum.
ÂÑ+ òàêîé enum ìîæíî íàáëþäàòü òàêîé enum â STL. Òî åñòü enum <iosmodes> è ïðè ýòîì open(..,int); Òî åñòü enum ïîëíîñòüþ ñîâìåñòèì ñöåëî÷èñëåííûì òèïîì äàííûõ. Òî åñòü Ñòðàóñòðóï âñòàë ïåðåä ñëåäóþùåé ïðîáëåìîé ñ îäíîé ñòîðîíû òðåáîâàëîñü ïîääåðæèâàòü ïîëíóþñîâìåñòèìîñòü ñ Ñ, ñ äðóãîé ñòîðîíû äëÿ ïåðåãðóçêè ôóíêöèé áûëî áûóäîáíî ñäåëàòü åãî îòäåëüíûì òèïîì.
Òàêèì îáðàçîì ñóùåñòâóåò ÿâíîåïðåîáðàçîâàíèå èç int -> enum(îòñóòñòâèå êîíòðîëÿ) à ïðåîáðàçîâàíèå èçemun ->int îñóùåñòâëÿåòñÿ íåÿâíî.  Ñ++ òàê êàê ïåðå÷èñëåíèÿ íåÿâíîñîâìåñòèìû ñ öåëî÷èñëåííûìè êîíñòàíòàìè, òî ïðîãðàììèñòó äàíà âîçìîæíîñòü óïðàâëÿòü çíà÷åíèÿìè ñîîòâåòñòâóþùèõ êîíñòàíò. Òî åñòüenum Modereed = 0x1,write = 0x2,RW = reed|write; áîëüøèíñòâå ñëó÷àåâ íàä öåëî÷èñëåííûìè êîíñòàíòàìè òðåáóåòñÿ âûïîëíÿòü íåêîòîðûé íàáîð áèòîâûõ îïåðàöèé.
Ïîäõîä ÿçûêà Ñ#ïîçâîëÿåò èçáàâèòüñÿ îò íåäîñòàòêîâ ïåðå÷èñëèìîãî òèïà ÿçûêà Ñ îòíåíàäåæíîñòè è íåÿâíîãî èìïîðòà èìåí.  Ñ# ïîÿâèëàñü âîçìîæíîñòüâûáîðà áàçèñà ïðåäñòàâëåíèÿ.Àòðèáóòèðîâàíèå ÷àñòíûé ñëó÷àé áîëåå îáùåé êîíñòðóêöèè Ñ#- ðåôëêåêñèè. Òî åñòü ýòî îòðàæåíèå ñòðóêòóðû êîäà ïðîãðàììû â ðåçóëüòèðóþùåì áèíàðíîì êîäå ðåôëåêñèÿ. Àòðèáóòèðîâàíèå ïðèïèñûâàíèå êîíñòàíòàì ïåðå÷èñëèìîãî òèïà äàííûõ íåêîòîðûõ àòðèáóòîâ.Ðàññìîòðèì îäèí èç òàêèõ àòðèáóòîâ ags.
Íàïðèìåð enum â àòðèáóòîì [ags] ïîçâîëÿåò âûïîëíÿòü íàä êîíñòàíòàìè ïåðå÷èñëèìîãî òèïàëîãè÷åñêèå áèòîâûå îïåðàöèè.Óïàêîâêà/ðàñïàêîâêà. ÷èñòî îáúåêòíî îðèåíòèðîâàííûõ ßÏ âñå ÿâëÿåòñÿ îáúåêòîì. Òî åñòü3+5 ýòî îïåðàöèÿ ñ äâóìÿ îáúåêòàìè. Ñòðóêòóðû, ïåðå÷èñëåíèÿ èïðîñòûå òèïû äàííûõ â Ñ# íàçûâàþòñÿ value types (òèïû çíà÷åíèé). Òîåñòü ýòè ýëåìåíòû ïðåäñòàâëÿþòñÿ èìåííî êàê ñîáñòâåííûå çíà÷åíèÿ àíå êàê ññûëêè íà îáúåêò. Äëÿ êàæäîãî òàêîãî òèïà ñóùåñòâóåò åãî êîðîáêà (box) êëàññ. Èòàê äëÿ êàæäîãî òàêîãî êëàññà ñóùåñòâóåò ñâîéêëàññ îáåðòêà. Òî åñòü åñëè ðå÷ü èäåò îá îïåðàöèÿõ íàä ïðèìèòèâíû35ìè êëàññàìè òî îïåðàöèÿ ïðîâîäèòñÿ íàä îáúåêòîì, åñëè æå îïåðàöèÿêëàññîâàÿ òî íàä îáåðòêå.
Íàïðèìåð äëÿ enum ñóùåñòâóåò îáåðòêà êëàññ Enum êîòîðûé ÿâëÿåòñÿ îáåðòêîé äëÿ ëþáîãî ïåðå÷èñëèìîãî òèïàäàííûõ. ÿçûêå java ïåðå÷èñëèìûé òèï äàííûõ âîîáùå íèêàê íå ñâÿçàí ñöåëî÷èñëåííûì òèïîì äàííûõ. enum colorred,green,blue; èìåíà êîíñòàíòòàê æå ëîêàëèçîâàíû âíóòðè èìåíè ïåðå÷èñëåíèÿ. java.lang ïàêåò javaêîòîðûé îïèñûâàåò ñïåöèôè÷åñêèå êëàññû java. Íàïðèìåð â java.lang ñîäåðæèòñÿ êëàññ Enum êîòîðûé ÿâëÿåòñÿ áàçîâûì äëÿ âñåõ ïåðå÷èñëèìûõòèïîâ.enum RGBColorpublic RGBColor(byte r,byte g,byte b);private int color();Red(255,0,0),Green(0,255,0),Blue(0,0,255);Ïóíêò 6 ññûëêè è óêàçàòåëè.Óêàçàòåëü àáñòðàêöèÿ ìàøèííîãî àäðåñà.