лекции (2008) (by Kravets) (укороченное) (1160827), страница 3
Текст из файла (страница 3)
Ìíîãèåïîíÿòèÿ ñîâðåìåííûõ ÎÎßÏ ïðèøëè èìåííî èç smalltalk. Íàïðèìåð ìåòîä - ìåòîä äîñòóïà - ïîíÿòèå ÿçûêàsmalltalk. Ñëîâî super â java òàê æå ïîíÿòèå èç smalltalk. Íî ïðè ýòîì îí áûë êðàéíå íåýôôåêòèâíûì.Åùå îäíà îñîáåííîñòü ýòîãî ÿçûêà - äëÿ ïðîñòîòû åãî ðåàëèçàöèè áûëî ðàçðàáîòàíî ñïåöèàëüíîå ïðåäñòàâëåíèå - áàéò-êîä. Òî åñòü èìåëñÿ òîëüêî îäèí êîìïèëÿòîð è èíòåðïðåòàòîðû áàéò êîäà äëÿ êàæäîéöåëåâîé ìàøèíû.Ñ òî÷êè çðåíèÿ èíäóñòðèàëüíîãî ïðîãðàììèðîâàíèÿ ñàìûì âàæíûì ÎÎßÏ ÿâëÿåòñÿ ÿçûê Ñ++. 1986 ïîÿâèëàñü âåðñèÿ Ñ++ 2.0 - ïåðâàÿ øèðîêî äîñòóïíàÿ âåðñèÿ ÿçûêà. 1990 - äîáàâëåíû øàáëîíû è èñêëþ÷åíèÿ.
Ñàìîé ãëàâíîé îøèáêîé ïðîåêòèðîâàíèÿ Ñòðàóñòðóï ñ÷èòàåòòî, ÷òî âî âðåìÿ ïîäãîòîâêè âåðñèè 1986 ãîäà îí ñîñðåäîòî÷èëñÿ íà ìíîæåñòâåííîì íàñëåäîâàíèè à íå íàøàáëîíàõ.  smalltalk íå áûëî ìíîæåñòâåííîãî íàñëåäîâàíèÿ, è ìíîãèå ïîáîðíèêè ýòîãî ÿçûêà ñ÷èòàþò ÷òîåãî è íå äîëæíî áûòü â ÎÎÏ. 1990-õ áûëî ðàçðàáîòàíî ìíîæåñòâî êîìïèëÿòîðîâ Ñ++.
Ïðè ýòîì âñÿ STL ðàçðàáîòàíà íà øàáëîíàõ.Ïðè ýòîì âî âñåõ êîìïèëÿòîðàõ áûëè ðàçíûå ðåàëèçàöèè øàáëîíîâ, ÷òî ïðèâåëî ê òîìó ÷òî êàæäûé êîìïèëÿòîð äîëæåí áûë èìåòü ñâîé âàðèàíò áèáëèîòåêè.  1998 áûë ïðèíÿò ñòàíäàðò è áûëà ðàçðàáîòàíà åäèíàÿáèáëèîòåêà. 1990 Ñ++ ñòàë ñàìîñòîÿòåëüíûì, íå çàâèñèìûì îò Ñ ÿçûêîì. Äî 1990 Ñòðàóñòðóï áîÿëñÿ ââîäèòüíîâûå êëþ÷åâûå ñëîâà òàê êàê ýòî ìîæåò ïðèâåñòè ê íåñîâìåñòèìîñòè ñ ïðåäûäóùèìè âåðñèÿìè. Ïîñëå 1990ïîÿâèëèñü íîâûå êëþ÷åâûå êëþ÷åâûå ñëîâà (øàáëîíû, namespace, RTTI, STL).Óæå ê 1994 ãîäó âñå ýòî áûëîðàçðàáîòàíî, íî STL çàäåðæàëî âûïóñê ñòàíäàðòà äî 1998.
Äàæå MSVC++ (Microsoft Visual C++) äî ñèõïîð íå ïîääåðæèâàåò âñå òðåáîâàíèÿ ñòàíäàðòà.STL - ýòî íå òîëüêî èíòåðôåéñ, íî è ðåàëèçàöèÿ êîòîðóþ íå ñîâñåì ïîëíî ïîääåðæèâàåò äàæå .MSVC++.Òàêèì îáðàçîì ïëàòôîðìà STL - ýòî íàáîð øàáëîíîâ + êîìïèëÿòîð. Òàêèõ øàáëîíîâ, êàê â Ñ++, áîëüøåíèãäå íåòó.
Ñåé÷àñ ãîòîâèòñÿ íîâûé ñòàíäàðò TR1 è ñòàíîâèòñÿ âèäíî, ÷òî ñ++ ñòàë î÷åíü ñëîæíûì ( íåïðîùå ÀÄÀ). Íî Ñ++ îäèí èç íàèáîëåå ìîùíûõ ßÏ ( è ñàìûé ìîùíûé ßÏ íà ñåãîäíÿøíèé äåíü). Ñåé÷àñðàçâèòèå Ñ++ èäåò ïî ïóòè ðàçâèòèÿ STL. C++ - ÿçûê â êîòîðîì äàíû î÷åíü ïðîñòûå áàçîâûå ñðåäñòâà, àâñå îñòàëüíîå ðåàëèçóåòñÿ ñ ïîìîùüþ êëàññîâ, ÷òî äåëàåò Ñ++ íàèáîëåå ãèáêèì ßÏ. 1988 ãîäó ïîÿâèëñÿ ÿçûê îáåðîí, â 1993 - îáåðîí 2, êîòîðûé ÿâëÿåòñÿ ñàìûì êîìïàêòíûì ÎÎßÏ. åãîðåàëèçàöèè èñïîëüçóåòñÿ ïðèíöèï ìèíèìóìà ÿçûêîâûõ êîíñòðóêöèé.ßçûê Eiel - øèðîêî èçâåñòåí â óçêèõ êðóãàõ, íî ó íåãî íå ïîÿâèëîñü ñâîåé ýêîëîãè÷åñêîé íèøè. Ïðè÷èíà - â 1980 àêòèâíî èñïîëüçîâàëèñü ÎÎßÏ, êîòîðûå ÿâëÿëèñü ðàñøèðåíèÿìè ðåàëüíî ñóùåñòâóþùèõ ßÏ.Ïðè ýòîì âñå íåäîñòàòêè áàçîâûõ ßÏ ïðîíèêàëè â ýòè ÿçûêè.
Òàê, Ñ++ - ðàñøèðåíèå Ñ, ïîëó÷èë âñå åãîíåäîñòàòêè.Objective C - ÿçûê Ñ â êîòîðûå äîáàâëåíû ÷àñòü êîíñòðóêöèåé smalltalk. Object Pascal, Turbo Pascal (ÎÎíà÷èíàÿ ñ ïÿòîé âåðñèè), äàëåå - ñèñòåìà Äåëüôè. Ñåé÷àñ C# çàìåùàåò Delphi.Èòàê áîëüøèíñòâî ÎÎßÏ îñíîâàíû íà Ñ++, ïðè ýòîì òàêèå ÿçûêè êàê java, C#, Delphi -ñèëüíåå ñõîæèäðóã ñ äðóãîì ÷åì ñ Ñ++.Ñèñòåìà J++ - ðåàëèçàöèÿ java íà VS.ßçûê Java - àíîíñèðîâàí â 1995 (C# - àíîíñèðîâàí â 1999).Ýòè ÿçûêè áûëè ðàçðàáîòàíû ñ íóëÿ - òî åñòüáåç ðàñ÷åòà íà ñîâìåñòèìîñòü.Ïðèíöèï java - WORA (write once - run anywhere).
Êîíöåïöèÿ ÿçûêà áëèçêà ê êîíöåïöèè óíèâåðñàëüíîãîßÏ. åãî ñîñòàâ âõîäèò JVM - âèðòóàëüíàÿ ìàøèíà äëÿ èñïîëíåíèÿ áàéò êîäà.  60-å 70-å áûëè ïðîåêò ïîðåàëèçàöèè ìàøèíû êîòîðûå íà âõîä ïîëó÷àëè ßÏ âûñîêîãî óðîâíÿ, òî åñòü ÿâëÿâøèåñÿ âåùåñòâåííûìèðåàëèçàöèÿìè âèðòóàëüíûõ ìàøèí.Symbol ðåàëèçàöèÿ Algol60.
 ÑÑÑÐ áûëà ðàçðàáîòàíà ìàøèíà ÌÈÐ.  70-õ, ýòè ðàçðàáîòêè ñâåðíóëèè ñòàëè êîïèðîâàòü ðàçðàáîòêè èíîñòðàííûõ êîìïàíèé.7ßçûê Lisp - ÿçûê èññëåäîâàíèÿ ÈÈ è ýêñïåðòíûõ ñèñòåì. Áûëà êîìïàíèÿ êîòîðàÿ âûïóñêàëà àïïàðàòíûå ðåàëèçàöèè Lisp ìàøèí. Äàëåå áûëà èäåÿ èíòåðïðåòàöèè ïðîìåæóòî÷íîãî ïðåäñòàâëåíèÿ ïðîãðàììû.Ñèñòåìà UCSD-Pascal - òðåáîâàëñÿ åäèíûé êîìïèëÿòîð äëÿ ðàáîòû íà ðàçíûõ àðõèòåêòóðàõ.
