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
[email protected]
2010. február 18.
Objektum Orientált Programozás (OOP)
Bevezetés
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
Objektum Orientált Programozás (OOP)
Bevezetés
OOP rövid története 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
Objektum Orientált Programozás (OOP)
Bevezetés
OOP története 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ált Programozás (OOP)
Bevezetés
Objektum-orientáltság
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
Objektum Orientált Programozás (OOP)
Objektum Orientált Programozás fogalmai
Objektum Orientált Programozás fogalmai 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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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ált Programozás (OOP)
Objektum Orientált Programozás fogalmai
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
Objektum Orientált Programozás (OOP)
Absztrakciós Módszerek - Osztályok
Osztályok (Class)
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