OOP   AZ OBJEKTUM ORIENTÁLT PROGRAMOZÁS ALAPJAI (OBJEKTUM, METÓDUS, EGYSÉGBEZÁRÁS, ÖRÖKLÕDÉS)Az objektum-orientált program...
OOP   4. Zártságobjektum = adat + kód (Ettől objektum, az objektum; mert e kettőnekelválaszthatatlan egészén értjük az obj...
OOPobjektumoknál is, ahol szintén, a saját új metódus(ok) az elsődleges(ek). Ezután azártság két szálon fut tovább, amit n...
OOPMinden metódusnak van egy utolsó, rejtett, változó paramétere, a Self, ami a hívóobjektum 4 bájtos címe, típusa maga az...
OOPIsmeretség (használati) kapcsolat: Két objektum ismeretségi kapcsolatban vaegymással, ha azok léte egymástól független,...
OOP      6
Upcoming SlideShare
Loading in …5
×

Azobjekt

276 views
214 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
276
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Azobjekt

  1. 1. OOP AZ OBJEKTUM ORIENTÁLT PROGRAMOZÁS ALAPJAI (OBJEKTUM, METÓDUS, EGYSÉGBEZÁRÁS, ÖRÖKLÕDÉS)Az objektum-orientált programozás (OOP) a 90-es évek uralkodó stílusirányzata, segyre inkább felváltja a - lassan már elavulttá váló, de ugyanakkor mégklasszikusnak is számító - struktúrált programozást. Az objektum-orientáltprogramozás jobban megközelíti, utánozza a valóságot, és jobban igazodik atárgyakhoz. Minden valóságos tárgyat nemcsak alakja, elhelyezkedése jellemez,(Tehát nem csak a rá jellemző adatok -méretek-.) hanem az is, hogyan viselkednekbizonyos körülmények között. Így a tárgyakat minden jellemzőivel együtt komplexegészként tekintjük. (Azaz, az objektum az adatok és jellemzőjük komplexe,elválaszthatatlan egésze.) Amikor egy objektumot deklarálunk, akkor írjuk leszerkezetét a mezőkkel, másrészt azokat a szubrutinokat, amelyek leírják azobjektum viselkedését.Objektum osztály (típus): egy objektum minta, mely alapján objektum példányokat(objektumokat) hozhatunk létre.(Ld. 1. ábra)Adatmező: az osztály minden objektum példányában megtalálható, kezelése ésdeklarálása a rekordmezőével megegyező.Metódus: az objektumon végzendő műveleteket definiáló eljárások és függvények.Azonos osztályhoz tartozó objektumpéldányok a metódusokat közösen használják. ASelf paraméter jelöli, hogy éppen melyik példány adatmezőin kell műveletet végezni.Kiemelt metódusok:Constructor: az objektum létrehozásával, inicializálásával kapcsolatos műveletekmegoldása.Destructor: Az objektum megszüntetésével kapcsolatos műveletekre.osztály metódus: Az objektumpéldány helyett az osztályon fejti ki hatását, innen nemelérhetők az adatmezők és a jellemzők.Jellemző: Az osztály névvel ellátott attribútuma, melyre csak az olvasás és/vagy azírás műveletét definiáljuk. A Delphi által támogatott komponens orientáltprogramfejlesztés alapját a jellemzők képezik.Komponensek: Olyan objektumok, melyeknek jellemzőik tervezési és futási időbenegyaránt elérhetőek.Az Objektumokról: Egy objektum négy fő részből áll ezek: adatelemek, szerkezetiösszefüggések, szelekciós műveletek, konstrukciós műveletekEgy objektum négy fő tulajdonsága: 1. Adat és kód kombinációja 2. Öröklés 3. Profilizmus 1
  2. 2. OOP 4. Zártságobjektum = adat + kód (Ettől objektum, az objektum; mert e kettőnekelválaszthatatlan egészén értjük az objektumot ! )Az objektum egyik alkotóeleme az adat, vagy adatszerkezet. Ez a rekordhozhasonlóan deklarált adatokat jelent. E részben tulajdonképpen a valóságotábrázoljuk. (Úgymond: a tárgy méreteit) A másik a kód, amelyen olyan eljárások ésfüggvények összességét értjük, amelyek leírják az objektum viselkedésmódját.Szintaktikája a rekordéval - majdnem teljesen - megegyezik, a különbség annyi, hogymetódusokat - procedure-ákat, és function-öket - is deklarál(hat)unk.-Egységbezárás (encapsulation). Az adatstruktúrákat és az azokat kezelőmetódusokat egy egységként kezeljük és elzárjuk őket a külvilág elől. Az így kapottegységeket objektumoknak nevezzük.Öröklés: (Egy egyszerű evolúciós példán keresztül.) A kétéltűekből származnak ahüllők. (A biológia mai állása szerint.) A hüllők ugyanúgy rendelkeznek gerinccel,lábakkal, tüdővel …, mint a kétéltűek.De rendelkeznek új tulajdonságokkal is, pl: nincs szükség a vízre a peterakáshoz,-mint a kétéltűeknél- az egyedfejlődés első szakaszában.-Öröklés (inheritance). A meglévő objektumokból levezetett újabb objektumoköröklik a definiálásukhoz használt alapobjektumok adatstruktúráit és metódusait, delehetőség van új adatok definiálására, illetve az egyes metódusok átdefiniálásárailletve azonos néven történő újradefiniálásra (redefine, override).Profilizmus: Az új objektum (jelen esetben az új osztály) tartalmazza a régimetódus(oka)t, de helyette új utasítás sorozattal láthatjuk el. Így egy származtatottobjektum tartalmazhatja (használhatja) ugyanazt a metódust, de nem használhatjaugyanazt az objektumra jellemző változók azonosítóit (neveit).(Tehát: ugyanolyan nevű procedure-át, vagy function-t deklarálhatunk (azért, hogyfelülírjuk a régit), de ugyanolyan nevű változót nem. (Mivel azt már az ősobjektumban deklaráltuk. De gondolkodjunk el rajta, hogy nem véletlenül nem lehet aváltozót újra deklarálni: hiszen az objektum minden körülmény között ugyanolyanfeltétel(ek) mellett fog létezni. (Illetve, így is gondolkodhatunk -ez egy durvábbmegközelítés - az utód súlyát sohasem fogjuk méterben mérni, hanem mindigkilógrammban. ))-Többrétegűség (polymorphism). Egy adott metódus azonosítója közös lehet egyadott objektumhierarchián belül, ugyanakkor a hierarchia minden egyesobjektumában a tevékenységeket végrehajtó metódus implementációja az adottobjektumra nézve specifikus lehet (pl: virtuális metódusok).Zártság: (A példát folytatva) Mivel a hüllők utódaik a kétéltűeknek, mindentulajdonságukat öröklik, így a kétéltűekre jellemző szaporodást, egyedfejlődést is, derejtve marad mivel helyette új szaporodás, ill. egyedfejlődés típus jött létre. Ugyanígyaz objektumoknál, hiszen a Profilizmus megengedte ugyanazt a metódust, (itt:életfunkciót) kicserélni egy új metódusra. !!!DE NE feledjük el, úgy ahogy a hüllőknéla saját szaporodás, ill. egyedfejlődés az elsődleges, (azaz az új életfunkciónál a sajátéletfunkcióját hajtja végre és véletlenül sem az örököltet), ugyanúgy az 2
  3. 3. OOPobjektumoknál is, ahol szintén, a saját új metódus(ok) az elsődleges(ek). Ezután azártság két szálon fut tovább, amit nem érdemes biológiai példán keresztülmodellezni. Az egyik szál - az öröklésre vonatkoztatva - a Statikus szál, a másik aVirtuális.(Ezt a két különböző megoldási módot a metódusokra kell érteni, hiszen az adatokúgymond állandóak.)Statikus metódusok: az ilyen metódusok az örökléskor, csupán kicserélik az elődmetódusát az újra, nincs hatással az objektum más részeire - így nem változik megteljesen annak tulajdonsága - . Gondolok itt az objektum más részében elhelyezkedőesetleg őt meghívó más metódusokra, akik nem az újat, hanem a régit fogjákmeghívni, a statikus megoldás következménye képen.Virtuális metódusok: Ilyen típusú metódusokkal lehet megoldani az öröklésfolyamaton keresztül a sokoldalúságot. Ez azt jelenti, hogy nem csak a régi metódustcseréli ki az újra, hanem az egész objektumot átnézve a régi metódusra mutatóösszes hivatkozást átírja az új metódusra mutatóvá. Ezáltal megváltozik az egészobjektum tulajdonsága, és az öröklés folyamatra nézve sokoldalúvá válik.Borland Pascalban leírás szintjén annyi a különbség, hogy a metódus utánodabiggyesztjük a virtual kulcsszót. (Figyelem, ha egy objektumban már használtuk avirtual kulcsszót, akkor annak utódaiban is kötelező.)Objektumorientált programnyelvek: C++, Object Pascal, JavaAdatrejtés elve: Az objektum adatmezői és metódusai alaphelyzetben korlátozásnélkül elérhetők, ez ellentmond az OOP adatrejtési (data hiding) elvének. Általánosszabály: az objektum mezőit csak a metódusok felhasználásával érhetjük el. AzObject Pascalban ennek a szabálynak úgy szerezhetünk érvényt, ha az objektumdefinícióját a unit inteface részébe tesszük, és a private (belső), illetve public (külső)kulcsszavak segítségével kijelöljük az objektum részeit. Az objektum protectedkulcsszóval deklarált része private elérésű a külvilág számára, de ha saját osztálytszármaztatunk a védett elemekkel rendelkező osztályból, akkor public elérésűvéválnak az összetevők. Az osztályon belül a fenti kulcsszavakkal megjelölt részekteszőleges számban és sorrendben helyezkedhetnek el, de megkötés, hogy azadatok után a metódusok következnek.Hozzáférési jogok:nyilvános: publicsaját: private.védett: protected.publikált: published.Az objektum példányai: Adott osztálytípussal több objektum példányt islétrehozhatunk. A példányok saját adatterülettel rendelkeznek, de a metódusokatközösen használják. Az aktuális objektumpéldány címét a Self paraméter adja, melyminden objektum utolsó nem látható paramétere. Ezért metódus paraméterekéntnem használhatjuk a Self nevet, de metóduson belül a Self használható amezőhivatkozásban, vagy objektumok címének lekérdezésére. 3
  4. 4. OOPMinden metódusnak van egy utolsó, rejtett, változó paramétere, a Self, ami a hívóobjektum 4 bájtos címe, típusa maga az osztály. A metódus minden esetben a Self-en dolgozik. Ezt az utolsó paramétert a fordító automatikusan beépíti az összesmetódusba, tehát nem nekünk kell deklarálni.Dinamikus helyfoglalású objektumpéldányok: Az objektum számáramemóriaterületet constructorral foglalunk és destruktorral szabadítjuk fel a foglaltterületet. Osztály objektum esetén a hagyományos new és dispose memóriakezelőeljárások nem használhatók.Objektumok hierarchiája: Object Pascalban a származtatott osztálynak csakegyetlen közvetlen őse lehet. Itt az egyedi osztályok helyett az egymásra épülőosztályok hierarchiája biztosítja az objektumorientált megközelítés előnyeit.Osztályok: ős osztály (ancestor), amiből az újat származtatjuk, származtatott osztály(descendant)Tobject osztály: Ez az osztály előre definiált, ez minden osztály közös őse. Ha azosztály deklarációjában elmarad az ős megadása, akkor az új típus automatikusanTObject lesz.Sokoldalúság az osztály hierarchiában: Egy származtatott objektumtulajdonságainak megváltoztatását virtuális és dinamikus metódusokon keresztültudjuk megvalósítani. Tehát attól függően, hogy a program futása során mely részénvagyunk az osztály hierarchiának, azonos hivatkozás esetén más-más metódus kerülvégrehajtásra, azaz a program futása során dől el, hogy melyik metódust kellaktivizálni. Ez a jelenség a késői kötés, late binding, míg a fordítás soránmegvalósított kötés az early bilding. A virtuális metódusokat tartalmazó osztályokesetén a fordító virtuális metódustáblákat készít. (VMT Virtual Method Table) Ez atáblázat az alapja a késői hivatkozás feloldásnak, mert a virtuális metódusok a VMTtábla alapján kerülnek meghívásra. A virtuális metódusok hívása gyorsabb, de sokmemóriát foglalnak VMT táblázatok. A dinamikus metódusok adattáblái láncotalkotnak és csak az adott osztályban definiált dinamikus metódusokról tárolnakinformációt és a metódus belépési címét rendszerrutin keresi meg.Ha egy objektumban használunk virtuális metódus(oka)t, akkor használnunk kellkonstruktort. (Ha az objektumban csak statikus metódus(ok) van(nak) akkor nemkötelező.) Ez egyenértékű a procedure-ával, használata azért kötelező, mert ezhozza létre, a VirtuálisMetódusTáblát. Ha nem hozzuk létre a VMT-t akkorprogramunk megállhat - kiakadhat -, lefagyhat, de leginkább újraindítjaszámítógépünket.Osztályoperátorok: Az is operátort dinamikus típusellenőrzésre használjuk,segítségével megtudhatjuk, hogy egy adott típusú objektum a megadott osztályhoztartozik-e vagy sem. Az as operátort típuskonverzió kijelölésére használjuk.Üzenetkezelés: Üzenetkezelõ metódusok segítségével mi magunk is fogadhatunkés küldhetünk üzeneteket. Üzenetek fogadása Message direktívával deklaráltüzenetfogadó metódussal. Egy adott objektumnak az objektum Dispatchmetódusával küldhetünk üzenetet. 4
  5. 5. OOPIsmeretség (használati) kapcsolat: Két objektum ismeretségi kapcsolatban vaegymással, ha azok léte egymástól független, és legalább az egyik ismeri, illetvehasználja a másikat.Amelyik objektum használni akarja a másikat, annak tartalmaznia kell egy referenciát(mutatót) a megszólítani kívánt (szerver) objektumra.Ld. 2. ábraTartalmazási (egész-rész) kapcsolat: Két objektum tartalmazási kapcsolatban vanegymással, ha az egyik objektum fizikailag tartalmazza vagy birtokolja a másikobjektumot.A rész objektumot senki más nem látja, csak a tartalmazó, összetett objektum.Ilyenkor a hivatkozás nem csak a mutató, hanem a beágyazott objektum változó islehet. A rész objektum léte az egész objektumtól függ, vagyis ha az egészobjektumot megszüntetjük, vele együtt pusztul a rész is.(Doboz”-ban van „Ajándék”. Ha a dobozt ellopják, ellopják az ajándékot is. De amígmegvan a doboz, kivehetjük belőle az ajándékot (ekkor megszűnik a kapcsolat).)Kompozíció: Az a tartalmazás, ahol az egész rész létrehozásakor összeáll avégleges kompozíció, és később nem vehető ki belőle egyetlen rész sem (erőstartalmazás). Az egész objektum mindig ismeri a részét.Kutyának van feje, törzse és 4 lába.Ha egy objektum több egy osztályhoz tartozó objektumal áll kapcsolatban, és acsoport tagjait nem kívánjuk külön-külön megnevezni, akkor azokat összevonhatjuk,és multiobjektumként ábrázolhatjuk.Ld. 3. és 4. ábraAz objektumokat és azok kapcsolatait ábrázoló diagramot objektumdiagramnakvagy példánydiagramnak nevezzük.Az osztályokat és azok kapcsolatait ábrázoló diagramot osztálydiagramnaknevezzük. Az osztálydiagram az összes lehetséges objektumdiagram általánosítása,az objektumdiagram az osztálydiagram egy előfordulása, példánya.Kapcsolat foka:Ha nem írunk a vonalra semmit, az 1-et jelent, a * jelentése akárhány. - 3 : pontosan 3 - 0..1 : 0 vagy 1 - 10..20 : 10 és 20 közé eső szám - * : 0..∞, vagyis akárhány - 1..* : 1.. ∞, vagyis legalább 1 - 1,3,10..* : 1 vagy 3, vagy 10-től kezdve akárhányEgy-egy kapcsolatEgy-sok kapcsolatSok-sok kapcsolat 5
  6. 6. OOP 6

×