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)

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "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)"

Á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. 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észletesebben

Már megismert fogalmak áttekintése

Má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észletesebben

Objektumorientált programozás C# nyelven

Objektumorientá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észletesebben

Adatstruktúrák, algoritmusok, objektumok

Adatstruktú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észletesebben

Objektumorientált programozás C# nyelven

Objektumorientá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észletesebben

Interfészek. Programozás II. előadás. Szénási Sándor.

Interfé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észletesebben

Programozási alapismeretek 4.

Programozá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

é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észletesebben

Java 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. 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 Ö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észletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA 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észletesebben

Java programozási nyelv 5. rész Osztályok III.

Java 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észletesebben

OOP. Alapelvek Elek Tibor

OOP. 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észletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozá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észletesebben

Osztályok. 4. gyakorlat

Osztá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észletesebben

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.

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. 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észletesebben

Programozá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 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észletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Szá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észletesebben

Osztá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. 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észletesebben

Objektumorientált programozás C# nyelven II.

Objektumorientá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észletesebben

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Statikus 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észletesebben

Java 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. 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észletesebben

Programozás módszertan p.1/46

Programozá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észletesebben

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?

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? 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észletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Szé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észletesebben

OOP #14 (referencia-elv)

OOP #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észletesebben

Objektumorientált programozás IX. Osztályok, objektumok

Objektumorientá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észletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: 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észletesebben

Programozási nyelvek Java

Programozá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észletesebben

Osztálytervezés és implementációs ajánlások

Osztá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észletesebben

Osztálytervezés és implementációs ajánlások

Osztá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észletesebben

C++ programozási nyelv

C++ 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észletesebben

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Objektumelvű 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észletesebben

Java programozási nyelv 4. rész Osztályok II.

Java 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észletesebben

Bevezetés a programozásba előadás: Öröklődés

Bevezeté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észletesebben

Objektumorientált programozás C# nyelven II.

Objektumorientá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észletesebben

Dr. 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. 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észletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Programozá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észletesebben

Bevezetés a Python programozási nyelvbe

Bevezeté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észletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda ö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észletesebben

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozá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észletesebben

III. OOP (objektumok, osztályok)

III. 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észletesebben

Objektumorientált paradigma

Objektumorientá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észletesebben

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Alkalmazott 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észletesebben

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztá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észletesebben

Java és web programozás

Java é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észletesebben

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Vizuá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észletesebben

Objektumelvű programozás

Objektumelvű 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észletesebben

Objektumorientált programozás C# nyelven

Objektumorientá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észletesebben

Objektumorientált programozás C# nyelven

Objektumorientá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észletesebben

OOP és UML Áttekintés

OOP é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észletesebben

Web-technológia PHP-vel

Web-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észletesebben

Objektumorientált szoftverfejlesztés alapjai

Objektumorientá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észletesebben

ELTE SAP Excellence Center Oktatóanyag 1

ELTE 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észletesebben

Java VII. Polimorfizmus a Java nyelvben

Java 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észletesebben

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java 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észletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozá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észletesebben

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Programozá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észletesebben

BME MOGI Gépészeti informatika 8.

BME 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észletesebben

C++ programozási nyelv

C++ 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észletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Szá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észletesebben

1. Ö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 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észletesebben

Java VII. Polimorfizmus a Java nyelvben

Java 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észletesebben

Objektum orientált programozás Bevezetés

Objektum 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észletesebben

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

OOP 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észletesebben

Programozás II. 6.Öröklés Dr. Iványi Péter

Programozá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észletesebben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezeté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észletesebben

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Absztrakció. 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észletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miutá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észletesebben

Virtuális függvények (late binding)

Virtuá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észletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ 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észletesebben

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.

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. 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észletesebben

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM 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észletesebben

Programozási nyelvek Java

Programozá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észletesebben

TestLine - OO Programozás alapjai Minta feladatsor

TestLine - 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észletesebben

Abstract osztályok és interface-ek. 7-dik gyakorlat

Abstract 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észletesebben

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.

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. 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észletesebben

Osztály és objektum fogalma

Osztá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észletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivé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észletesebben

Objektumorientált programozás C# nyelven

Objektumorientá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észletesebben

Pénzügyi algoritmusok

Pé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észletesebben

C# 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. .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észletesebben

C++ programozási nyelv Struktúrák a C++ nyelvben

C++ 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észletesebben

Elemi Alkalmazások Fejlesztése II.

Elemi 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észletesebben

Java 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. 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észletesebben

Helyes-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?

Helyes-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észletesebben

Bevezetés a programozásba Előadás: A const

Bevezeté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észletesebben

Programozá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.

Programozá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észletesebben

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. 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észletesebben

Globális operátor overloading

Globá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észletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezeté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észletesebben

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31

Bá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észletesebben

Java és web programozás

Java é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észletesebben

Programozási nyelvek Java

Programozá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észletesebben

GENERIKUS 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 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észletesebben

Programozási nyelvek Java

Programozá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észletesebben

JAVA PROGRAMOZÁS 3.ELŐADÁS

JAVA 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észletesebben

Programozás III. - NGB_IN001_3

Programozá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észletesebben

3. Osztályok II. Programozás II

3. 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észletesebben

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bá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