58. Osztály, objektum fogalma, implementációs lehetőségek(shagreen) 59. Egységbezárás (elvi háttere, gyakorlati megvalósítás) (Shagreen)
|
|
- Jázmin Lukács
- 7 évvel ezelőtt
- Látták:
Átírás
1 58. Osztály, objektum fogalma, implementációs lehetőségek(shagreen) 59. Egységbezárás (elvi háttere, gyakorlati megvalósítás) (Shagreen) 60. Öröklés (elvi háttere, gyakorlati megvalósítás) (Shagreen) 61. Polimorfizmus (elvi háttere, gyakorlati megvalósítás) ( Shagreen) 62. Interfészek (elvi háttere, gyakorlati megvalósítása) ( Shagreen) 63. Eseménykezelés (elvi háttere, gyakorlati megvalósítása) (még kidolgozás alatt ) 66. Generikus típusok (elvi háttere, gyakorlati megvalósítása) (még kidolgozás alatt )
2 Tartalom 58 Osztály, objektum Egységbe Zárás Öröklés (elvi háttere, gyakorlati megvalósítás) Polimorfizmus (elvi háttere, gyakorlati megvalósítás) Interfészek (elvi háttere, gyakorlati megvalósítása)... 24
3 58 Osztály, objektum Osztály, Objektum fogalma, implementációs lehetőségek Az objektum-orientált programozás (angolul object-oriented programming, röviden OOP) egy programozási módszer. Ellentétben a korábbi programozási nyelvekkel, nem a műveletek megalkotása áll a középpontban, hanem az egymással kapcsolatban álló programegységek hierarchiájának megtervezése. Az objektum-orientált gondolkodásmód lényegében a valós világ lemodellezésén alapul például egy hétköznapi fogalom, a kutya felfogható egy osztály (a kutyák osztálya) tagjaként, annak egyik objektumaként. Minden kutya objektum rendelkezik a kutyákra jellemző tulajdonságokkal (például szőrszín, méret stb.) és cselekvési képességekkel (például futás, ugatás). Az osztályok alapvető célja az adatok, és az adatokat kezelő/módosító/lekérdező eljárások egységbe zárása, ezáltal a tényleges tárolás és a működés elrejtése, egyfajta "fekete doboz" működési elv kialakítása. Mindez egy olyan, a fejlesztési folyamat alatt kényelmesen bővíthető öröklési struktúrába helyezve, amelynek segítségével a procedurális programozáshoz képest magasabb absztrakciós szinten tudunk programozni. Objektum: Az objektum állapottal rendelkező entitás, amely a benne tárolt adatok felhasználásával feladatokat hajt végre és egyéb objektumokkal kommunikál. jellemzői: - Minden objektum egy előre definiált osztály példánya. - Adatokat(=mezők) és algoritmusokat(=metódusokat) tartalmaz. - Metódusokkal vesz részt az üzenetváltásban, ezeken keresztül kommunikál más objektumokkal és a külvilággal.(elemei: célobjektum, metódus, paraméterek, eredmény) - Minden objektum egyértelműen azonosítható. - Egy objektum különböző állapotokkal rendelkezhet, az egyes állapotokat mezői aktuális értéke határozzák meg. - A viselkedése mindent definiál, amit az objektum csinálhat. Megadja, hogyan reagálhat más objektumok kéréseire. - Egy állapot az objektumon végzett műveletek hatására változhat (mindig megjegyzi aktuális állapotát), viselkedését az általa ismert (az objektumba épített) algoritmusok határozzák meg. - Két objektum állapota akkor egyezik meg, ha minden megfelelő mezőértékük megegyezik. (Ha két objektum állapota megegyezik, maguk az objektumok akkor sem azonosak) - Az identitás azt jelenti, hogy minden objektum egyedi, még akkor is, ha az állapotuk megegyeznek. - Saját életciklussal rendelkeznek (önállóak). - Minden objektum valamilyen létező osztályba tartozik
4 Osztály: Az osztály fogalma: Leírás objektumok egy csoportjához, amelyeknek közösek az attribútumaik, operációik, más objektumokkal való kapcsolataik és szemantikus viselkedésük. Minden objektum pontosan egy osztály példánya, és az osztály az adott objektum típusa.( sablont adnak az objektumokhoz) Az osztályok tehát azonos adatszerkezetű, viselkedésű objektumokat írnak le. Az osztály egy adott objektumtípust határoz meg annak adataival (mezők) és beépített algoritmusaival (metódusok). jellemzői: - Egy osztályból több példány is létrehozható - Egy osztály összes példánya ugyanazokat a mezőket és metódusokat tartalmazza. - Az egyes példányok létrehozásuk pillanatában azonos állapotúak, ezt követően viszont önállóan működnek tovább.(különböző helyen tárolódnak a memóriába) - Léteznek az osztályra (és nem az egyes objektumpéldányokra) jellemző mezők és metódusok is ezeket statikus mezőknek, statikus metódusoknak nevezzük. - Az osztály tartalmazza a metódusok kódját. A metódusokat objektumokra hívjuk meg, és az objektumokban tárolt adatokon dolgozunk(kivéve a statikus metódusokat) (Osztály tartalma mezők,metódusok, tulajdonságok,események, operátorok,beágyazott típusuk) (beágyazott típusok: class, struct, interface, delegate) - Az osztály tartalmazhat további osztály leírásokat. Ezeket beágyazott osztályoknak (nested class)hívjuk. - Konsturktor:Minden osztálynak van legalább egy konstruktora. Ez egy különleges függvény, amely az osztály példányosításakor hívódik meg. o Feladata az osztály kezdőértékeinek beállítása, helyfoglalás a memóriában,kezdeti műveletek végrehajtása,stb. Több konstruktort is megadhatunk, a fordító a szignatúrától függően választja ki a megfelelőt(ha külön nem definiálunk konstruktort, akkor is létrejön.)destruktor:az elfoglalt memóriát szabadítja fel, eltakarít maga után. o Destruktorból pontosan egy darab van az osztályban. o Minden objektum külön-külön szüntethető meg (önállóan léteznek) o Az objektumok felszámolása lehet a programozó feladata vagy történhet automatikusan is. - Osztály szintű (statikus) tagváltozó Ez az adattag csak egy példányban jön létre egy osztályon belül, független az objektumok számától, globális az adott osztály típusra nézve.(egyik objektumban megváltoztatjuk értékét akkor az összesben változik az értéke.) - Többszörösen egymásba ágyazhatók az osztályok
5 1. ábra Osztály UML diagrammja Metódusok általános típusai Osztály kapcsolatok - Módosító metódusok Megváltoztatják az objektum állapotát - Kiválasztó metódusok Hozzáférést biztosít az objektum adataihoz, de nem változtatják meg őket (így az objektum állapotát sem) - Iterációs metódusok Az objektum adatainak valamely részhalmazán lépkednek végig, és az adott részhalmazra vonatkozóan végeznek el műveleteket 1. Leszármazás (ún. IS-A kapcsolat) 2. Asszociáció a. Egy osztály leszármazottai öröklik az osztály jellemzőit. b. A leszármazottak bővíthetik az ősosztály adatait és algoritmusait. c. A leszármazottak minden műveletre képesek, amelyre az ősosztály képes volt. a. Az asszociáció osztályok közötti tetszőleges típusú viszony. b. Asszociációs kapcsolat áll fenn két osztály között, ha az egyiknek a saját helyes működéséhez ismernie kell a másikat. 3. Aggregáció és kompozíció (ún. HAS-A kapcsolat) a. Az aggregáció az asszociáció speciális esete: tartalmazási kapcsolat. (A tartalmazó és a tartalmazott osztály egymástól függetlenül létezhetnek) b. A kompozíció az aggregáció speciális esete: szigorú tartalmazási kapcsolat.( A tartalmazó és a tartalmazott életciklusa közös)
6 Implementációs lehetőségek //osztály deklarálása a "class" kulcsszó segítségével történik class Példaosztály /* Itt kell deklarálnunk az osztály összes tagját (mezőket, metódusokat...) * A metódusok konkrét megvalósítását szintén itt kell megadnunk * Osztályok és objektumok tagjainak elérése: "." operátor * (példány szintű tagoknál a példány nevét, osztály szintű tagoknál az osztály nevét kell az operátor elé írnunk)*/ // A mező értéke helyben is megadható (inicializálás) string jegy = "jeles"; int j = -10; //csak olvasható mező readonly string SosemVáltozomMeg = "Nem hát!"; // konstans mezők const double pi = ; // A metódusok rendelkezhetnek megadott vagy változó darabszámú paraméterrel (params kulcsszó) void EgyParaméteresMetódus(bool l); void TöbbParaméteresMetódus(int a, int b, string név); void MindenbőlSokatElfogadóMetódus(params object[] paramétertömb); //visszatérési értékkel void NincsVisszatérésiÉrtékem(); int EgészSzámotAdokVissza(int a); SajátTípus Átalakító(SajátTípus forrásobjektum, int mező); //konstruktor public Példaosztály(string jegy, int j) //this paraméterrel hivatkozunk az éppen aktuális objektumra this.jegy = jegy; this.j = j; // új objektum a new operátor segítségével hozható létre SajátTípus újobjektum = new SajátTípus(); //destruktor ~Példaosztály()
7 Forrás: Kotsis Domonkos és Miklós Árpád OOP diák Sípos Mariann OOP diák Csink lászló OOP diák
8 59. Egységbe Zárás Az egységbezárás (encapsulation) azt jelenti, hogy a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, hanem azok egy egységes egészként jelennek meg, összetartoznak: együtt alkotnak egy objektumot. Az információ elrejtés (information hiding) azt jelenti, hogy az objektum felhasználójának nem kell tudnia arról, hogy az belsőleg hogyan működik, csak azt, hogy milyen funkcionalitást valósít meg, mi a felülete (interface). Programozás szempontjából ennek több előnye is van az eljárás központú megközelítéssel szemben. Először is a különböző program részek közötti kötöttség lényegesen csökkenthető, és ennek biztosítására, kikényszerítésére nyelvi eszközöket is kapunk. Egy modul készítése esetén nem tudjuk elérni, hogy annak felhasználója esetleg nem megfelelő módon alkalmazza, ami inkonzisztens állapothoz vezethet. Egy objektum esetén szabályozni tudjuk a benne lévő változók és metódusok láthatóságát, biztosítani tudjuk, hogy a programozó az objektumot csak annak felületén keresztül tudja felhasználni. A fentiből következik egy másik fontos előny is: az osztályunk belső működését bármikor tetszés szerint megváltoztathatjuk, amennyiben biztosított, hogy annak felülete változatlan marad. Ez azt eredményezi, hogy programunk sokkal rugalmasabban és nem utolsó sorban biztonságosabban átalakítható későbbi igények esetén. Például könnyen előfordulhat, hogy hatékonysági szempontok miatt szeretnénk a belső adattárolási formátumot megváltoztatni: OOP esetben csak arra kell figyelnünk, hogy az interfész ne változzon meg, míg procedurális megközelítésben ez jóval nagyobb körültekintést igényel, ráadásul a változtatások akár elsőre nem gondolt programrészekre is hatással lehetnek. Névterek Az OO paradigma jellemzője az elnevezések óriási száma. Minden osztálynak, objektumnak, mezőnek, metódusnak egyedi nevet kell adni, hogy a későbbiekben hivatkozni lehessen rá. Nem könnyű jól megjegyezhető, a célt később felidéző neveket adni. A programok méretével egyenes arányban nő a névütközések valószínűsége. A programok általában nem csak saját osztályokat használnak fel. A névtér, mint az elnevezések érvényességének tartománya, hierarchikus logikai csoportokra bontja az elnevezéseket. Minden elnevezésre csak a saját névterén belül lehet hivatkozni. Ennek megfelelően a saját névtéren belül minden elnevezés egyedi. A névterek általában tetszőleges mélységben egymásba ágyazhatók. Azonos elnevezések más-más névtereken belül szabadon használhatók, így erősen lecsökken a névütközés probléma jelentősége.
9 Láthatósági szintek (Mezők és metódusok védelme) A láthatósági szintek segítségével különítjük el az osztály belső, illetve kívülről és elérhető tagjait. Az egyes mezők és metódusok láthatósága külön-külön szabályozható. Alapvető láthatósági szintek: Nyilvános (public): az adott tagot az osztály saját metódusai, az osztály leszármazottainak metódusai és az osztályt használó más osztályok metódusai használhatják. Ezzel a szinttel valósul meg az osztály külvilág számára látható felülete. Védett (protected): az adott tagot az osztály saját metódusai és az osztály leszármazottainak metódusai használhatják. Ez a szint a leszármazottak számára tesz elérhetővé bizonyos funkciókat. Privát (private): az adott tagot csak az osztály saját metódusai használhatják. Ezzel a szinttel valósul meg az osztály szigorúan belső jellegű funkcionalitása. A láthatósági szintek segítségével hatékonyan, biztonságosan (adatrejtéssel együtt) valósítható meg az egységbezárás. Az osztályok a kívülről is látható elemeiket bocsátják más osztályok rendelkezésére. A nyilvános mezők adatokat, a nyilvános metódusok műveleteket tesznek elérhetővé. Az egyes osztályok megvalósítási részletei módosíthatók anélkül, hogy az osztályt használó más osztályoknak erről tudniuk kellene. A megvalósítást végző algoritmusok nincsenek kihatással az osztályt használó kódra. Konkrét OO nyelvi megvalósításokban általában további láthatósági szintek is léteznek. Példány szintű tagok (Objektumokhoz tartozó mezők és metódusok) A példány szintű tagok a példányosított objektumok saját adatmezői, valamint saját adatain műveleteket végző metódusai vannak. A példány szintű mezők tárolják a példányok állapotát. Az egyes metódusok programkódját általában nem tartalmazza külön-külön az osztály minden példánya. A metódusok minden példánynál azonosak és nem módosíthatók, ezért a metódusok programkódját az osztályon belül szokás tárolni. Szükség lehet azonban arra, hogy a példány szintű metódusok hivatkozni tudjanak arra az objektumra, amelyen a műveletet végzik. Példa: átadás paraméterként vagy eredményként; elnevezések egyértelműsítése. Ezt általában egy rejtett paraméterrel valósítják meg. Megnevezése nyelvi megvalósításonként változik ( this, Self, Me ). Mindig minden példánymetódusból elérhető, értéke a példány maga. Osztály szintű tagok (Objektumokhoz tartozó mezők és metódusok) Az osztály szintű tagok az egyes osztályokhoz tartozó egyedi adatmezők, valamint az ezeken műveleteket végző metódusok. Osztály szintű adatmezők: minden osztály pontosan egyet tartalmaz belőlük, függetlenül az osztályból létrehozott objektumpéldányok számától.
10 Osztály szintű metódusok: akkor is elérhetők, ha az osztályból egyetlenegy példány sem létezik, csak osztály szintű adatmezőket használhatnak, konkrét példány nem igénylő feladatok végrehajtására is alkalmasak. Példa: főprogram megvalósítása. Speciális osztály szintű metódus az osztály szintű konstruktor, amelynek feladata az osztály szintű adatmezők kezdőértékének beállítása. Általában az osztályra történő első hivatkozás előtt fut le automatikusan. 2. ábra Osztály és példány szintű tagok Tulajdonságok (intelligens mezők) A tulajdonság olyan nyelvi elem, amely felhasználás szempontjából metódusként viselkedik. Az adott osztály felhasználói mezőnek látják a tulajdonságot. A külvilág mezőként hivatkozhat a tulajdonságra. A tulajdonságot megvalósító osztály külön-külön metódust rendelhet a tulajdonság olvasási és írási műveletéhez. Olvasáskor a megfelelő metódus egy valódi (általában privát) mező értékét is visszaadhatja, de akár számítással is előállíthatja a visszaadott értéket. Íráskor a megfelelő metódus egy valódi (általában privát) mező értékét is módosíthatja, de végezhet egyéb műveleteket is vagy akár módosítás előtt ellenőrizheti az átadott értéket. A tulajdonság tehát felfogható intelligens mezőként. A tulajdonságok a mezőkhöz és a metódusokhoz hasonlóan különböző láthatósági szintekhez sorolhatók.
11 Gyakorlati megvalósítás /*Névtér: * A névterek az elnevezések tetszőleges logikai csoportosítását teszik lehetővé * Nincs közük a fizikai tároláshoz * Tetszőlegesen egymásba ágyazhatók*/ namespace A namespace B class Egyik namespace A.B class Másik /* Az "Egyik" osztály ugyanabba a névtérbe tartozik mint a "Másik" osztály * * Minden névre a saját névterével együtt kell hivatkozni * A névterek importálhatóak: */ /* Hatókörök * kijelöli a változók érvényességi tartományát * helyi változók a deklarációjukat tartalmazó blokk vagy metódus lezárásáig ("") érhetők el Láthatósági szintek*/ public string x // Korlátlan protected string x Adott osztály és leszármazottai internal string x //Adott program, adott osztály protected internal string x //Adott program, adott osztály és leszármazottai private string x //Adott osztály /* A névterek láthatósága mindig public, A típusok (osztályok) láthatósága public vagy internal.egy osztályon belül is létrehozhatunk több azonos nevű, de eltérő paraméterlistával és visszatérési értékkel rendelkező metódust. Az osztály szintű mezők az osztály saját adatmezői minden osztály csak egyet tárol ezekből a mezőkből, függetlenül a később létrehozott példányok számától*/
12 public static int Darabszám; /* Az osztály szintű metódusok magán az osztályon működnek (akkor is hívhatók, ha 1 példány sem létezik az osztályból) csak osztály szintű mezőket használhatnak nem létezik aktuális objektum így "this" paraméter sem konkrét példány nem igénylő feladatra is alkalmasak*/ public static void Main() /* this paraméter a példány szintű metódusokban szükség lehet rá, hogy hivatkozni tudjunk arra az objektumra, amelyik a metódust éppen végrehajtja a rejtett this paraméter minden példány szintű metódusban az aktuális objektumot jelöli akkor használatos amikor az aktuális objektumot paraméterként vagy eredményként szeretnénk átadni (pl. konstruktor)*/ public Osztály(string név, int kor) this.név = név; this.kor = kor; //Tulajdonságok Public string Name get return name; setname=value; //hívó kódban úgy viselkedik, mint egy tagváltozó, de értékátadáskor set-en lehíváskor get metódussal.férünk csak hozzá. Rejtett adattagok kezelésére alkalmas. Forrás: Kotsis Domonkos és Miklós Árpád OOP diák Sípos Mariann OOP diák Csink lászló OOP diák
13 60. Öröklés (elvi háttere, gyakorlati megvalósítás) Az öröklés egy igen fontos fogalom az OOP nyelvekben. Sok hasonló, de csak kis mértékben különböző osztályok esetén használjuk, illetve ha valamilyen speciális tulajdonsággal szeretnénk az osztályunkat felruházni. Az öröklődés során származtatással hozunk létre egy már meglévő osztályból egy újat, ez egy specializációs művelet ( származtatás). A leszármazottak öröklik az őstípus tulajdonságait. A leszármazottak bővíthetik, esetenként akár szűkíthetik az őstípus állapotterét, illetve műveleteit. Teljes leszármazási hierarchiákat is létrehozhatunk. Kiváló lehetőség a közös tulajdonságok, műveletek összevonására és újrahasznosítására. Az alapelv következetes alkalmazásával elérhető, hogy a már megvalósított funkcionalitás később a megvalósítás részleteinek ismerete nélkül is felhasználható legyen. Jól átgondolt előzetes tervezést igényel. A leszármazottak tényleges felépítése
14 T ö b b s z ö r ö s ö r ö k l é s (Öröklés egynél több ősosztállyal) Többszörös öröklés esetén egy osztálynak több őse van. Ez egy sokat vitatott lehetőség néhány OOP megvalósításban. Előnyök: egyszerre több ősosztály képességei örökölhetők, több származtatási szempont érvényesíthető egyszerre, több ős tulajdonságait ötvöző vegyes osztálytípusok, nagyobb rendszereknél gyakran felmerül az igény rá. Hátrányok: igen nehéz megvalósítani, komoly megvalósítási problémák: adatmezők öröklése, közös közvetett ősök (leszármazás több útvonalon), nagyobb rendszereknél szinte lehetetlen jól, következetesen megvalósítani, bonyolítja a programozási nyelv eszközeit, a programok tervezését Alternatív megoldás az interfészek rendszerével történő megvalósítás. Az interfészek megvalósítási előírásait ilyenkor mind meg kell valósítani az adott osztályban. Adatmezők öröklése, leszármazás több útvonalon S p e c i á l i s m e t ó d u s o k ö r ö k l ő d é s e (Konstruktorok és destruktorok) A konstruktorok és destruktorok nem feltétlenül öröklődnek. Az objektumok létrehozásakor végre kell hajtani minden egyes ős valamelyik konstruktorát is. Ez szintén része a konstruktorok alapvető feladatkörének.
15 Hívási sorrend 1) A konstruktorok leszármazás szerinti sorrendben hajtódnak végre. Először az ősök adatait kell inicializálni, hiszen a leszármazottak ezeket akár már a saját konstruktorukban is fel kívánhatják használni. 2) A destruktorok leszármazás szerinti fordított sorrendben hajtódnak végre. Először az utódok esetleges objektumait kell felszámolni, hiszen az utódok destruktora még hivatkozhat az ősök belső objektumaira. Gyakorlati megvalósítás /* az örökölt metódusok a leszármazottakban módosíthatók * a leszármazottak új tagokkal bővíthetik az ősosztálytól örökölt tagok halmazát * minden osztály közös őse a System.Object osztály * A leszármazott osztályok deklarációjánál " : " karakterrel elválasztva meg kell adnunk az ősosztály nevét is (kivéve ha az ősosztály a System.Object)*/ class Állat int lábszám; public Állat() public void Fut() class Emlős : Állat public bool KicsinyétEteti() class Kutya : Emlős public void FarkátCsóválja() public void Ugat()
16 /* A konstruktorok nem öröklődnek * Ha az ősosztályban van paraméter nélküli konstruktor, az a leszármazott osztály konstruktorában automatikus meghívódik * Ha az ősosztályban nincs paraméter nélküli konstruktor, az ősosztály konstruktorát meg kell hívni a leszármazott osztály konstruktorából (erre a célra a "base" kulcsszó áll rendelkezésre)*/ //1. helyes megoldás class A class B : A public B(int x) //2. helyes megoldás class A public A() class B : A public B(int x) //3. helyes megoldás class A public A(int x) class B : A //konstruktor felülírás public B(int x) : base(x) Forrás :
17 61. Polimorfizmus (elvi háttere, gyakorlati megvalósítás) Többalakúság: A különböző, egymásból származó objektumtípusok hasonló műveletei a konkrét objektumtól függően más-más konkrét megvalósítással rendelkezhetnek. Mező- vagy típus-polimorfizmus : Öröklés során az öröklött mezők a leszármazottakban is elérhetők, statikusan viselkednek, nem változtathatók meg öröklés során. Minden leszármazott tartalmazza minden korábbi ős összes mezőjét, emellett tetszőlegesen bővítheti is a mezők körét. A mezők ennél fogva (a mai OO programnyelvekben) nem képesek többalakú viselkedésre. Metódus-polimorfizmus: A különböző, egymásból származó objektumtípusok hasonló műveletei a konkrét objektumtól függően más-más konkrét megvalósítással rendelkezhetnek. Ennek a gyakorlati megvalósítása a polimorfizmus. Nem virtuális metódusok esetén két probléma léphet fel. Az utódban nem felüldefiniált metódus hívása esetén az ősosztályban definiált metódus hívódik meg. Amennyiben a meghívott metódus tartalmaz az utód osztályban felüldefiniált metódushívást, akkor az ős osztálybeli metódust hívja meg és nem az utódosztálybelit. Pl.: CA Add(int addx) //hozzáadunk az x-hez addx-et és meghívja a Show metódust Show() //Show metódus kiírja x értékét x=1 CB:CA Show() //Show metódus kiírja a x és y értékét y=3 A CB osztályban Add metódus hívás esetén a metódusban szereplő Show metódus az ősosztálybeli Show metódust hajtja végre. Ősosztály referencia típusú hivatkozás során az utódot példányosítva az ősosztály metódusai lesznek csak elérhetők. Az előző példa osztályait használva a CA b=new CB() példányosítása után az Add metódusba épített Show metódus az ősosztályban definiált módon fogja kiíratni az értékeket.
18 Virtuális metódusok: Az utódban nem felüldefiniált metódus hívása esetén az ősosztályban definiált metódus hívódik meg. Amennyiben a meghívott metódus tartalmaz az utód osztályban felüldefiniált metódushívást, akkor az utód osztálybeli metódust hívja meg. A nem virtuális metódusoknál használt példa osztályokat felhasználva A CB osztályban Add metódus hívás esetén a metódusban szereplő Show metódus az utódosztálybeli Show metódust hajtja végre. Ősosztály referencia típusú hivatkozás során az utódot példányosítva az utódosztály metódusai lesznek. Az előző példa osztályait használva a CA b=new CB() példányosítása után az Add metódusba épített Show metódus az utódosztályban definiált módon fogja kiíratni az értékeket. Virtuális és nem virtuális metódusok utódaiból a base.metódusnév alapján tudunk hivatkozni az ősosztálybeli metódusokra. Késői kötést valósíthatunk meg az abstract, virtual, override módosítókkal. Az absztrakt metódus esetén nincs implementációja (megírt kódja) a metódusnak. Utód osztályban a metódust csak virtual kulcs szóval ellátva tudjuk felüldefiniálni. Override kulcsszót használjuk az implementált (felüldefiniált) metódus utódosztályban, ahol megszeretnénk hívni. A virtual kulcsszóval késői kötésű függvényt hozunk létre, melyet az override módosítóval ellátott azonos nevű és paraméterlistájú függvény helyettesíthet (felüldefiniálhat) valamely utódosztályban. Override metódus tovább overridolható. Sem az abstract, sem a virtual módosítóval ellátott függvény nem lehet private láthatóságú, az override metódus pedig nem módosíthatja az eredeti függvény láthatóságát. Virtuális metódusok címét az osztályok a virtuális metódus táblában tárolják (VMT). Ha virtuális metódust hívtunk, akkor a ténylegesen futtatott metódus címét az objektumpéldányhoz tartozó VMT-ből nézi ki a keretrendszer, a példányokhoz csatolt VMT a konstruktorral együtt inicializálódik (ekkor kerülnek bele a VMT-be a virtuális eljárások példány típusához kötött címei).
19 Virtuális, nem virtuális metódusok összehasonlítása: Attól függően, hogy virtuális vagy nem virtuális a metódus, azonos metódushívás mást jelenthet. Nem virtuális metódusnál a változó típusa, virtuális metódusnál a példány típusa szabja meg, hogy melyik eljárás hívódik meg. Elérhetőségük Rendelkezésre állás Metódushívás Viselkedésük öröklés után Tárolás (objektumokat tagváltozókban tároljuk.) Előnyök nem virtuális metódusok virtuális metódusok A metódusok elérhetők a leszármazottakban, elérésüket csak a láthatósági szintjük határozza meg. Ez az információ már példányosításkor dől el, hogy a fordításkor ismert, így a tagváltozó ténylegesen mely fordítóprogram előre osztály egy példányát elkészítheti a hívást tartalmazza. Dinamikus (futási megvalósító gépi kódot. idejű vagy késői ) kötésnek Statikus kötésnek nevezzük. nevezzük. Az adott objektum deklarált típusának megfelelő osztály adott nevű metódusa hívódik meg. Korlátozottan módosítható (újra deklarálhatók; nincs kapcsolat ős és utód között) A tagváltozók deklarált típusa választja ki a hívandó metódust - egyszerű megvalósítás - nincs futási idejű teljesítményvesztés Az adott objektum tényleges típusának megfelelő osztály adott nevű metódusa hívódik meg Szabadon módosítható (felülbírálhatók) A tagváltozók tartalma nemcsak a deklarált osztály lehet, hanem annak összes leszármazottja is. - Többalakúság - Rendkívüli rugalmasság Hátrányok nem alkalmas többalakúságra - teljesítmény veszteség - nagyobb tárigény - bonyolultabb megvalósítás Többalakúság nem alkalmasak többalakúságra többalakúság megvalósításának legfőbb eszközei Absztrakt osztály: Olyan osztály aminek legalább 1 absztrakt metódusa van. Absztrakt osztály esetén csak előírjuk a kötelezően megvalósítandó metódusokat és változókat. Kódot nem tartalmaz, ezért nem példányosít ható.(céljuk az öröklés kikényszerítése.) Öröklések funkcionális előírásainak betartására használjuk, segítségükkel általános funkcionalitás adható meg az öröklés hierarchia felsőbb szintjein.(leszármazottban biztosan meg kell valósítani!)
20 Lezárt osztályok: Az öröklés és ezzel a többalakúság megakadályozása. Védeni akarjuk osztályunkat a későbbi örökléssel való felhasználástól. Virtuális metódusaik átírhatók statikus metódusokká. Véglegesnek szánt osztályok, illetve metódusok esetén lehet célszerű alkalmazni ezt a megoldást Virtualitás lehetősége különböző nyelvekben: VMT helyett, minden objektumban tároljuk a virtuális metódusok címét, ezért az objektumok mérete megnő.( Kevés objektum esetén nem jelentős a A program sebessége minden virtuális függvény hívásakor lassabb lesz. Nincs virtual kulcsszó mert minden Osztály metódusnál az adott osztályé hívódik meg mindig.(nincs virtuális Alkalmazásuk egyszerűbb, de a virtuális fgvk idő igényesebbek. Alapértelmezettként a metódusok nem Overide -olni csak azokat a metódusokat lehet amelyek az ősében szerepel virtual vagy abstract Abstract ill Virtuális tag függvénye nem lehet private Override -olás során nem módosíthatjuk a metódusok láthatóságát.
21 C# gyakorlati megvalósítása: /* A nemvirtuális metódusok változatlanul örökölhetők vagy a leszármazottakban elrejthetők * A leszármazott osztályban célszerű az újonnan bevezetett metódust a "new" kulcsszóval megjelölni */ class Állat public void Fut() Console.WriteLine("Az állat így fut."); class Kutya : Állat new public void Fut() Console.WriteLine("A kutya így fut."); class NemVirtuálisMetódusok static void Main() Állat egyikállat = new Állat(); egyikállat.fut(); //Az Állat osztály Fut() metódusa hívódik meg Kutya másikállat = new Kutya(); másikállat.fut(); //A Kutya osztály Fut() metódusa hívódik meg Állat házikedvenc = new Kutya(); házikedvenc.fut(); //Ismét az Állat osztály Fut() metódusa hívódik meg
22 /* A virtuális metódusok a leszármazottakban módosíthatók vagy elrejthetők * A virtuális metódusokat az ősosztályban a "virtual" kulcsszóval kell megjelölnünk * A leszármazottakban felülbírált virtuális metódusokat az "override" kulcsszóval kell megjelölnünk */ class Állat public virtual void Fut() Console.WriteLine("Az állat így fut."); class Kutya : Állat public override void Fut() Console.WriteLine("A kutya így fut."); class VirtuálisMetódusok static void Main() Állat házikedvenc = new Kutya(); házikedvenc.fut(); //A Kutya osztály Fut() metódusa hívódik meg
23 // Absztrakt osztály abstract class Alakzat public abstract void Kirajzol(); class Ellipszis : Alakzat public override void Kirajzol() // Kirajzol() metódus az Ellipszis osztály megvalósításában class Kör : Alakzat public override void Kirajzol() // Kirajzol() metódus a Kör osztály megvalósításában /* Lezárt osztályból nem származtatható másik osztály * Lezárt metódus leszármazottakban nem bírálható felül * A lezárt osztályok és lezárt metódusok célja az öröklés megakadályozása * A lezárt osztályok és metódusokat a "sealed" kulcsszóval kell megjelölnünk */ sealed class LezártOsztály sealed public void LezártMetódus()
24 62. Interfészek (elvi háttere, gyakorlati megvalósítása) Az interfészek célja, hogy kapcsolófelületet teremtsen a programkód készítője és a kód felhasználója között. Interfészek segítségével lehetőségünk nyílik időben egymástól elhatárolt fejlesztések végzésére. Az interfész önmagában nem példányosít ható, valójában egy tervezési eszköz. Ahhoz, hogy tudjuk használni, implementálni kell egy osztálydefinícióval, csak publikus és absztrakt metódusokat valamint publikus és statikus konstansokat tartalmazhat. A fent említett tulajdonság miatt gyakran üres osztályoknak is nevezzük. Az implementálás azt jelenti, hogy az interfész összes metódusának konkrét jelentést adunk (megvalósítjuk). Az így implementált osztály már használható, sőt ősosztályként is megjelenhet. Interfész megvalósítása (támogatása): Egy osztály akkor támogat egy interfészt, ha kötelezően vállalja, hogy megvalósítja a benne foglalt funkcionalitást. Az interfész - osztály kapcsolata CAN-DO kapcsolatra hasonlít. Interfész tartalmazza az előírt megvalósításokat, az osztályok pedig tartalmazzák a konkrét megvalósítást. Interfészek önmagukban nem példányosít hatók, csak az őket megvalósító osztályokon keresztül érhetők el a műveleteik. Az interfész megvalósításának lépései osztály definícióban a megvalósítandó interfészek felsorolása az interfész(ek)ben definiált metódusok implementálása Egy osztály egyszerre tetszőleges számú interfészt valósíthat meg, ezzel a polimorfizmus szempontjából a többszörös örökléshez hasonló eredményt érhetünk el Egy osztálynak kötelező implementálnia az általa megvalósított interfészek által definiált metódusokat (ellenkező eset fordítási hibát eredményez) Kivéve az absztrakt osztályokat, ahol nem szükséges minden metódust megvalósítani Implicit/explicit interfész megvalósítás: A többszörös öröklésnél felmerülő problémák közül néhány felmerül a több hasonló interfészt megvalósító osztályok esetén is.
25 Több interfész is tartalmazhat ugyanolyan szignatúrájú metódusokat, ennek kezelése érdekében kétféle interfész megvalósítást használhatunk: Implicit megvalósítás o Az osztály metódusának a szignatúrája megegyezik az interfész(ek)ben megadott szignatúrával. o Bármelyik interfésszel hivatkozunk az osztályra, mindig ugyanaz a metódus fut le. Explicit megvalósítás: o az osztályban a metódus neve mellett megadjuk az általa megvalósított interfész nevét is attól függően, hogy melyik interfésszel hivatkozunk az osztályra, mindig a megfelelő metódus fut le. o Célszerű ezt a megvalósítást használni. Interfész típusú referencia: Az interfészek tulajdonképpen típusok, ezért lehetséges ilyen típusú változók deklarációjára is Egy T típusú osztályra az alábbi típusú referenciákkal hivatkozhatunk (más típus fordítási hibát eredményez): T típusú referenciával T valamelyik őstípusának referenciájával T osztály által megvalósított valamelyik interfész típusának referenciájával egyéb: konverziók, casting stb. Az interfész típusú referenciák az osztály típusú referenciákhoz hasonló módon működnek Ez nem keverendő össze azzal, hogy az interfész típusból nem lehet példányt létrehozni! Interfész hierarchia: Az osztályokhoz hasonlóan az interfészek között is fel lehet építeni egy öröklődési hierarchiát (öröklődés helyett itt gyakran a kiterjesztés szót használjuk) Az osztályok és az interfészek hierarchiája egymástól független, interfész őse nem lehet osztály és osztály őse sem lehet interfész (az osztályok közti öröklést és az interfész megvalósítását tekintsük különbözőnek) Az osztályokhoz hasonlóan az interfészek is általában mind egy legmagasabb szintű ősből származnak Az osztályokhoz hasonlóan a polimorfizmus előnyeit az interfészek között is alkalmazhatjuk (minden interfész használható bármelyik őse helyén)
26 Osztály hierarchia: Amennyiben egy osztály megvalósít egy interfészt, akkor a leszármazottjai is mind megvalósítják. Ennek direkt jelölésére általában nincs szükség A megvalósító metódusokat a leszármazottak öröklik, így értelemszerűen nincs szükség további követelmények teljesítésére Egy T típusú osztályra tehát az alábbi típusú referenciákkal hivatkozhatunk: T típusú referenciával T valamelyik őstípusának referenciájával T osztály által megvalósított valamelyik interfész típusának referenciájával T osztály bármelyik őse által megvalósított interfész típusának referenciájával T osztály által megvalósított interfész bármelyik őstípusának referenciájával (egyéb: konverziók, casting stb.) Néhány további gondolat: Jelölő interfészek (marker interface) o nincsenek metódusaik o az osztályhoz rendelve futás közben lekérdezhetők, ezzel a futtató környezet (vagy reflexión keresztül az egyéb programok) számára nyújt információt o ha van helyette más nyelvi elem, célszerű elkerülni a használatát Segítő osztályok (helper class) o egy összetett interfész esetén gyakran csak néhány metódus megvalósítására lenne szükség, azonban mindig kötelező mindet implementálni o kényelmi szempontból az interfészekhez gyakran készítenek egyszerű, az interfészt üres (vagy alapértelmezett kóddal) megvalósító ún. segítő osztályokat o Nem célszerű interfészt új metódusokkal bővíteni, mivel így az ezt implementáló osztályok fordíthatatlanná válnak Gyakorlati megvalósítások: Nevüket I betűvel kezdjük és az interface kulcsszóval látjuk el. A gyakorlatban a metódusok public és abstract kulcsszavai és a mezők final, public és static kulcs szavai is elhagyhatók, mert az interfész osztály csak ilyen metódusokat tartalmazhat. (Fordító eleve elé rakja.)
27 namespace BoltiAlkalmazas interface ITulajdonsag bool T(); interface IKonyvelheto : ITulajdonsag int Osszeg(); class Alkalmazott : IKonyvelheto string nev; int fizetes; public int Osszeg() return -fizetes * 12; #region Tulajdonsag Members public bool T() return fizetes < 50000; #endregion class Aru : IKonyvelheto, ITulajdonsag //több interfész megvalüsítása //megvalósítási kódok
Interfészek. PPT 2007/2008 tavasz.
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált
RészletesebbenMár megismert fogalmak áttekintése
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenAdatstruktúrák, algoritmusok, objektumok
Adatstruktúrák, algoritmusok, objektumok 3. Az objektumorientált paradigma alapelemei Objektum Osztály Példányosítás A konstruktor és a destruktor Osztályok közötti kapcsolatok Miklós Árpád, BMF NIK, 2006
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenInterfészek. Programozás II. előadás. Szénási Sándor.
Interfészek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Polimorfizmus áttekintése Interfészek Interfészek alkalmazása
RészletesebbenProgramozási alapismeretek 4.
Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)
Részletesebbenés az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
RészletesebbenJava VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
RészletesebbenÖröklés és Polimorfizmus
Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal
RészletesebbenJAVA PROGRAMOZÁS 2.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,
RészletesebbenJava programozási nyelv 5. rész Osztályok III.
Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
RészletesebbenOOP. Alapelvek Elek Tibor
OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós
RészletesebbenProgramozás II. 3. gyakorlat Objektum Orientáltság C++-ban
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus
RészletesebbenOsztályok. 4. gyakorlat
Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum
RészletesebbenVisual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.
Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat
RészletesebbenProgramozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
RészletesebbenSzámítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén
RészletesebbenOsztály öröklődés. Öröklődés és polimorfizmus. Programozás II. előadás. http://nik.uni-obuda.hu/prog2 Szénási Sándor. szenasi.sandor@nik.uni-obuda.
Osztály öröklődés Öröklődés és polimorfizmus előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Öröklődés Polimorfizmus Osztályok
RészletesebbenObjektumorientált programozás C# nyelven II.
Objektumorientált programozás C# nyelven II. Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenStatikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék
Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma
RészletesebbenJava VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1
Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum
RészletesebbenProgramozás módszertan p.1/46
Programozás módszertan Öröklődés Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS
Részletesebben1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
RészletesebbenSzéchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu
Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:
RészletesebbenOOP #14 (referencia-elv)
OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet
RészletesebbenObjektumorientált programozás IX. Osztályok, objektumok
Objektumorientált programozás IX. Osztályok, objektumok 1 Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges,
RészletesebbenOOP: Java 8.Gy: Abstract osztályok, interfészek
OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus
RészletesebbenProgramozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:
RészletesebbenOsztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
RészletesebbenOsztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
RészletesebbenC++ programozási nyelv
C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. november A C++ programozási nyelv Soós Sándor 1/12 Tartalomjegyzék Miért
RészletesebbenObjektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben
Eötvös Loránd Tudományegyetem Informatikai Kar Objektumelvű alkalmazások fejlesztése 6. gyakorlat, polimorfizmus 2011.10.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Kódismétlődés
RészletesebbenJava programozási nyelv 4. rész Osztályok II.
Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék
RészletesebbenBevezetés a programozásba előadás: Öröklődés
Bevezetés a programozásba 2 5. előadás: Öröklődés emlékeztető Tagfüggvény struct koord { double x,y,r; void set(double ux, double uy) { x=ux; y=uy; r=sqrt(x*x+y*y); } Használat: koord k; k.set(4,5); Egységbezárás
RészletesebbenObjektumorientált programozás C# nyelven II.
Objektumorientált programozás C# nyelven II. Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenDr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016
Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:
RészletesebbenProgramozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 7. előadás AZ OOP alapelvei Egységbezárás(Encapsulation) Az adatokat es a hozzájuk tartozó eljárásokat egyetlen egységben (osztályban) kezeljük. Az osztály adatmezői
RészletesebbenBevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban
RészletesebbenPelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
RészletesebbenProgramozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus
RészletesebbenIII. OOP (objektumok, osztályok)
III. OOP (objektumok, osztályok) 1. Természetes emberi gondolkozás Az Objektumorientált paradigma alapelvei nagyon hasonlítanak az emberi gondolkozásra. Érdemes ezért elsőként az emberi gondolkozás elveit
RészletesebbenObjektumorientált paradigma
Objektumorientált paradigma Bevezető Vámossy Zoltán vamossy.zoltan@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Objektumorientált paradigma BEVEZETŐ FOGALMAK 2/77 Bevezetés - Fogalom
RészletesebbenAlkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus
Eötvös Loránd Tudományegyetem Természettudományi Kar Alkalmazott Modul III 6. előadás Objektumorientált programozás: öröklődés és polimorfizmus 2011.10.24. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
RészletesebbenOsztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;
PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function
RészletesebbenJava és web programozás
Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:
RészletesebbenVizuális és eseményvezérelt programozás , II. félév BMF NIK
Vizuális és eseményvezérelt programozás 2006 2007, II. félév BMF NIK Eseménykezelés A képviselő( delegate ) Képviselők C# nyelvi megvalósítása Metódushívás képviselőn keresztül Az esemény ( event ) Esemény
RészletesebbenObjektumelvű programozás
Objektum, osztály Objektumelvű programozás Az elemzés együttműködő objektumok rendszereként fogalmazza meg a feladatot. Objektum-központú elemzés A tervezés a feladat tárgyköreit egy-egy objektum felelősségévé
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 3. rész Tulajdonságok Indexelők Kivételkezelés Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Láthatósági szintek Névterek és hatókörök Osztály szintő tagok Beágyazott osztályok
RészletesebbenOOP és UML Áttekintés
OOP és UML Áttekintés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) OOP és UML Áttekintés 2013 1 / 32 Tartalom jegyzék 1 OOP Osztály Öröklődés Interfész, Absztrakt Osztály Kivétel kezelés
RészletesebbenWeb-technológia PHP-vel
Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request
RészletesebbenObjektumorientált szoftverfejlesztés alapjai
Objektumorientált szoftverfejlesztés alapjai Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben @Katona József Kővári Attila Lektorálta: Dr. Fauszt Tibor DOI:
RészletesebbenELTE SAP Excellence Center Oktatóanyag 1
Oktatóanyag 1 Oktatóanyag 2 Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi. Oktatóanyag 3 A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat,
RészletesebbenJava VII. Polimorfizmus a Java nyelvben
Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)
RészletesebbenJava V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:
Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból
RészletesebbenProgramozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 5. előadás Tömbök átméretezése public static void Resize( ref T[] array, int newsize ) Példa: int[] a=new int[20]; Array.Resize(ref a, 22); 2016. 10. 19.
RészletesebbenProgramozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila
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.
RészletesebbenBME MOGI Gépészeti informatika 8.
BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező
RészletesebbenC++ programozási nyelv
C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok
RészletesebbenSzámítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok
Részletesebben1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció
1. Öröklés Az objektum orientált tervezés fontos sarkköve, az osztályok viszonyainak a megtervezése. 1.1. Rétegelés c l a s s Address {..... c l a s s Name {..... c l a s s P e r s o n { Name name ; Address
RészletesebbenJava VII. Polimorfizmus a Java nyelvben
Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)
RészletesebbenObjektum orientált programozás Bevezetés
Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban
RészletesebbenOOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance
Az objektum-orientált programozás (röviden OOP) a természetes gondolkodást, cselekvést közelítő programozási mód, amely a programozási nyelvek tervezésének természetes fejlődése következtében alakult ki.
RészletesebbenProgramozás II. 6.Öröklés Dr. Iványi Péter
Programozás II. 6.Öröklés Dr. Iványi Péter 1 Öröklés Programozók lusta emberek, nem szeretnék valamit kétszer leírni Miért veszélyes? Nem hatékony Újra kell tárolni a kódot, újra le kell fordítani Karbantartás
RészletesebbenBevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum
Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout
RészletesebbenAbsztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:
Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban
RészletesebbenMiután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:
Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba
RészletesebbenVirtuális függvények (late binding)
Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy
RészletesebbenC++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
RészletesebbenOOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.
OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_01-1 - E jegyzet másolata
RészletesebbenOBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek
OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető
RészletesebbenProgramozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is
RészletesebbenTestLine - OO Programozás alapjai Minta feladatsor
2016.09.20. 18:46:36 Oktató: n/a Kérdések száma: 16 kérdés Kitöltési idő: 29:45 Szélsőséges pontok: -196 pont +672 pont z Óbudai gyetem Programozás III című tárgyának előkövetelményeként létező Programozás
RészletesebbenAbstract osztályok és interface-ek. 7-dik gyakorlat
Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,
RészletesebbenProgramozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.
Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. április 8. Csak bázisosztályként használt/értelmezhető
RészletesebbenOsztály és objektum fogalma
Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály
RészletesebbenKivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat
Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Névterek és hatókörök Láthatósági szintek Osztály szintő tagok Beágyazott osztályok
RészletesebbenPénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális
RészletesebbenC# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag
C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció
RészletesebbenC++ programozási nyelv Struktúrák a C++ nyelvben
C++ programozási nyelv Struktúrák a C++ nyelvben Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/37 Bevezetés A
RészletesebbenElemi Alkalmazások Fejlesztése II.
Elemi Alkalmazások Fejlesztése II. Osztályok közötti kapcsolatok öröklődés asszociáció aggregáció kompozíció 1. Feladat Készítsünk programot, amellyel testek térfogatát határozhatjuk meg, illetve megadhatjuk
RészletesebbenJava VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.
Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum
RészletesebbenHelyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?
A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály
RészletesebbenBevezetés a programozásba Előadás: A const
Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout
RészletesebbenProgramozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.
KIINDULÁS Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg. Programozás III Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk,
Részletesebben1. Bevezetés A C++ nem objektumorientált újdonságai 3
Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.
RészletesebbenGlobális operátor overloading
Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal
RészletesebbenBevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés
Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;
RészletesebbenBánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 9. ELŐADÁS - OOP TERVEZÉS 2014 Bánsághi Anna 1 of 31 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma
RészletesebbenJava és web programozás
Budapesti M szaki Egyetem 2013. szeptember 18. 2. El adás Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float
RészletesebbenProgramozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked
RészletesebbenGENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok
GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és Függvénysablonok Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben
RészletesebbenProgramozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
RészletesebbenJAVA PROGRAMOZÁS 3.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram
RészletesebbenProgramozás III. - NGB_IN001_3
Programozás III. - az objektumorientált programozásba Varjasi Norbert Széchenyi István Egyetem Informatika Tanszék Programozás III. - 1. el adás institution-log Tartalom 1 El adások és gyakorlatok Zárthelyi
Részletesebben3. Osztályok II. Programozás II
3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt
RészletesebbenBánsághi Anna 2014 Bánsághi Anna 1 of 33
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
Részletesebben