OOP története
1969-ben Alan Kay diplomamunkájában felvázolta, hogy hogyan kellene személyi számítógépeket készíteni, ezeknek a gépeknek mit kellene tudniuk.
Az egyetem elvégzése után a Xerox cégnél helyezkedik el, ahol kidolgozta konkrét elképzeléseit a személyi számítógépről, és kitalálta az objektumorientált programozást, mint módszert. Ez 1972-ben történt: akkoriban még a lyukkártyás adatbevitel volt a legelterjedtebb.
Kay szerint a személyi számítógépnek grafikus felhasználói felülettel kel rendelkeznie és a fő beviteli egysége az egér lenne. Leírta, hogy a felhasználó ikonokkal, menürendszerrel, ablakokkal dolgozzon.
Megtervezett egy programozási nyelvet, Smalltalk-nak nevezett el. Ez az első és máig is létező objektumorientált programozási nyelv, amelynek napjainkban is készülnek újabb és újabb változatai, de az alapelvek mindvégig ugyanazok maradtak.
A Windows 3.1-ben már megtalálhatjuk Alan Kay elképzeléseit.
Az ’osztály’ a való világ egy részletének modellje.
Ezen modell
- részét képezik adatok, melyek szükségesek a részlet leírásához. Pl. egy autó modelljében szerepel az autó súlya, fogyasztása, férőhelyek száma, színe, magassága, stb.
- részét képezik azok a műveletek, amelyek jellemzik a modellt. Pl. egy repülő képes felszállni, leszállni, irányt változtatni, stb.
A programozási nyelveken az ’osztály’ (class) mindig valamilyen típus. Ezen típusban vannak megfogalmazva az adatok és műveletek.
Egy programozási nyelv Objektum Orientált Programozási nyelv, ha megvalósítható benne három alapelv:
- egységbezárás,
- öröklődés
- sokalakúság
Az egységbezárás azt jelöli, hogy a program szövegében is egyértelműen jelölve legyen, hogy egy objektumosztályt milyen adatok és milyen műveletek jellemzik.
Az adatok az egyedeknél eltérőek lehetnek (minden autónak más-más a rendszáma), de a műveletek megegyeznek. A műveletek a fenti adatokra hivatkoznak, azokat használják fel a megvalósításukban, illetve azokat módosítják (pl. TeleTankol() művelet autók esetén a benzinMennyiseg adatot módosítja).
Az adatokat ebben az esetben ’mezők’-nek vagy ’adattagok’-nak szokták nevezni. A műveletek pedig eljárások és függvények formájában van megvalósítva, de ebben a környezetben közös néven ’metódus’-nak hívjuk őket.
Egy programozási nyelv Objektum Orientált Programozási nyelv, ha megvalósítható benne három alapelv:
- egységbezárás,
- öröklődés
- sokalakúság
Az öröklődés alapelv azt mondja ki, hogy ha készen vagyunk egy osztállyal (megadtuk annak adatait és műveleteit), akkor képesek legyünk egy új osztályt létrehozni oly módon, hogy ezen, már kész osztályból kiinduljon.
Ekkor a második szintű osztály induláskor nem üres, hanem máris rendelkezik a fent definiált adatokkal és műveletekkel. Ekkor már csak a bővítést és módosítást kell leprogramozni.
A kiinduló osztályt ’ős osztály’-nak, a továbbfejleszett osztályt ’gyermek osztály’-nak, vagy ’származtatott osztály’-nak nevezzük.
Egy programozási nyelv Objektum Orientált Programozási nyelv, ha megvalósítható benne három alapelv:
- egységbezárás,
- öröklődés
- sokalakúság
Az öröklődés alapelve szerint a származtatott osztályban lehetőség van a már meglévő, örökölt műveletek újraírására (módosítására). A sokalakúság szerint azok a műveleteket, melyek ezen javított műveletekre épülnek – ne igényeljenek újraírást, hanem képesek legyenek újraírás nélkül is ezt az új verziót használni.
Ezt az alapelvet a legtöbb programozási nyelv a virtuális metódusokkal valósítja meg.
Egy programozási nyelv ’hagyományos’, ha harmadik generációs, de nem alkalmazza az OOP alapelveit.
Egy hagyományos programozási nyelven készíthetőek függvények és eljárások. Azok törzsét a szokott programvezérlési szerkezetek segítségével (szekvencia, szelekció, iteráció) készíthetjük el.
Ilyen programozási nyelvek pl: C, Basic, Pascal.
Egy programozási nyelv ’OOP támogató’, ha harmadik generációs, de lehet benne hagyományos (nem OOP) stílusban is programozni, de alkalmazhatók az OOP alapelvei is.
Az ilyen programozási nyelvek utólag lettek bővítve, kiegészítve az OOP jellemzőkkel.
Ilyen programozási nyelvek pl: C++, Delphi.
Egy programozási nyelv ’tisztán OOP jellegű’, ha harmadik generációs, de csak OOP személettel lehet benne programozni.
Az ilyen programozási nyelvekben nem lehet egyszerű eljárásokat és függvényeket készíteni, minden ilyet el kell helyezni valamilyen osztályban (metódussá válik). Nem lehet változókat megosztani függvények között, azokat is osztályok belsejébe kell helyezni (mezővé válik).
Ilyen programozási nyelvek pl: C#, Java.