лекции (2008) (by Kravets) (укороченное) (1160827), страница 5
Текст из файла (страница 5)
Ïðè ýòîì ïî÷òè äëÿ êàæäîé ïðîáëåìíîé îáëàñòè ïðèõîäèòñÿñîçäàâàòü ñâîé íàáîð ìîäåëåé. Ïðîñòåéøèì ñðåäñòâîì àáñòðàêöèè ÿâëÿåòñÿ ïîäïðîãðàììà (åäèíñòâåííîåñðåäñòâî àáñòðàêöèè â ÔÎÐÒÐÀÍÅ). Ñ òî÷êè çðåíèÿ áàçèñà ßÏ ðàçëè÷àþòñÿ íå ñèëüíî, íî ñ òî÷êè çðåíèÿàáñòðàêöèé ðàçëè÷èå âåëèêî.Ñõåìà ðàññìîòðåíèÿ:1.Áàçèñ (òå êîíñòðóêöèè è àáñòðàêöèè êîòîðûå âñòðîåíû  ßÏ)1.1.Ñêàëÿðíûé (íåðàçëîæèìûé íà áîëåå ïðîñòûå îïåðàöèè (òèïû äàííûõ (áàçîâûå)) è íåêîòîðûå îïåðàòîðû)1.2.Ñîñòàâíîé (ìàññèâû è íåêîòîðûå îïåðàòîðû)2.Ñðåäñòâà àáñòðàêöèè ( ìåõàíèçì ñîçäàíèÿ íîâûõ òèïîâ äàííûõ, êëàññîâ è ïîäïðîãðàìì ).ÂÒÄ ìíîæåñòâî îïåðàöèé à íå ìíîæåñòâî çíà÷åíèé. àáñòðàêòíûõ òèïàõ äàííûõ - ïîíÿòèå èíòåðôåéñà.Ïðèìåì àáñòðàêöèè â ÿçûêå Ñ ôàéë stdin stdout.
Íî â Ñ íåò çàùèòû ââåäåííûõ àáñòðàêöèé, ÷òî äåëàåòåãî íåíàäåæíûì ßÏ.3.Ñðåäñòâà çàùèòû ââåäåííûõ àáñòðàêöèé. Ñðåäñòâà çàùèòû õîðîøî ðàçâèòû â ÿçûêå àäà. ÍàäåæíîñòüßÏ åñëè ïðîãðàììà êîìïèëèðóåòñÿ, òî îíà ñåìàíòè÷åñêè âåðíà. Òðåòüå ñâîéñòâî î÷åíü èíòåðåñíîå è íåî÷åâèäíîå. 50'% ðàçðàáîòîê ïðîãðàìì øëî íà ñîïðîâîæäåíèå, 25% íà òåñòèðîâàíèå. Òî åñòü òðåòèé ïðèîðèòåò ÷èòàáåëüíîñòü êîäà ( îí ïèøåòñÿ îäèí ðàç è ÷èòàåòñÿ ìíîãî ðàç, ïðèòîì íå òîëüêî åå àâòîðîì).Ñ ýòîéñòîðîíû ÀÄÀ ÿâëÿåòñÿ õîðîøèì ßÏ ìíîãî äëèííûõ êëþ÷åâûõ ñëîâ....×àñòü 2. Ñîâðåìåííûå ßÏ12Ñåé÷àñ áîëüøèíñòâî ßÏ îñíîâàíû íà ÎÎÏ ïàðàäèãìå, íî ïðè ýòîì èñïîëüçóþò ïîíÿòèÿ èç òðàäèöèîííûõßÏ.1.Áàçèñ òðàäèöèîííûõ ßÏ. Íàïðèìåð äëÿ ÿçûêà Ñ è Ñ++ áàçèñ ïî÷òè íå ðàçëè÷àåòñÿ (â ÿçûêå Ñ++ ïîÿâèëñÿ òîëüêî ññûëî÷íûé òèï, êîòîðûé òåì íå ìåíåå íå èìååò íèêàêîãî îòíîøåíèÿ ê ÎÎßÏ).1.1.Ñêàëÿðíûé áàçèñ. Ïðîñòûå òèïû äàííûõ.Êëàññèôèêàöèÿ:1.
÷èñëîâûå òèïû äàííûõ (îñíîâíûå òèïû äàííûõ)1.öåëî÷èñëåííûå2.âåùåñòâåííûå (ñ ïëàâàþùåé òî÷êîé)-ïëàâàþùàÿ òî÷êà-ôèêñèðîâàííàÿ òî÷êàÒàêîå ðàçäåëåíèå ÷èñëîâûõ òèïîâ äàííûõ ( â ìàòåìàòèêå òàêîãî íåò) ýòî óæå íåêîòîðîå óñëîæíåíèå. Åñòüñêðèïòîâûé ßÏ lua â êîòîðîì íåò öåëûõ è âåùåñòâåííûõ òèïîâ äàííûõ. Åñòü ÒÄ Number êîòîðûé óíèâåðñàëåí (íî çà ýòî íóæíî ïëàòèòü ñêîðîñòüþ).
 ÿçûêàõ òèïà Ìàòëàá åñòü òèïû äàííûõ äëÿ âû÷èñëåíèé ñïðîèçâîëüíîé òî÷íîñòüþ.2.Ëîãè÷åñêèé òèï äàííûõ (bool)3.Ñèìâîëüíûé4.ïîðÿäêîâûé òèï äàííûõ ( íà åãî áàçå âîçìîæíû ïåðå÷èñëåíèÿ è äèàïàçîíû).5.Ññûëêè è óêàçàòåëè6.Ôóíêöèîíàëüíûå òèïû äàííûõ (åãî åäèíèöàìè ÿâëÿþòñÿ ïðîöåäóðû è ôóíêöèè, êîòîðûå óæå ÿâëÿþòñÿ÷àñòüþ àáñòðàêöèè)1.Öåëî÷èñëåííûå òèïû äàííûõ.Ïðîáëåìû1.1 Ôèêñàöèÿ ïðåäñòàâëåíèÿ è ñâÿçàííûé ñ íèì íàáîð ïðîáëåì.1.2.Áåç çíàêîâûå öåëûå ÷èñëà. Ñàìûé ïðîñòîé â ýòîì ïëàíå ÿçûê ïàñêàëü.Íî íåò ðàçíèöû ìåæäó 2-õ áàéòîâûì, 4-õ áàéòîâûì è 8-è áàéòîâûìè ÷èñëàìè. Èç ñîîáðàæåíèé ýôôåêòèâíîñòè ïðèõîäèòñÿ ââîäèòü öåëûé íàáîð öåëî÷èñëåííûõ òèïîâ äàííûõ. Ïåðâàÿ âåðñèÿ ÿçûêà Ñ ïîÿâèëñÿ äëÿìèíè ÝÂÌ.