Áûëà ðàçðàáîòàíà ñèñòåìà P-code (÷òî-òî òèïà ÏÎËÈÇ). Òî åñòü ñóùåñòâîâàë îäèí êîìïèëÿòîð ñ Pascal â P-code è ïîèíòåðïðåòàòîðó íà êàæäóþ àðõèòåêòóðó. Ýòî îêàçàëàñü ïðîñòîé è ýôôåêòèâíîé ñèñòåìîé ðàáîòàþùåé íàìíîæåñòâå ðàçëè÷íûõ àðõèòåêòóð.Àïïàðàòíàÿ ðåàëèçàöèÿ ßÏ - ìèêðîïðîöåññîð Katana - ìèêðîïðîöåññîð ðåàëèçóþùèé áàéò-êîä. ßçûêjava áûë ïðåäëîæåí êàê ÷èñòûé ÎÎßÏ ñ ñèíòàêñèñîì ïîõîæèì íà Ñ++.
Êðîìå òîãî ñóùåñòâóåò JVM èíòåðïðåòàòîð áàéò êîäà ("ÿçûêà àññåìáëåðà"äëÿ JVM).RTL - real time lib - ïîääåðæêà ïðîãðàìì âî âðåìÿ ðàáîòû.Java Runtime Environment - JVM + RTL. Âñå ÷òî íóæíî ÷òîá ðåàëèçîâàòü java äëÿ íåêîé àðõèòåêòóðû ýòî ðåàëèçîâàòü JRE äëÿ ýòîé ïëàòôîðìû. Ñóùåñòâóåò íåñêîëüêî âàðèàíòîâ java ñèñòåì, íàïðèìåð java2 ME(micro edition), SE (standard), EE (enterprise). Äëÿ âñåõ ñèñòåì îäèí è òîò æå êîìïèëÿòîð - îíè ðàçëè÷àþòñÿòîëüêî íàáîðîì áèáëèîòåê, ïðè ýòîì ñàì ÿçûê îäèí è òîò æå.Ñóùåñòâóåò ïðîãðàììà ïî ñåðòèôèêàöèè javaìàøèí ( ôèðìîé Sum).1995 - çíàêîâûé ãîä, ïîÿâèëàñü Win95.
Ms õîòåëè ñäåëàòü ñâîé èíòåðíåò MSN. Óñòàíîâêà WIn95 íå äîïóñêàëà âîçìîæíîñòü ðàáîòû ñ îòêðûòûìè ñåòÿìè. È òóò ïîÿâèëñÿ ïðîåêò êîòîðûé ïîçâîëÿë ðàáîòàòü íàëþáîé ïëàòôîðìå. Áîëåå òîãà java - èçíà÷àëüíî èíòåðíåò ÿçûê, java applet ïðèëîæåíèå âûïîëíÿþùèåñÿâ èíòåðíåò browser. Áûë ïðèäóìàí ÿçûê LiveScript - ÿçûêå ðàçðàáàòûâàåìûé êàê çàìåíà html.
Òîãäà äàæåáûëè èäåè ÷òî ñêîðî âñå áóäóò ïèñàòü íà java, è òîëüêî èíòåðíåò ïðèëîæåíèÿ,íî ýòîãî íå ïðîèçîøëî.Ãëàâíûå íåäîñòàòêè java - ïîòåðè ñêîðîñòè íà èíòåðïðåòàöèè è íåýôôåêòèâíîñòü ñáîðêè ìóñîðà. Ïðèýòîì java - èäåàëüíûé âûõîä êîãäà íóæíî îáåñïå÷èòü ìîíî ÿçû÷íóþ ñðåäó íà ìíîãèõ ïëàòôîðìàõ. Ïðèýòîì java îñòàåòñÿ ñîáñòâåííîñòüþ ôèðìû Sun. Ýòî ïðèâåëî ê íåêîìó íåæåëàíèþ ìíîãèõ ïåðåõîäèòü íà java,íî íåñìîòðÿ íà ýòî java ñåé÷àñ î÷åíü ðàñïðîñòðàíåííûé ßÏ. Ïî ñðàâíåíèþ ñ Ñ++ java áîëåå ñîâðåìåíåí(÷èñòûé ÎÎßÏ, ïðîùå ÷åì Ñ++).ßçûê C# - ðàçðàáîòêà MS.
Ðàíüøå ÷òîáû ïðîãðàììèðîâàòü íóæíî áûëî èçó÷èòü ßÏ è òî êàê çàïóñêàåòñÿ ïðîãðàììà â íåêîé âû÷èñëèòåëüíîé ñðåäå. Òåïåðü æå íóæíî åùå çíàòü ïëàòôîðìó ïîä êîòîðóþ áóäåòïèñàòüñÿ ïðîãðàììà. Ñåé÷àñ ñàìîå ñëîæíîå - èçó÷åíèå ñîîòâåòñòâóþùèõ API. ( Unix, íàïðèìåð, èç áîëüøå1000).Ïîäõîä MS äîñòàòî÷íî ñèëüíî îòëè÷àåòñÿ îò ýòîãî. Âìåñòî ñòàíäàðòèçàöèè ßÏ, îíè ïðåäëîæèëè ñòàíäàðòèçîâàòü áèáëèîòåêè.  ðåçóëüòàòå ïîÿâèëñÿ ñòàíäàðò CLI (common language infrostructure).  ýòîò ñòàíäàðòâõîäèò- CTS îáùàÿ ñèñòåìà òèïîâ- Il ïðîìåæóòî÷íûé ÿçûê (âàðèàíò àññåìáëåðà), íî íå çàâèñèò îò ïëàòôîðìû.- Pe ôîðìàò - ôîðìàò èñïîëíÿåìûõ ôàéëîâ - íå çàâèñèò îò ïëàòôîðìû.- ñòàíäàðòèçàöèÿ RTLòî åñòü âñåãäà îäèí è òîò æå ñáîðùèê ìóñîðà, îäèí è òîò æå íàáîð êîëëåêöèé. Òåïåð íå âàæíî êàêîé âûáðàòüÿçûê - âàæíî ÷òîá îí âõîäèë â ýòó ñïåöèôèêàöèþ.
Ves - âèðòóàëüíàÿ èñïîëíèòåëüíàÿ ñðåäà. CLR - commonlanguage runtime - ðåàëèçàöèÿ âèðòóàëüíîé èñïîëíèòåëüíîé ñèñòåìû â .NET.JScript.NETVB.NETFoxPro.NETC++/CLIÑ++ â åãî îáû÷íîé ðåàëèçàöèè íåëüçÿ ðåàëèçîâàòü â ýòîé ñèñòåìå (íàïðèìåð ñáîðêè ìóñîðà â ýòî ÿçûêåíåòó) ïîýòîìó CLI "óïðàâëÿåìûé"Ñ++. Òî åñòü ê ñèíòàêñèñó Ñ++ äîáàâèëè íîâûå ñïåöèôè÷åñêèå äëÿ.NET êëþ÷åâûå ñëîâà. Ìîæíî ñêàçàòü ÷òî, ê Ñ++ äîáàâèëè ÿçûê C#.Äàëåå òðåáîâàëñÿ "ðîäíîé"ßÏ äëÿ ýòîé ñèñòåìû - ñàìûé óäîáíûé ÿçûê äëÿ ýòîé ñèñòåìû,ïðè ýòîì íåòðåáîâàëàñü ñîâìåñòèìîñòü, òàê êàê ðàçðàáàòûâàëñÿ ñ 0, òàêèì ÿçûêîì ñòàë C#.JSharp - ýòî ÷èñòûé ÿçûê java, íî ïðè ýòîì åãî RTL áåðåòñÿ èç CLR (.NET áèáëèîòåêè).Òî åñòü ýòîáûëî óêàçàíèå íà âîçìîæíîñòü ïåðåõîäà ñ ïî÷òè ëþáîé ïëàòôîðìû íà ïëàòôîðìó .NET.
Ðåàëèçàöèÿ Ñ++â .NET ñòðàäàåò áîëüøèì ÷èñëîì îøèáîê.  îòëè÷èè îò java ñèñòåì, åñòü ECMA íåçàâèñèìàÿ àññîöèàöèÿïðîèçâîäèòåëåé êîìïüþòåðîâ, â òîì ÷èñëå îíà ñòàíäàðòèçóåò êîìïüþòåðíûå ñèñòåìû, â òîì ÷èñëå è ßÏ.CLI èÑ# ñòàíäàðòèçîâàíû ECMA. Îäíàêî ñòàíäàðòû ECMA íå ñîâñåì ïîëíî ñîîòâåòñòâóþò ñïåöèôèêàöèè ÿçûêàÑ#, íî òåì íå ìåíåå ôîðìàëüíî âëàäåëüöåì C# ÿâëÿåòñÿ ECMA.
Òàê æå ECMA Script - ñòàíäàðòèçîâàííûåâàðèàíò java script.Ñåé÷àñ - C# æèâîé è äèíàìè÷íûé ßÏ - ñåé÷àñ óæå C# 3.0. Âî âòîðîé âåðñèè Ñ# ïîÿâèëèñü îáîáùåíèÿ,â òðåòüåé âåðñèè - lambda ôóíêöèè.Îñíîâíîå ðàçâèòèå ñèñòåìû java øëî ïî ïóòè ðàçâèòèÿ ñòàíäàðòíîé áèáëèîòåêè, íî âåðñèè ÿçûêà ìåíÿëèñüíå ñèëüíî, õîòÿ â 2005 ãîäó ïðîèçîøëà ãåíåðàëüíàÿ ðåâèçèÿ ÿçûêà, Java5 (âåðñèÿ 2005 ãîäà), â êîòîðóþäîáàâèëèñü îáîáùåíèÿ êàê â Ñ#.Ïîêà çà ïðåäåëàìè ðàññìîòðåíèå îñòàëèñü ñêðèïòîâûå ßÏ -ïðèíöèïèàëüíî èíòåðïðåòèðóåìûå ßÏ, áåç8âñÿêîé êîìïèëÿöèè. Ðàçâèòèå òàêèõ ßÏ ñâÿçàííî ñ ðàçâèòèåì âåá óçëîâ.Perl,PHP,Python.
- ïðèìåðû òàêèõÿçûêîâ, íî ñ êîíöåïòóàëüíîé òî÷êè çðåíèÿ îíè íå ñèëüíî îòëè÷àþòñÿ îò òåõ ßÏ î êîòîðûõ ãîâîðèëîñü âûøå.9Ëåêöèÿ 5Ãëàâà 3 Îñíîâíûå ïîíÿòèÿ ßÏÏóíêò 1. Îñíîâíûå ïîçèöèè ïðè ðàññìàòðèâàíèè ßÏ1.Òåõíîëîãè÷åñêàÿ.Ñ òî÷êè çðåíèÿ òåõíîëîãè÷åñêèõ ïîòðåáíîñòåé, îäíîé èç ñàìûõ âàæíûõ âîçìîæíîñòåé ÿçûêà ïðîãðàììèðîâàíèÿ ÿâëÿåòñÿ âîçìîæíîñòü ðàçäåëåíèÿ ïðîãðàììû íà ìîäóëè ( ýòî íåîáõîäèìî äëÿ èíäóñòðèàëüíîãîïðîãðàììèðîâàíèÿ)2.Ðåàëèçàòîðñêàÿ ïîçèöèÿ àâòîðà/ ðåàëèçàòîðà ßÏ.Ñóùåñòâóåò ìíåíèå, ÷òî ñåé÷àñ äàííàÿ ïîçèöèÿ íå àêòóàëüíà, òî åñòü ìîæíî îáúÿñíèòü ëþáîé ßÏ áåçäàííîé ïîçèöèè. Íî òåì íå ìåíåå â 60- õ ñóùåñòâîâàëî ìíåíèå ÷òî ßÏ ýòî òî ÷òî ðåàëèçóåò äàííûéêîìïèëÿòîð.