Programozás Objektum Orientált Programozás (OOP) Alapfogalmak Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. február 18.
Bevezetés Objektum Orientált Programozás (OOP) Bevezetés Programok fő összetevői Adat Funkcionális modell OOP alapötlete (filozófiája) Adat és funkcionális modell elválaszthatatlan 1960-as évek végén jelent meg a SIMULA67 Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 2 / 19
OOP rövid története Bevezetés SIMULA67 (OOP eszközrendszer) 1960-as évek második fele Algol verzió Minden objektum-orientált eszköz meg van benne (Innen való például: Osztály/virtuális függvény) BCPL 1980 (Innen való például a megjegyzés formátuma) Alan Kay OO világ víziója Ő használja először az objektum-orientált fogalmakat Smalltalk programozási nyelv Xerox-nál Az első objektum-orientáltnak tervezett nyelv Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 3 / 19
OOP története Bevezetés C++ SIMULA67 és BCPL voltak a fő forrásai 1983-tól használják "ipari körülmények" között 1987-től kezdik a szabványosítást, ami 1998-ig tart ISO/IEC 14882 Szinte bármely platformon van megvalósítása Turbo Pascal 6.0 1990 OO eszközrendszerrel rendelkezik 90-es évektől szintem minden nyelvnek van OO változata Java SUN fejlesztette 1994-től C++ után ez első, aminek gyakorlati jelentősége is van Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 4 / 19
Objektum-orientáltság Bevezetés Objektum-orientáltság jellemzői Adatmodell és az eljárásmodell elválaszthatatlan Absztrakt eszköz és fogalomrendszer Újrafelhasználhatóság Valós világot nagyon megközelíti Szemlélet: Imperatív eszközrendszer (algoritmus - kódolni kell) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 5 / 19
Attribútum (Attribute) "adatrész" Tetszőleges nagyságú és bonyolultságú adatszerkezet lehet Minden attribútumot egy meghatározott memóriaterületen tárol (tárterület meghatározott bitjein) Objektum állapota (State): Az objektum minden állapotát egy-egy attribútum kombináció (bitkombináció) határoz meg. Módszer (Method) Az Objektum viselkedését írja le (Eljárások, függvények) Viselkedésmód (behavior) Módszerek adják meg a viselkedésmódot Azonosság Minden objektum csak és kizárólag önmagával azonos OID (object identifier) Objektum azonosítóval rendelkezik minden objektum (Nyelvi szinten ez nem kell) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 6 / 19
Objektum Orientáltság - Objektum viselkedése és élettartama Objektum viselkedése Az állapot (State) időben megváltozik/megváltozhat Viselkedési módok csoportjai Objektum állapotát le tudja kérdezni Objektum állapotát meg tudja változtatni Objektum élettartama Az objektumot létre kell hozni Az objektum használható Az objektum megszüntetése Programozási nyelv Programozó OID-nek (object identifier) mindig léteznie kell. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 7 / 19
Objektum Orientáltság - Osztály Osztály (Class) Absztrakt eszköz Típusfogalom általánosítása (az eljárásorientált nyelveknél) Azonos attribútumú és módszerű objektumok együttese Osztályhoz köthetőek az objektumok Osztályból származtathatóak le az objektumok példányai Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 8 / 19
Objektum Orientáltság - Példány Példány (Instance) Példányosítás (instantiation). Az osztályon belül létrehozott objektum Az adott objektum egy meghatározott osztály példánya Minden objektum tudja, hogy melyik meghatározott osztálynak példánya Egy meghatározott osztályhoz tartozó minden példány ugyanolyan attribútumokkal és módszerekkel rendelkezik Minden példány tudja, hogy milyen módszerrel rendelkezik A módszereket mindig konkrét példányon futtatnak (aktuális példány) Példány létrehozása: Adatszerkezet újra és újra megjelenik a tárban. Módszereket nem többszörözi Létezhetnek osztályhoz tartozó attribútumok és módszerek (Példányattribútum, példánymódszer, osztályattribútum, osztálymódszer) Osztályattribútum: hány darab példánya van (az osztály kiterjedése) Az osztályattribútumok nem többszöröződnek Példányosítás után az osztály példányairól beszélünk Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 9 / 19
Objektum Orientáltság - Öröklődés Öröklődés A programkódok újrafelhasználásának a legjobb példája az OOP Az osztályok nem függetlenek egymástól Speciális viszonz az osztályok között az öröklődés Aszimmetrikus (Osztályok közötti párhuzamot nem kezeli) Öröklődés tulajdonságai Osztályokhoz kötött fogalom Két vagy több osztály között értelmezhető A leszarmazottak bővíthetik, vagy akar szűkíthetik az őstípus állapotterét és műveleteit Kiváló lehetőseg a közös tulajdonságok és műveletek összevonasara és újrahasznositasara superclass (szuperosztály, szülőosztály, ősosztály, alaposztály) Ebből tudunk létrehozni alosztályokat subclass (alosztály, gyerekosztály, származtatott osztály) átveszi, örökli a superclass attribútumait és módszereit Láthatóság módszerével letilthatóak Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 10 / 19
Objektum Orientáltság - subclass Bizonyos attributomok módosítás nélkül átvehetőek Módosulhat a subclass a superclass-hoz képest új attribútumokat vezethet be új módszereket vezethet be újraimplementálhatja a módszereket törölhet attribútumokat törölhet módszereket láthatósági szabályokat újraértelmezheti, hatásukat felfüggesztheti átnevezhet attribútumokat duplikálhat attribútumokat duplikálhat módszereket Aszimmetria Szuperosztály nem látja alosztályait Szuperosztály nem manipulálhatja alosztályait Egy osztályból tetszőleges számú alosztály származtatható Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 11 / 19
Objektum Orientáltság - Öröklődés Alosztály és szuperosztály(ok) kapcsolata Öröklési hierarchia Egy szuperosztály van Egyszeres (single) öröklődés Fa rajzolható öröklési hierarchiaként Több szuperosztály van Többszörös (multiple) öröklődés Több ős tulajdonságait ötvöző "vegyes" osztálytípusok Sokat vitatott lehetőség néhány OOP megvalósításban Aciklikus gráf rajzolható öröklési hierarchiaként Névütközés: Lehetnek azonos nevű attribútumok, módszerek (A megoldások nyelvenként/rendszerenként különbözőek) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 12 / 19
Objektum Orientáltság - Bezárás Bezárás (Encapsulation) Nem objektumhoz kötődik Információrejtés elve (Information hiding) Interfész és implementációs rész Az osztály objektumaihoz csak az interfész részen keresztül férhetünk hozzá Az osztály implementációhoz nem lehet hozzáférni Az attributumok két részre bonthatóak Nyilvános (public) rész minden kliens osztály lát Privát (private) rész kívülről nem látható Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 13 / 19
Objektum Orientáltság - Polimorfizmus Polimorfizmus, többalakúság (Polimorphism) Objektum polimorfizmus Az Objektum tudják, melyik osztály példánya Az ősosztály objektuma helyett szerepelhet egy az ősosztályból leszármaztatott objektumra Módszerpolimorfizmus (overriding) A leszármazott osztály újraimplementálhat egy örökölt módszert Valamely függvény(ek) újra implementálása Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 14 / 19
Objektum Orientáltság - Kötés, Üzenet Kötés (Binding) Módszerek polimorfizmusához köthető Probléma: egy függvénynek több implementációja van Mikor melyik függvény fusson le? Statikus/korai (static/early) kötés Fordítási időben eldöl A névhez hozzárendeli a kódot a fordító Dinamikus/késői (dynamic/late) kötés Futási időben döl el Vagy az osztálykód hajtódik végre, vagy a hierarchián felfele a legközelebbi hajtódik végre A nyelvek általában mindkettőt támogatják Üzenet (Message) Üzenetekkel tudok kommunikálni az objektummal (Smalltalk nyelv filozófiájához kötődik leginkább) Most is használnak objektumok közötti kommunikációra üzeneteket Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 15 / 19
Objektum Orientáltság - Absztrakt és konténer osztály, kollekció Absztrakt osztály (Abstract class) Olyan osztály, melynek nincs példánya (nem példányosítható) Öröklődésnél használható (ősosztálynak) A leszármaztatott osztály már példányosítható Felhasználása: Tervezési fázis Program implementációs fázis Konténer osztály (Container class) Objektumokat tartalmazó adatszerkezet Bizonyos nyelvek támogatják ezeket Programozónak kell implementáni Adatbáziskezelőknél van nagy előnyük Például: Tömb, láncolt lista, verem, sor, stb. Kollekció (Kollection) Objektum-orientált adatbázisok esetén konténerosztályok helyett használt fogalom Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 16 / 19
Objektum Orientáltság - Paraméterezett osztály, Iterátor Paraméterezett osztály Bizonyos nyelvekben léteznek csak C++-ban a template osztály felel meg ennek Iterátor Példányaihoz tartozó objektumok bejárhatóak Élettartam A példányosítást mindig a programozó végzi Objektum megszüntetése (2 filozófia) Objektum törlése/felszabadítása a programozó feladata (Pl.: C++) Automatikus objektum törlési mechanizmust (garbage collection) Előny: Nem kell vele foglalkozni Hátrány: Melyik szabadítható fel? Precíz algoritmus kell hozzá. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 17 / 19
Objektum Orientáltság - Egységesség Egységesség Létezik-e az objektumon kívüli eszközrendszer? Objektum Orientált nyelvek Minden objektum A nyelvi rendszer egyetlen osztályhierarchiából épül fel Hibrid nyelvek Elsődlegesen eljárásorientált, funkcionális, logikai nyelvi eszközöket tartalmaznak OO eszközrendszerrel bővített nyelv Nincs osztályhierarchia Szinte minden nyelvnek van objektum orientált kiterjesztése Például az OO COBOL, Object Pascal, C++. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 18 / 19
Osztályok (Class) Absztrakciós Módszerek - Osztályok Osztályokkal kapcsolatos fogalmak Tagfüggvények Elérhetőség szabályozása Konstruktor Destruktor Statikus tagok Osztály típusú tagok másolása Konstans tagfüggvények Önhivatkozás Struktúra és osztály kapcsolata Osztályon belüli függvénydefiníciók Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 19 / 19