1. Történeti áttekintés

iDevice ikon

Az objektum-orientált programozás történeti áttekintése

Rövid történeti áttekintést adjunk az objektum-orientált szemlélet szerinti programozást megvalósító programnyelvek kialakulásáról, a mérföldkőnek számító programozási nyelvekről, valamint azok megalkotóiról. Megismerjük, hogyan alakult ki az objektumorientált tervezés módszertana, ill. a módszerek egységesítéséből, szabványosításából hogyan született meg az UML, az egységesített modellező nyelv.

Az objektum-orientált programozás elmélete meglehetősen régi keletű. Ősének az 1960-ban megalkotott Simula-67 nyelvet tartják, amelyet szimulációs feladatok elvégzésére fejlesztettek ki Oslóban (Simulation language).

1. ábra
a Simula programozási nyelv megalkotói és a Simula I. kézikönyve
(kép forrása: http://heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html)

A nyelv kialakítása Kristen Nygaard és Ole-Johan Dahl nevéhez fűződik, akik a nyelv eredeti verzióját az ALGOL60 nyelv kiterjesztéseként alkották meg (Simula I), amit aztán később 1968-ban Simula-67 néven szabványosítottak. A Simula-67 már tartalmazza az alapvető objektum-orientált alapelveket, mint az osztályba sorolás, az egységbezárás és a leszármazott osztályok.

Lényegében ennek hatására kezdtek el dolgozni a XEROX cég Paolo Alto-i kutatóintézetének (PARC - Paolo Alto Research Center) fejlesztői a Smalltalk nevű programnyelven, amit 1972-től kétévente újabb és újabb verziókkal frissítettek. Sajnos a programozói világ a hetvenes években nem tulajdonított kellő figyelmet az új paradigma, az objektum-orientált szemlélet alapján kialakuló programnyelveknek, így a Smalltalk egyes verzióinak sem.

2. ábra
Bjarne Stroustrup, a C++ programnyelv megalkotója
(kép forrása: http://www2.research.att.com/~bs/homepage.html)

Az 1980-as években fejlesztette ki Bjarne Stroustrup az AT&T Bell laboratóriumában a C++ nyelvet a korábban már széleskörűen elterjedt és használt C programozási nyelv kiterjesztéseként, más nyelvekből, (pl.: Simula, ALGOL) is átvéve ötleteket.

A C++ nyelv, miután a hagyományos programozásra alkalmas C programnyelvből nőtte ki magát, és továbbra is lehetővé teszi a hagyományos programozást igazából egy hibrid nyelvnek tekinthető. (Tiszta objektum orientált nyelvnek nevezzük azokat a nyelveket, amelyek nem csak lehetővé teszik, hanem ki is kényszerítik az objektum-orientált elvek betartását. Ilyen nyelv többek közt a már említett Smalltalk is.) A C++ elterjedtségének oka abban is keresendő, hogy szinte minden ismert operációs rendszer alá létezik C++ fordító, azaz platform független. Szintén hibrid nyelvnek tekinthető a kizárólag PC-ken futtatható Pascal egyes objektumorientált változatai, mint például az Object Pascal vagy a Delphi.

3. ábra
James Gosling
(kép forrása: http://www.taranfx.com/father-of-java-resigns)

Napjainkban az egyik leggyakrabban használt szigorúan objektumorientált programnyelv a 90-es évek elejétől a Sun Microsystems-nél fejlesztett (James Gosling és Patrick Naughton nevéhez fűződő) Java programozási nyelv. Egyedisége abban mutatkozik meg, ahogyan fejlesztői megoldották a platformfüggetlenségét.

A Java fordító a java virtuális gép számára (Java Virtual Machine - JVM) állít elő egy köztes kódot, amelyet aztán a virtuális gépen futó just-in-time compiler (JIT) fordít gépi kódú utasítássorozattá. A virtuális gép és a JIT azért nagy jelentőségű, mert igen eltérő hardver környezetben is ugyanúgy futtathatóak általa a Java programok. (A Java virtuális gép egyébként nem más, mint szoftveresen megvalósított, a Java programok utasításait gépi kódú utasításokká alakító futtató környezet.)

A Java elterjedtségét és ismertségét azonban nem csak platformfüggetlenségnek köszönheti, hanem, hogy a 90-es években rohamosan fejlődő web-alkalmazásokra is felkészítették. Az ez idáig statikus weblapokon kezdtek megjelenni az animációk, hangok és videók, mert a programnyelv kifejezetten támogatja mind a böngésző környezetből aktivizálható (applet), mind a webszervereken dinamikus HTML-lapokat gyártó (szervlet) java-alkalmazások fejlesztését.

 

Az objektum-orientált tervezés és elemzés módszertana az objektum-orientált programozás módszertanából fejlődött ki. A programozás fogásait általánosították, terjesztették ki tervezést szervező elvekké.

Az 1980-as évek végére nagyon sok olyan könyv jelent meg, amely az objektum-orientált tervezés és elemzés módszereit tárgyalta. Egymással párhuzamosan többféle módszertan is kialakulóban volt, amelyekhez különböző cégek eltérő CASE eszközöket készítettek. (Computer Aided Software Enginering - Szoftverkészítést segítő eszközök.)

Néhány CASE eszköz és a beépülő módszertanok a teljesség igénye nélkül:

  • Rational Rose (Rational Corporation)
    Beépülő módszerek: OMT - Object Modelling Technique - 1991, James Rumbaugh, USA;
    BOOCH - 1991- kidolgozója Grady Booch, USA;
    OOSE - Object-Oriented Systems Enginering - 1992, Ivar Jacobson, Svédország;
    UML - Unified Modelling Language - 1997, Grady Booch, James Rumbaugh, Ivar Jacobson.
  • OMTool (General Electric Research and Development Center)
    Beépülő módszer: OMT.
  • Objectory (Objective Systems)
    Beépített módszer: OOSE.
  • With Class (MicroGold Software)
    Beépülő módszerek: OMT, BOOCH, OOSE, UML.
  • Paradigm Plus (Platinum Technology).

Felmerült a szakma részéről az igény a különböző módszerek egységesítésére, szabványosítására. 1986-ban az Association of Computing Machinery (ACM) elindított egy konferenciasorozatot az OOPSLA-t (Object-Oriented Programming Systems, Languages and Application), amelyet azóta is minden évben megtartanak.

Az 1994-es OOPSLA konferencián James Rumbaugh és Grady Booch szándéknyilatkozott tett közös Objektum-orientált rendszerfejlesztési módszer kidolgozására, majd 1995-ben szintén ugyanitt közzétették az OMT és a BOOCH módszerek egyesítésének vázlatát.

4. ábra
UML logó

1997-ben már Ivar Jacobsonnal kiegészülve hárman jelentették be az UML-t (Unified Modelling Language - Egységes Modellező Nyelv).

5. ábra
Grady Booch, James Rumbaugh és Ivar Jacobson
(kép forrása: http://www.sa-depot.com/?page_id=217)

Talán érdemes megemlíteni, hogy az objektum orientált nyelvek viszonylag kései elterjedésének több akadálya van. Néhány ezek közül:

  • A strukturális programozásban nagy rutint szerzett programozóknak gyakran nagyon nehéz átállítani a saját gondolkodásmódjukat az objektum orientált program tervezésére. Mindenesetre évekig tart, mire a programozási stílusuk és a megoldásaik illeszkednek az új metodikához, kihasználva annak képességeit.
  • Az előzőből következve a már kész bevált programokat sem lehet egyszerű funkcionalitás bővítés keretében átírni, hanem rendszerint nulláról kell kezdeni. Tehát a már működő program életciklusába nem illeszthető.
  • Az objektum orientált nyelven írt programok nagy átlagban erőforrás pazarlóbak, mint egy hagyományos program, mivel pl. az objektumok nyilvántartása plusz feladat. Az objektumok képességeinek gépi kódra való fordítása is - a nagy rugalmasság miatt - nehézkesebb. Ez az akadály azonban a hardverek képességeinek bővülésével (processzor, memória) manapság nem okoz problémát.