Ïîòîì áûë ïîðòèðîâàí è íà äðóãèå àðõèòåêòóðû. Åäèíñòâåííûé ðàçìåð òèïà êîòîðûé ôèêñèðîâàí â ñòàíäàðòå òèï char çàíèìàë ðîâíî 1 áàéò. Äàëåå short int, int, long int, long long. Ïðè ýòîì ïðåäñòàâëåíèå â ÿçûêå Ñ íå ôèêñèðóåòñÿ. Åñëè òðåáóåòñÿ ôèêñèðîâàííîå ïðåäñòàâëåíèå òî ñëåäóåò îïðåäåëèòü typedefíîâûé òèï äàííûõ. Ýòà ñèñòåìà áûëà óíàñëåäîâàíà è ÿçûêîì Ñ++. Íîâûå ßÏ - Ñ# è Java ïðåäíàçíà÷àëèñüäëÿ íåñêîëüêî äðóãèõ öåëåé. Ñ# - àðõèòåêòóðà CLI â êîòîðîé ñóùåñòâóåò CommonTypeSystem.×òîáû ñäåëàòü ÿçûê óíèâåðñàëüíûì, ñîçäàòåëè ðåàëèçîâàëè ïîëíóþ ìàòðèöó òèïîâ äàííûõ ( âñå 8 òèïîâäàííûõ 1 2 4 8 çíàêîâûå è áåç çíàêîâûå).1 sbyte byte2 short ushort4 int uint8 long ulongÑ ðàçâèòèåì 64 áèòíûõ àðõèòåêòóð, ëþäè íå çàõîòåëè ïåðåïèñûâàòü âñå ïðîãðàììû íà Ñ íà íîâóþ 64áèòíóþ àðõèòåêòóðó.
Îñíîâíàÿ ïðîáëåìà 32 áèòíûõ àðõèòåêòóð àäðåñàöèÿ ïàìÿòè. Ïîýòîìó ñåé÷àñ âîñíîâíîì èñïîëüçóþòñÿ 64õ32 âñÿ áàçèñíàÿ àðèôìåòèêà 32 áèòíàÿ, íî àäðåñàöèÿ 64 áèòíàÿ. Ñ ÿçûêîì javaíåñêîëüêî äðóãàÿ ñèòóàöèÿ âñÿ ïåðåíîñèìîñòü ðåàëèçóåòñÿ êîíöåïöèåé Java ìàøèíû òî åñòü äîñòàòî÷íîðåàëèçîâàòü íà äàííîé àðõèòåêòóðå JRE ìàøèíó.  Java åñòü 4 îñíîâíûõ òèïà ñ ôèêñèðîâàííûì ïðåäñòàâëåíèåì (byte, short, int, long). Ýòî ïîçâîëÿåò òî÷íî äåòåðìåíèðîâàòü ñåìàíòèêó âûïîëíåíèÿ ïðîãðàììû íàëþáîé ïëàòôîðìå.Ïðîáëåìà ñðàâíåíèå çíàêîâûé è áåç çíàêîâûé ÷èñåë. Ñìåøèâàòü èõ îïàñíî òàê êàê ìîæåò ïîñòðàäàòüëîãèêà ïðîãðàììû è òàêóþ îøèáêó òÿæåëî îòëîâèòü.
Ïðèìåð ÿçûê Ìîäóëà-2. Òàì áûë ââåäåí òèï äàííûõINTEGER è CARDINAL. Ïðåîáðàçîâàíèå ìåæäó íèìè ìîãëî áûòü òîëüêî ÿâíûì.  Ñ++ íåò îãðàíè÷åíèÿíà òàêèå ïðåîáðàçîâàíèÿ.Çà÷åì íóæåí áåç çíàêîâûé òèï äàííûõ äëÿ 32 áèòíûõ àðõèòåêòóð ðàáîòà ñî ñäâèãàìè (áåç çíàêîâûéñäâèã), àäðåñíàÿ àðèôìåòèêà. Îáåðîíå åñòü ñëåäóþùèå òèïû äàííûõ byte (0 255), short, integer, longint.Ýòà ñèñòåìà ïîòîì ïåðåøëà â java òóò íåò áåç çíàêîâûõ ÷èñåë è ñîîòâåòñòâåííî íåò ïðîáëåì ñ èõ ïðåäñòàâëåíèåì. C# ïîçâîëÿåò âûïîëíÿòü Ñ êîä â unsafe().  Java âìåñòî áåç çíàêîâûõ ÷èñåë åñòü áåç çíàêîâûéñäâèã ¿>.13Ëåêöèÿ 7.Äâà ïîäõîäà ê ðåàëèçàöèè ÷èñëîâûõ òèïîâ äàííûõ.1.Ôèêñèðîâàííûé áàçèñ (ïðèìåðû ßÏ - ñì ïðîøëóþ ëåêöèþ)Ôèêñèðóåòñÿ íîìåíêëàòóðà ÷èñëîâûõ òèïîâ (ÿçûêè Ñ,Ñ++, Ñ#, Delphi, java, Modula -2, Oberon).
Òî åñòüñêàçàíî ÷òî ê öåëî÷èñëåííûì òèïàì äàííûõ îòíîñÿòñÿ îïðåäåëåííûå òèïû äëÿ êîòîðûõ ìíîãèå ïàðàìåòðûôèêñèðîâàíû.  C#, M-2, Oberon, Java, Delphi ðàçìåðíîñòü òàêèõ òèïîâ ôèêñèðîâàíà. Òàê æå çàôèêñèðîâàíà ñåìàíòèêà Âî âñåõ êðîìå java ýòî áûëî ïðîñòî, òàê êàê îíè îðèåíòèðîâàëèñü íà îïðåäåëåííóþñèñòåìó. Äëÿ java ýòî áûëî ñëîæíåå, òàê êàê âñÿ ðàáîòà ïî ðåàëèçàöèè ñåìàíòèêè ëîæèòñÿ íà èíòåðïðåòàòîð. Ôèêñàöèÿ áàçèñà îðèåíòèðîâàííà íà ìàêñèìàëüíóþ ýôôåêòèâíîñòü. Ôèêñàöèÿ íîìåíêëàòóðû, íî áåçôèêñàöèè ïðåäñòàâëåíèÿ ñîçäàåò òðóäíîñòè äëÿ ïåðåíîñèìîñòè (ÿçûê Ñ).Ñîçäàòåëè java íå ìîãëè æåðòâîâàòüïåðåíîñèìîñòüþ, ïîýòîìó îíè ïîæåðòâîâàëè ýôôåêòèâíîñòüþ.2.Îáîáùåííûå ÷èñëîâûå òèïû.Ðàññìîòðèì íà ïðèìåðå ÿçûêà ÀÄÀ.
Ïðîãðàììû íà ýòîì ÿçûêå äîëæíû áûëè ôóíêöèîíèðîâàòü íà ðàçëè÷íûõ àðõèòåêòóðàõ (êàê íà ñóùåñòâóþùèõ, êàê è íà òåõ ÷òî åùå ìîãëè ïîÿâèòüñÿ), ïîýòîìó áûëî íåâîçìîæíîôèêñèðîâàòü áàçèñ ïðåäñòàâëåíèÿ ÷èñëîâûõ òèïîâ.Ïåðåä ïðîãðàììàìè íà ÿçûêå àäà ñòàâèëèñü íåñêîëüêî òðåáîâàíèé.-Ýôôåêòèâíîñòü.-Íàäåæíîñòü.-×èòàáåëüíîñòü.Äëÿ âûïîëíåíèÿ ýòèõ òðåáîâàíèé â ÿçûêå àäà áûë ââåäåíû îáîáùåííûå íå èìåíîâàííûå ÷èñëîâûå òèïû,à âñå îñòàëüíûå ÷èñëîâûå òèïû áûëè åãî ïîòîìêàìè.
Âòîðîé êîíöåïöèåé ÿçûêà àäà áûëà îñîáàÿ êîíöåïöèÿòèïà. Îáúåêòû ðàçíûõ òèïîâ áûëè íåñîâìåñòèìû íè ïî êàêîìó ìíîæåñòâó îïåðàöèé, íî áûëè ñîâìåñòèìûîáúåêòû ïîä-òèïîâ. Òî åñòü ðàçíûå ïîä-òèïû ñîâìåñòèìû ìåæäó ñîáîé è ñî ñâîèì ïðåäêîì. Íàïðèìåð, ðàññìîòðèì ñëåäóþùåå îáúÿâëåíèå íà ÿçûêå àäà.type NewInt is new integer; - Adatype NewInt = integer;Ïàñêàëütypedef int NewInt// ÑÂ ÿçûêå Ñ typedef íå îïðåäåëÿåò íîâûé òèï, à îïðåäåëÿåò íîâûé ñèíîíèì òèïà, êîãäà êàê â àäà è ïàñêàëåîí îïðåäåëÿåò íîâûé òèï. Òî åñòü â ÿçûêå àäà íåëüçÿ ïðèñâàèâàòü îáúåêòû òèïà NewInt è integer.Íàïðèìåð type Length is new integer range 0..MaxLen.
Òåïåðü ýòî íîâûé òèï äàííûõ ñ ñîîòâåòñòâóþùèìèîãðàíè÷åíèÿìè íà çíà÷åíèå. Ïðè÷åì ýòî íîâûé òèï (new) òî åñòü îí íå ñîâìåñòèì ñ äðóãèìè òèïàìè.Type int16 is new integer range -32768..32767type uint16 in new integer range 0..65535Ýòî äâà íîâûõ òèïà, òî åñòü èõ íåëüçÿ ñìåøèâàòü.Òî åñòüi16 : int16;ui16 : uint16;i16 := ui16 ; îøèáêài16 := Int16(ui16) íå îøèáêà òàê êàê åñòü îáùàÿ áàçà (int).Âñå ïðåîáðàçîâàíèÿ áåçîïàñíû, òî åñòü â ñëó÷àå îøèáêè âûäàåòñÿ èñêëþ÷èòåëüíàÿ ñèòóàöèÿ. Åñëè òðåáóþòñÿ íåÿâíûå ïðåîáðàçîâàíèÿ, òî íåîáõîäèìî èñïîëüçîâàòü êîíöåïöèþ ïîä-òèïà:subtype POSINT is integer range 1..MAXsubtype naturale is integer range 0..MAX1;Äàëåå èñõîäÿ èç àðõèòåêòóðû êîìïèëÿòîð âûáèðàåò îïòèìàëüíîå ïðåäñòàâëåíèå äëÿ òàêèõ ÷èñåë.
Òîåñòü äëÿ ïåðåíîñèìîñòè íåîáõîäèìî ÿâíî çàäàòü äèàïàçîí çíà÷åíèé (à íå ïðåäñòàâëåíèå). Òî åñòü ïðîáëåìàïðåäñòàâëåíèÿ ëîæèòñÿ íà êîìïèëÿòîð. Òåïåðü âîçìîæíà òàêàÿ çàïèñü.n: NATURAL;p:POSINT;äëÿ ïðèñâàèâàíèÿ p=n íåîáõîäèì êîíòðîëü çíà÷åíèÿ n, òî åñòü êîìïèëÿòîð ëèáî ïðîâåðÿåò çíà÷åíèå n íàýòàïå òðàíñëÿöèè, åñëè ýòî âîçìîæíî, ëèáî âñòàâëÿåò êîä ïî ïðîâåðêå ïåðåä ïðèñâàèâàíèåì. Òàêîé êîíòðîëüíàçûâàåòñÿ êâàçèñòàòè÷åñêèì. Òî åñòü åñëè âñÿ èíôîðìàöèÿ åñòü íà ýòàïå òðàíñëÿöèè òî îñóùåñòâëÿåòñÿñòàòè÷åñêèé êîíòðîëü, èíà÷å êâàçèñòàòè÷åñêèé.
Òàêîé æå êîíòðîëü åñòü â ÿçûêå Ïàñêàëü, C# è java. ÂÑ# òàêîå îãðàíè÷åíèå ìîæíî îáîéòè ñ ïîìîùüþ ïîìåòêè ¾íåáåçîïàñíîãî êîäà¿. àäå â ñëó÷àå îøèáêè âûõîäà çà ãðàíèöó âîçáóæäàåòñÿ èñêëþ÷èòåëüíàÿ ñèòóàöèÿ (range error). Áåçîïàñíûìè âñåãäà ÿâëÿþòñÿ îïåðàöèè ðàñøèðåíèÿ òèïà. íà÷àëå âñå òèïû äàííûõ èìåëè ôèêñèðîâàííûé áàçèñ. Äàëåå ñ ðàçâèòèåì ßÏ ñòàëè ïîÿâëÿòüñÿ ßÏñ îáîáùåííûìè òèïàìè äàííûõ. Äàëåå C# è òàê äàëåå âîçâðàò ê ôèêñèðîâàííîìó áàçèñó.
Íî ñåé÷àñíà÷èíàåò ðàçâèâàòüñÿ ñíîâà ïîäõîä ñ îáîáùåííûìè òèïàìè òàê êàê íà íèõ ïðîùå ïðîãðàììèðîâàòü. Ýòî14òåíäåíöèÿ ñîâðåìåííîñòè, êîãäà äàæå â ïðîìûøëåííîì ïðîãðàììèðîâàíèè ñòàëè ïðèìåíÿòüñÿ èíòåðïðåòèðóåìûå ßÏ.Ïðåäñòàâëåíèå âåùåñòâåííûõ òèïîâ.1.Ïëàâàþùàÿ òî÷êà±M.B P (çíàê| ìàíòèñà | ïîðÿäîê (B - îñíîâàíèå ñèñòåìû ñ÷èñëåíèÿ)). ñëó÷àå âåùåñòâåííûõ ÷èñåë ðàçáðîñ åùå áîëüøå ÷åì â ñëó÷àå öåëî÷èñëåííûõ. Òàê æå êàê äëÿ öåëî÷èñëåííûõ òèïîâ èñïîëüçóåòñÿ 2 ïîäõîäà ñ ôèêñèðîâàííûì áàçèñîì è ñ îáîáùåííûì ïðåäñòàâëåíèåì.1985 IEEE ñòàíäàðòèçîâàëî ôîðìàò ïðåäñòàâëåíèÿ âåùåñòâåííûõ òèïîâ.Ïðåäñòàâëåíèå â âèäå ìàíòèñû è ïîðÿäêà äëÿ êàæäîãî ÷èñëà íå åäèíñòâåííî.