Programozási Paradigmák és Technikák

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

Download "Programozási Paradigmák és Technikák"

Átírás

1 Programozási Paradigmák és Technikák Öröklődés Interfészek Kivételkezelés Rekurzió Eseménykezelés

2 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

3 Öröklődés a C# nyelvben Leszármazott osztályok deklarációjánál : karakterrel elválasztva lehet megadni az ősosztály nevét (csak egyszeres öröklődés van) Ezt követően csak az új mezőket/metódusokat kell felsorolni class Állat { int életkor; public Állat( ) {... public void Eszik( ) {... Állat életkor : Szám Állat() Eszik() class Emlős : Állat { public Emlős Szül( ) {... class Macska : Emlős { string név; public void Nyávog( ) {... Emlős Szül() : Emlős Macska név : Szöveg Nyávog() 3

4 Konstruktorok öröklődése A konstruktorok nem öröklődnek Van lehetőség meghívni az ősosztály konstruktorát a base kulcsszó segítségével (több ős konstruktor esetén a paraméterlista alapján dönt) Kötelező konstruktorhívás A leszármazottban kötelező meghívni az ős valamelyik konstruktorát Amennyiben nincs ilyen hívás, akkor az ős paraméter nélküli konstruktora automatikusan meghívódik (ha az ősnek nincs paraméter nélküli konstruktora, a fordító hibát jelez) class A { public A( ) {... class B : A { public B( ) {... class C : A { public C(int x) {... class E : C { public E(int y) : base (y) {... class F : C { public F( ) : base (5) {... 4

5 Virtuális és nemvirtuális metódusok Nemvirtuális metódusok Korai kötés jellemzi őket Alapértelmezetten minden metódus nemvirtuális Virtuális metódusok Késői kötés jellemzi őket Külön szintaktikai megjelölést igényelnek A virtuális metódusokat az ősosztályban a virtual kulcsszóval kell megjelölni A leszármazottakban a felülbírált virtuális metódusokat az override kulcsszóval kell megjelölni (egyébként metódus elrejtés történik, lásd következő dia) Az ős metódus elérhető a base kulcsszó segítségével class A { public virtual int Metodus( ) {... class B : A { public override int Metodus( ) {... 5

6 Metódusok elrejtése Elrejtés: leszármazott osztályban azonos néven létrehozunk egy másik metódust A leszármazott osztályban az új metódust a new kulcsszóval célszerű megjelölni (bár nem kötelező, a fordító figyelmeztet ha elmarad) Az ősosztály azonos nevű metódusa elérhető a base kulcsszó segítségével Elrejtés - virtualitás Mind virtuális, mind pedig nemvirtuális metódusok esetében használható (virtuális metódus esetén egy új virtuális hívási láncot indít) Az elrejtésnek nincs köze a virtualitáshoz, valójában egymástól független metódusokat jelent, akiknek véletlenül azonos a nevük class A { public int MetodusX( ) {... public virtual int MetodusY( ) {... class B : A { public new int MetodusX( ) {... public new virtual int MetodusY( ) {... 6

7 Típuskényszerítés ( casting ) Típuskényszerítéssel egy objektumot úgy kezelhetünk, mintha egy másik típusú lenne Implicit: automatikus típusátalakítás Pl. számok közötti automatikus konverzió (egész lebegőpontos), nincs szükség jelölésre Explicit: átalakítás a programozó kérésére Jelölése: az átalakítandó típus elé zárójelbe írjuk a kívánt típust Pl. Állat x; Macska y = (Macska)x; ((Macska)x).Nyávog(); is operátor Használata: x is Állat Igaz értékkel tér vissza, ha az ellenőrizendő objektum a megadott osztályhoz, vagy annak valamely leszármazottjához tartozik as operátor Használata: x as Állat Ha az átalakítás sikerül, a kifejezés használható a megadott típusúként, egyébként a kifejezés értéke null lesz 7

8 Absztrakt osztály és metódus Az absztrakt metódusokat és osztályokat az abstract kulcsszóval kell megjelölni Egy osztály kötelezően absztrakt, ha legalább egy absztrakt metódusa van Absztrakt osztályból nem lehet példányosítani Absztrakt metódusokat a leszármazottban kötelező implementálni (vagy absztraktként jelölni) abstract class Síkidom { public abstract double Terület( ); public abstract double Kerület( ); class Téglalap : Síkidom { int a; int b; public override double Terület( ) { return a * b; public override double Kerület( ) { return 2 * (a * b); 8

9 Lezárt osztály és metódus A lezárt metódusokat és osztályokat a sealed kulcsszóval kell megjelölni Megjelölhető vele egyetlen metódus vagy egy teljes osztály is Osztály esetén nem engedi a származtatást Metódus esetén nem engedi a felülírást sealed class Téglalap : Síkidom { int a; int b; public override double Terület( ) { return a * b; public override double Kerület( ) { return 2 * (a * b); 9

10 Object ősosztály Minden osztály közös őse a System.Object osztály Amennyiben külön nem adunk meg egy osztálynak őst, akkor az automatikusan az Object leszármazottja lesz Néhány fontosabb metódusa: public Type GetType() Visszaadja a példány típusát reprezentáló objektumot public virtual bool Equals(object obj) Egyenlőség vizsgálat, saját osztály esetén célszerű felülírni public virtual int GetHashCode() Visszaad egy hash értéket, saját osztály esetén célszerű felülírni public virtual string ToString() Tetszőleges szöveget ad vissza, a gyakorlatban gyakran jól használható public static bool ReferenceEquals(object obja, object objb) Statikus metódus a referencia szerinti egyenlőségvizsgálathoz public static bool Equals(object obja, object objb) Statikus metódus a tartalom szerinti egyenlőségvizsgálathoz 10

11 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

12 Öröklődés példa Feladat 1.1 Valósítsuk meg az oldalt látható osztályhierarchiát Oldjuk meg az alábbiakat: Tároljunk el 5 db síkidomot egy tömbben Készítsünk egy metódust, ami egy síkidomot kilyukaszt, ha annak nagyobb a területe mint a kerülete Készítsünk egy metódust, ami megadott oldalhosszak alapján létrehoz egy Téglalap vagy egy Négyzet objektumot Készítsünk egy metódust, ami Síkidomok tömbjéből megadja a legnagyobb területű elemet 12

13 Öröklődés feladat (alap osztályok) Feladat Készítsük el az alább felsorolt osztályokat Tulajdonos osztály Kívülről írható/olvasható formában tárolja el a tulajdonos nevét Biztonsági okokból ne lehessen belőle származtatni BankiSzolgáltatás osztály A konstruktorban lehessen megadni a tulajdonost, ez a későbbiekben csak olvasható legyen Ebből az osztályból ne lehessen közvetlenül példányosítani Számla osztály Legyen a BankiSzolgáltatás osztály leszármazottja Konstruktorában lehessen megadni a tulajdonost Kívülről csak olvasható formában tárolja el az aktuális egyenleget Egy Befizet(összeg) metódussal lehessen növelni az egyenleget Legyen egy hasonló paraméterű, de nem implementált Kivesz(összeg) metódusa is, aminek a visszatérési értéke egy logikai érték 13

14 Öröklődés feladat (számlák) HitelSzámla osztály Legyen a Számla osztály leszármazottja A konstruktorban lehessen megadni a tulajdonos mellett a hitelkeret összegét, a későbbiekben ez csak olvasható legyen Valósítsa meg úgy a Kivesz(összeg) metódust, hogy csak a hitelkeret mértékéig engedjen negatív számla egyenleget. Ellenkező esetben ne csökkentse az egyenleget és hamis visszatérési értékkel jelezze, hogy nem sikerült a kivétel MegtakarításiSzámla osztály Legyen a Számla osztály leszármazottja Kívülről írható/olvasható formában tárolja el a kamat mértékét Az osztály egy statikus mezőjében tárolja el az alapértelmezett kamatot. Egy új megtakarítási számla létrehozásakor ez legyen a kamat kezdőértéke A Kivesz(összeg) metódus ne engedje 0 alá csökkenni az egyenleget, visszatérési értéke jelezze, hogy sikerült-e a kivét Legyen egy Kamatjóváírás() metódusa, ami jóváírja az esedékes kamatot 14

15 Öröklődés feladat (kártyák) Kártya osztály Legyen a BankiSzolgáltatás osztály leszármazottja A konstruktorban lehessen megadni a tulajdonos mellett a hozzá tartozó mögöttes számlát, illetve a kártya számát A kártyaszám legyen kívülről olvasható, a mögöttes számla nem módosítható Készítsen egy Vásárlás(összeg) metódust, ami a paraméterként megadott összeggel megpróbálja csökkenteni a mögöttes számla egyenlegét, és visszatérési értéke legyen ennek sikeressége Számla osztály kiegészítése Egészítse ki a Számla osztály egy ÚjKártya(kártyaszám) metódussal, amely a leendő kártyaszámot várja paraméterként A metódus hozzon létre egy új kártyát (az aktuális számlát és annak tulajdonosát adva meg a kártya adataiként) és legyen ez a metódus visszatérési értéke 15

16 Öröklődés feladat (bank) Bank osztály Tároljon el tetszőleges számú számlát, ezek maximális számát a Bank konstruktorában lehessen megadni Legyen egy Számlanyitás(tulajdonos, hitelkeret) metódusa, amelynek paraméterei egy Tulajdonos objektum és egy hitelkeret összeg. A hitelkeret összegének megfelelően hozzon létre hitel vagy megtakarítási számlát, ezt tárolja el, és ez legyen a metódus visszatérési értéke is Legyen egy Összegyenleg(Tulajdonos) metódusa, amely visszaadja a paraméterként átadott tulajdonos számláinak összegyenlegét Legyen egy LegnagyobbEgyenlegűSzámla(Tulajdonos) metódusa, amely visszaadja a megadott tulajdonos legnagyobb egyenlegű számláját Legyen egy Összhitelkeret() metódusa, amely visszaadja a bank által az összes ügyfélnek adott hitelkeretek összegét A fenti osztályok implementálását követően hozzon létre példa Tulajdonos és Bank objektumokat, majd próbálja ki a fenti funkciók működését 16

17 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

18 Programozási tételek összeépítése (1) Feladat mintaadatok Állatkertünkben háromféle állat tárolunk különböző méretű ketrecekben az alábbi mintaadatok szerint: Hím 20 kg Kormos Hím 310 kg Morgó Hím 2 kg Nindzsa Nőstény 320 kg Mici Hím 320 kg Morcos Nyami Nőstény 12 kg Hím 40 kg Kajás Hím 4 kg Nóri Hím 40 kg Kolbász Nőstény 10 kg Kicsi Hím 3 kg Killer Marcsi Nőstény 320 kg Nőstény 13 kg Kati Hím 5 kg Norbi Hím 5 kg Kaller Hím 4 kg Nándi Hím 15 kg Karesz Hím 10 kg Krumpli 1. ketrec 2. ketrec 3. ketrec 4. ketrec 18

19 Programozási tételek összeépítése (2) Feladat kérdések Válaszoljuk meg az alábbi kérdéseket az előző oldalon látható mintaadatokból felépített modell alapján. Az összetett feladatok során próbáljuk a már megismert programozási tételek (illetve az előzőleg elkészült részfeladatok) segítségével elkészíteni a megoldást. Tételek összeépítésénél használható mindhárom előadáson megismert összeépítési technika. Egyszerű programozási tételek (N 1) Megadott ketrecben hány darab megadott fajú állat található? int FajDarab(Allat[ ] A, AllatFaj faj) Megadott ketrecben van-e megadott fajú és nemű állat? bool FajEsNemVanE(Allat[ ] A, AllatFaj faj, bool himnemu) Egyszerű programozási tételek (N N) Megadott ketrecben melyek a megadott fajú állatok? Allat[ ] FajAllatok(Allat[ ] A, AllatFaj faj) 19

20 Programozási tételek összeépítése (3) Programozási tételek összeépítése Megadott ketrecben mennyi a megadott fajú állatok átlagos tömege? float AtlagFajTomeg(Allat[ ] A, AllatFaj faj) Megadott ketrecben melyik a legnehezebb megadott fajú állat? Allat FajLegnehezebb(Allat[ ] A, AllatFaj faj) Megadott ketrecben hány (a ketrecen belül a saját fajára számított) átlagosnál nehezebb állat van? int AtlagnalNehezebbDarab(Allat[ ] A) Melyik ketrecben van a legtöbb (a ketrecen belül a saját fajára számított) átlagosnál nehezebb állat? int LegtobbAtlagnalNehezebb(Allat[ ][ ] A) Hány olyan ketrec van, ahol az előzőleg kiszámolt számú átlagosnál nehezebb állat található? int LegtobbAtlagnalNehezebbDarab(Allat[ ][ ] A) 20

21 Programozási tételek összeépítése (4) Programozási tételek összeépítése Melyik ketrecben található a legtöbb megadott fajú állat? int LegtobbFaj(Allat[ ][ ] A, AllatFaj faj) Megadott ketrecben van-e legalább egy azonos fajú, de ellenkező nemű egyedekből álló páros? bool AzonosFajEllenkezoNemVanE(Allat[ ] A) Megadott ketrecben tartozik-e mindenkihez legalább egy azonos fajú, de ellenkező nemű állat? (ahhoz nem ragaszkodunk, hogy mindenkihez egy kizárólagos pár tartozzon) bool AzonosFajEllenkezoNemMindenkinek(Allat[ ] A) Hány olyan ketrec van, ahol van legalább egy azonos fajú, de ellenkező nemű tagokból álló páros? int AzonosFajEllenkezoDarab(Allat[ ][ ] A) Hányas számú ketrecekben nincs egy azonos fajú, de ellenkező nemű egyedből álló pár se? int[ ] AzonosFajEllenkezoNemNincs(Allat[ ][ ] A) 21

22 Összetett feladatok megoldása (1) Feladat mintaadatok Receptkönyv Raktár Liszt 50 g Vaj 50 g Tej 50 g besamel Tej 100 g Rizs 100 g Tej 100 g Tej 200 g Vaj 10 g tejberizs Vaj 10 g Hús 100 g Vaj 50 g kijevi Hagyma 10 g Vaj 10 g Hús 100 g Liszt 10 g rostélyos Hagyma 30 g rántott hús Hús 100 g Liszt 10 g Tojás 10 g Tej 300 g Vaj 300 g Liszt 300 g Rizs 300 g Hús 50 g Teri Feri Mari Vendégek szereti szereti szereti allergiás Hús Vaj Vaj Tojás Liszt Liszt Rizs Hús

23 Összetett feladatok megoldása (2) Feladat kérdések Válaszoljuk meg az alábbi kérdéseket az előző oldalon látható mintaadatokból felépített modell alapján (zárójelben megadott osztályban). Egyszerű segéd metódusok Receptkönyv egy megadott nevű receptjének a kiválasztása (ReceptKonyv) Recept ReceptKivalasztas(string nev) Recept tartalmaz megadott alapanyagot? (Recept) bool TartalmazAlapanyagot(Alapanyag alapanyag) Mennyi egy recept hozzávalóinak összesített mennyisége? (Recept) public float ReceptOsszMennyiseg( ) Hány recept nem tartalmaz egy megadott alapanyagot? (ReceptKonyv) int HanyReceptNemtartalmazAlapanyagot(Alapanyag alapanyag) Melyik receptek tartalmaznak egy megadott alapanyagot? (ReceptKonyv) Recept[ ] AlapanyagotTartalmazoReceptek(Alapanyag alapanyag) Megadott vendég allergiás-e egy megadott alapanyagra? (AllergiasVendeg) bool AllergiasRa(Alapanyag alapanyag) 23

24 Összetett feladatok megoldása (3) Receptek hozzávalóival kapcsolatos kérdések Recept hányféle egymástól különböző alapanyagot tartalmaz? (Recept) int KulonbozoAlapanyagokSzama( ) Melyik a legbonyolultabb recept (amelyik a legtöbb különböző alapanyagot tartalmazza)? (ReceptKonyv) public Recept LegbonyolultabbRecept( ) Az egyes hozzávalókból összesítve mennyire van szükség a recept elkészítéséhez? (Recept) public Hozzavalo[ ] HozzavalokOsszesitve( ) Megadott hozzávalókból elkészíthető-e a recept? (Recept) bool MegvalosithatoHozzavalokbol(Hozzavalo[ ] raktar) Hányféle receptet lehet elkészíteni megadott hozzávalókból? (ReceptKonyv) int HanyfeleReceptValosithatoMegHozzavalokbol(Hozzavalo[ ] raktar) Melyik recepteket lehet elkészíteni megadott hozzávalókból? (ReceptKonyv) Recept[ ] MelyikReceptekValosithatokMegHozzavalokbol(Hozzavalo[ ] raktar) 24

25 Összetett feladatok megoldása (4) Vendégekkel kapcsolatos kérdések Mennyire jónak értékel egy vendég egy receptet (az általa szeretett hozzávalók mennyiségének az összege)? (Vendeg) virtual float Ertekel(Recept recept) Valósítsuk meg az értékelést az allergiás vendégek esetén is (ha allergiás bármelyik hozzávalóra, akkor 0, egyébként a szokásos! (AllergiasVendeg) override float Ertekel(Recept recept) Megadott vendégnek melyik receptet ajánljuk? (ReceptKonyv) Recept SzemelyreszabottAjanlat(Vendeg vendeg) Mennyire jó egy recept egy társaság számára (a megadott vendégek értékelésének átlaga)? (Recept) float MennyireSikeres(Vendeg[ ] vendegek) Megadott társaság számára melyik a legsikeresebb recept? (ReceptKonyv) Recept LegsikeresebbRecept(Vendeg[ ] vendegek) 25

26 Programozási tételek házi feladat Házi Feladat 1.1 Egy 364 napos tömbben tároljuk az egy év (52 hét) alatt mért napi átlaghőmérsékleteket. Ezek ismeretében válaszoljunk az alábbi kérdésekre: Hány napon érte el a hőmérséklet az éves maximum 90%-át? Melyik volt az év legmelegebb hete (maximális heti átlaghőmérséklet)? Hány olyan hét volt, amikor legalább egyszer fagyott? Hány olyan hét volt, amikor minden nap fagyott? Melyik napon volt a legnagyobb lehülés az előző naphoz képest? Hány olyan nap volt, amikor előző és következő nap fagyott, de aznap nem? Mikor volt a leghosszabb időszak, amikor folyamatosan esett a hőmérséklet? Hányszor volt az évben kánikula? (legalább 3 napig 35 C feletti hőmérséklet) Volt-e olyan min. 5 napos időszak, amely értékei megismétlődtek később? Milyen hosszú volt az a leghosszabb időszak, amikor egyszer se fagyott? Milyen hosszú volt az a leghosszabb időszak, amelyen belül egyszer se fagyott egymást követő 5 napon át? 26

27 Összetett feladatok megoldása házi feladat Házi Feladat 1.2 Tervezzük meg és implementáljuk egy egyszerű szerszámkölcsönző cég rendszerét, amely megvalósítja az alábbi funkciókat: Tárolja az aktuális időpontot (az év hányadik napja), ami menüből léptethető Tárolja a kölcsönözhető eszközök adatait (típus {porszívó, fúrógép, lángvágó, állapot {0..1, alapdíj mértéke 10 napra, késedelmi díj mértéke ezt követően naponta) Tárolja a kölcsönző személyek adatait (név, aktuális kölcsönzési adatok eszköz, kölcsönzés ideje {max. 5 db, előjegyzési lista {max. 5 db) Kölcsönzéskor a megadott típus alapján automatikusan válasszuk ki a legjobb állapotú, legdrágább eszközt és rögzítsük a kölcsönzést. Legyen lehetőség listázni az összes kölcsönzést Ha nincs elérhető eszköz, vegyünk fel előjegyzést a legkorábban lejáró eszközre. Legyen lehetőség listázni az összes előjegyzést Legyen lehetőség visszaadni egy eszközt, a program számolja ki az alapdíj és a késedelmi díj alapján a fizetendő összeget (illetve csökkentse az eszköz állapotát nap/100-al). Ha volt előjegyzés az eszközre, akkor automatikusan kerüljön át az új személyhez. Legyen lehetőség meghosszabbítani egy kölcsönzést, de csak akkor, ha arra az eszközre még nincs előjegyzés Selejtezéskor töröljük az eszközt és helyettesítsük a rá vonatkozó előjegyzéseket egy hasonlóval Listázzuk eszköztípusonként, hogy aktuális napon mennyi bevételt hoznak a cégnek Töltsük fel a rendszert adatokkal, és menüvezérelt módon legyen lehetőség elérni a fenti funkciókat! 27

28 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

29 Interfész C# nyelvben Interfész létrehozása az interface kulcsszóval lehetséges Fel kell sorolni a kötelezővé teendő metódusokat, tulajdonságokat Az interfész implementálása az ősosztály megadásához hasonló Ha meg van adva ősosztály, akkor vesző után következik az interfész Egyszerre több interfész is megvalósítható Interfész típus nem példányosítható, de referenciaváltozó lehet interface IÜzenetFogadó { bool Elérhető { get; set; void ÜzenetKüldés(string üzenet); class ChatPartner : Személy, IÜzenetFogadó { public bool Elérhető { get {... set { public void ÜzenetKüldés(string üzenet) {... IÜzenetFogadó x = new ChatPartner(); <<interface>> IÜzenetFogadó Elérhető : Logikai ÜzenetKüldés(Szöveg) ChatPartner IÜzenetFogadó 29

30 Absztrakt osztály és interfész Absztrakt osztály is megvalósíthat interfészt Ilyenkor a metódust nem szükséges implementálni, azonban kötelezően absztraktként kell megjelölni Ugyanez igaz az interfészben szereplő tulajdonságokra interface IEladható { bool Ár { get; set; void Elad( ); abstract class Termék : IEladható { public abstract bool Ár { get; set; public abstract void Elad( ); Az absztrakt osztály leszármazottainak implementálniuk kell a metódusokat és tulajdonságokat 30

31 Interfészek kiterjesztése Interfészek kiterjesztése formailag hasonló az osztályok származtatásához ( : jel után kell megadni az ősöket) Egy interfész egyszerre több másik interfészt is kiterjeszthet Egy interfészt megvalósító osztálynak implementálnia kell az interfész ősei által előírt követelményeket is (metódusok, tulajdonságok, események stb.) interface IEladható { bool Ár { get; set; void Elad( ); interface IAkciózható : IEladható { void Akció(double kedvezmény); public class Termék : IAkciózható { public bool Ár { get; set; public void Elad( ) {... public void Akció(double kedvezmény) {... 31

32 Implicit interfész megvalósítás Implicit interfész megvalósítás Ha több megvalósított interfész is tartalmaz ugyanolyan metódus szignatúrát (+maga a megvalósító osztály is tartalmazhat ilyen metódust), akkor azok egy metódussal is megvalósíthatók Ebben az esetben mindegy, hogy melyik referenciával hivatkozunk az objektumra, mindig ez a metódus fog lefutni interface IFileKezelő { void Töröl( ); interface IKorrektúra { void Töröl( ); public class SzövegFile : IFileKezelő, IKorrektúra { public void Töröl( ) { 32

33 Explicit interfész megvalósítás Explicit interfész megvalósítás Ha több megvalósított interfész is tartalmaz ugyanolyan metódus szignatúrát (+ maga a megvalósító osztály is tartalmazhat ilyen metódust), akkor azok különböző metódussal is megvalósíthatók Ebben az esetben a hívást végző referencia típusától függ, hogy melyik metódus fut le interface IFileKezelő { void Töröl( ); interface IKorrektúra { void Töröl( ); public class SzövegFile : IFileKezelő, IKorrektúra { public void Töröl( ) { void IFileKezelő.Töröl( ) { void IKorrektúra.Töröl( ) { 33

34 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

35 Meglévő interfész megvalósítása Feladat 2.1 Készítsen egy tetszőleges osztályt, amely megvalósítja az IComparable interfészt A.NET osztálykönyvtár tartalmaz egy IComparable nevű interfészt, amelyet megvalósítva egy objektum össze tudja hasonlítani önmagát egy másikkal Az interfész csak egyetlen metódust határoz meg: int CompareTo(Object obj) A leírás alapján ennek lehetséges visszatérési értékei: kisebb mint 0 a példány megelőzi a paraméterként átadottat a sorrendben 0 a példány és a paraméterként átadott azonos helyen szerepelnek a sorrendben nagyobb mint 0 a példány követi a paraméterként átadottat a sorrendben Próbálja ki az így megvalósított objektumokat, egy belőlük létrehozott tömböt adjon át a beépített rendező metódusnak A.NET osztálykönyvtár rendelkezik egy Array.Sort(Array) statikus metódussal Ez a metódus rendezi a paraméterként átadott IComparable interfészt megvalósító objektumokat 35

36 Saját interfészek használata, kiterjesztés Feladat 2.2 Valósítsuk meg az alább látható interfész és osztály hierarchiát 36

37 Interfész feladat (alap osztály és interfészek) Feladat Készítsük el a felsorolt osztályokat és interfészeket IEladható interfész Tartalmaz egy csak olvasható Ár tulajdonságot IKarbantartandó interfész Tartalmaz egy logikai értéket visszaadó KarbantartásSzükséges() metódust, amely majd visszaadja, hogy szükséges-e a megadott termék karbantartása Tartalmaz egy szöveget visszaadó Karbantartás() metódust, aminek a visszatérési értéke lesz a karbantartási esemény leírása Termék oszály Legyen egy kívülről írható/olvasható Név tulajdonsága, amihez az értéket a konstruktorban lehessen megadni Valósítsa meg az IEladható interfészt Mivel ezen a szinten még nem ismerjük az egyes leendő termékek árképzésének módját, így legyen a kötelezően megvalósítandó Ár tulajdonság absztrakt (ennek megfelelően az egész osztály is) 37

38 Interfész feladat (Termék leszármazottak) Cipő osztály Legyen a Termék osztály leszármazottja, termék névnek automatikusan Cipő szöveget adjon át az ős konstruktorának Tartalmazzon egy méret mezőt, amit a konstruktorban lehet megadni Valósítsa meg az Ár tulajdonság lekérdezését, egy cipő ára legyen a mérettől függő: ha a méret > 40 akkor egyébként pedig Virág osztály A Termék leszármazottja, névnek a konstruktorban kapott nevet adja tovább Tárolja el a virág korát, ebből képezze a szükséges árat is: kor * 2 Valósítsa meg a IKarbantartandó interfészt is az alábbi módon: KarbantartásSzükséges : minden harmadik hívásnál adjon vissza igazat (a híváskor növelhetjük a virág korát) Karbantartás : visszatérési értéke legyen az Öntözés szöveg Hűtő osztály Valósítsa meg az IKarbantartható interfészt: a KarbantartásSzükséges mindig igazat adjon vissza, a Karbantartás leírása legyen a Tisztítás szöveg 38

39 Interfész feladat (fő modulok) EladóModul osztály Tároljon el tetszőleges számú (a maximumot a konstruktorban lehessen megadni) IEladható interfészt megvalósító objektumot Legyen egy ÚjTermékFelvétele(IEladható) metódusa, amelyik felvesz egy új eladható elemet a fenti tömbbe Legyen egy Legolcsóbb() metódusa, amelyik visszaadja a legolcsóbb termék referenciáját KarbantartóModul osztály Tároljon el tetszőleges számú (a maximumot a konstruktorban lehessen megadni) IKarbantartandó interfészt megvalósító objektumot Legyen egy ÚjKarbantartandóFelvétele(IKarbantartandó) metódusa, amelyik felvesz egy új karbantartandó elemet a fenti tömbbe Legyen egy MindenKarbantartás() nevű metódusa, amely végignézi az összes eltárolt karbantartandó elemet, lekérdezi, hogy azok igényelnek-e karbantartást, és ha igen, akkor meghívja azok Karbantartás() metódusát. Annak visszatérési értékét írja ki a képernyőre 39

40 Interfész feladat (kiterjesztés) IVisszaváltható interfész Legyen az IEladható interfész kiterjesztése Tartalmazzon egy VisszaváltásiÉrtéke(elteltNapokSzáma) metódust, amely egy egész számot ad vissza VásárlásiUtalvány osztály Valósítsa meg az IEladható és az IVisszaváltható interfészeket is, mindkét esetben 1000-et adjon vissza (ár és visszaváltási érték a napoktól függetlenül) Cipő osztály kiegészítése Valósítsa meg a Cipő osztály is az IVisszaváltható interfészt A visszaváltási értéket az ár és az eltelt napok száma alapján számoljuk (lineárisan csökkenjen). Ha még aznap visszaváltják, akkor legyen egyenlő az eredeti árral, 50 nap esetén már legyen 0 A fenti osztályok és interfészek implementálását követően hozzon létre minta objektumokat, majd próbálja ki a fenti funkciók működését 40

41 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

42 Többrétegű architektúrák Háromrétegű architektúra Megjelenítés réteg (VEP) Üzleti logika réteg (OOP, PPT) Adat (erőforrás) réteg (ADB) Jellemzői Minden réteg egy jól definiálható feladatot lát el, közvetlenül az alatta lévő réteget felhasználva Ha nincs is szükség az egyes rétegek fizikai függetlenségére (pl. külön alkalmazásszerver), akkor is célszerű laza kapcsolatot építeni a szintek között Előnyei: Kódújrafelhasználás, modularitás, team-munka egyszerűsödik, kód áttekinthetőbb Egyszerűbb karbantartás, jó skálázhatóság 42

43 Saját kivételek készítése (1) Feladat 3.1 Készítsük el egy egyszerű bank modelljét, ahol az ügyfelek számlái mellett lehetőség van csoportos beszedési megbízások kezelésére is Sor osztály Készítsük egy egyszerű sor adatszerkezetet az alábbi metódusokkal: Legyen egy konstruktora, ahol paraméterként meg lehet adni az adatszerkezet méretét public Sor(int meret) Egy metódus segítségével lehessen új objektumot berakni a sorba (Object típust, vagy annak leszármazottait). Amennyiben a fix méretű tömbbe már nem fér el több új elem, dobjon egy SorMegteltKivetelt public void Betesz(object elem) Legyen lehetőség kivenni az elsőként berakott elemeket a sorból. Ha üres sornak hívják meg ezt a metódusát, dobjon egy SorUresKivetelt public Object Kivesz() Egy tulajdonság mutassa meg, hogy üres-e a sor public bool Ures

44 Saját kivételek készítése (2) BankSzamla osztály Egy bankszámla objektum az alábbi adatokat tárolja: számla azonosítója, számlatulajdonos neve, aktuális egyenleg. Rendelkezzen a mezőket kiolvasó tulajdonságokkal, illetve az alábbi műveletekkel: Egy metódus segítségével legyen lehetőség megadott összeggel megterhelni a számlát. Amennyiben az aktuális egyenleg ezt megengedi, akkor csökkentse annak értékét a paraméterként átadott összeggel, ellenkező esetben pedig dobjon egy SzamlanNincsFedezetKivetelt public void Terhel(int osszeg) A SzamlanNincsFedezetKivetel objektum mindig tartalmazza, hogy melyik számlát nem sikerült megterhelni, illetve ki lehessen belőle olvasni a sikertelenül terhelni próbált összeget is public BankSzamla Szamla public int Terheles Beszedes osztály Készítsünk egy Beszedes nevű osztályt, ami tárolja egy beszedés adatait: szolgáltató neve (aki a terhelést indítja), ügyfél neve (akitől le akarják vonni a pénzt), terhelendő összeg (a szolgáltatás havi díja)

45 Saját kivételek készítése (3) Bank osztály Készítsük el a bankot modellező osztályt is, ami tetszőleges adatszerkezetekben tárolja az alábbi adatokat: számlák: Szamla objektumok (a bank által vezetett számlák listája) engedélyek: Megbízás objektumok (melyik ügyfél, melyik szolgáltatónak, milyen maximális összeggel adott automatikus beszedési lehetőséget) beszedésisor: Megbízásokat tartalmazó sor, amelyik tartalmazza a cégektől folyamatosan érkező terhelési kéréseket (a feldolgozás során olyan sorrendben kell majd őket feldolgozni, ahogyan érkeztek) Ügyfél nyithasson új számlát egy név és egy nyitóösszeg megadásával (számlaszám automatikusan generálódjon) public void UjSzamlaNyitas(string tulaj, int nyitoosszeg) Ügyfél tudjon engedélyt adni automatikus megbízás teljesítésre az ehhez szükséges adatok meghatározásával public void UjMegbizas(string szolgaltato, string ugyfel, int maxosszeg) Szolgáltató jelezhessen egy új beszedési igényt public void BeszedesFelvetele(string szolgaltato, string ugyfel, int osszeg)

46 Saját kivételek készítése (4) Bank osztály Egy metódus meghívásával legyen lehetőség a sorban időközben összegyűlt beszedések feldolgozására. A bank ellenőrizze minden beszedés esetén annak jogosságát (engedélyek listája), illetve próbálja meg az ügyfél számláját megterhelni a kívánt összeggel (amennyiben az fedezet hiány miatt kivételt dobna, automatikusan próbálkozzon egy másik számlájával) public void BeszedesiSorFeldolgozasa() A fenti metódus dobjon kivételeket az alábbi esetekben: Amennyiben nincs a beszedés adatainak megfelelő (szolgáltató-ügyféllegalább ekkora összeg) engedély az ügyféltől, akkor dobjon egy BeszedesNemEngedelyezettKivetelt, amely tartalmazza a problémát okozó beszedés objektumot Abban az esetben, ha talált megfelelő engedélyt, de az ügyfélnek nincs számlája, vagy egyik számláján sincs elegendő fedezet, dobjon egy BeszedesNemTeljesithetoKivetelt, ami a beszedés objektum mellett tartalmazza a pontos okot is (nincs számla, nincs egyenleg)

47 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

48 Programozási tételek rekurzív formája Feladat 4.1 Valósítsuk meg rekurzívan (ciklus használata nélkül) az alábbi feladatokat: Programozási tételek Mennyi egy N elemű A tömb elemeinek az összege? int Osszegzes(int[ ] A, int N) Egy N elemű A tömbben van-e 15-el osztható szám? bool Eldontes(int[ ] A, int N) Egy N elemű A tömbben hol van a(z egyik) maximális érték? int MaximumKivalasztas(int[ ] A, int N) Logaritmikus keresés Valósítsuk meg a keresés rekurzív változatát az alábbi paraméterekkel: A az elemeket tartalmazó tömb keresett a keresett elem értéke alsoindex a még vizsgálandó terület első elemének indexe felsoindex a még vizsgálandó terület utolsó elemének indexe int LogaritmikusKereses(int[ ] A, int keresett, int alsoindex, int felsoindex) 48

49 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

50 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

51 Visszalépéses keresés (1) Feladat 4.2 Készítsünk egy visszalépéses keresésen alapuló Sudoku megoldó programot, amely a tábla üres helyeit kitölti az alábbi szabályok szerint: Minden üres helyre egy szám írható 1..9 között Egy sorban, illetve egy oszlopban nem szerepelhet kétszer ugyanaz a szám A teljes tábla 3x3-as blokkokra oszlik, egy blokkon belül nem szerepelhet kétszer ugyanaz a szám (a tábla mérete 9x9 tehát összesen 9 blokkot tartalmaz) Visszalépéses keresés használatához javasolt átalakítások Kétdimenziós tábla adatainak átalakítása részfeladatok sorozatává Fixen megadott számok és a kitöltendő üres helyek szétválogatása Fix mezők: Üres mezők: (0,0) (0,2) (0,3) (1,0) (0,1) (0,4) (1,2) (1,3) 51

52 Visszalépéses keresés (2) Megvalósítandó függvények ft(szint, szám) függvény Visszatérési értéke igaz, ha az előre fixen beírt számok egyike sem zárja ki, hogy a szintedik részeredményhez tartozó mezőbe beírjuk a szám értéket bool ft(int szint, int szam) fk(szint, szám, k, kszám) függvény Visszatérési igaz, ha a k. részeredményként választott kszám érték nem zárja ki, hogy a szintedik részeredményhez tartozó mezőbe beírjuk a szám értéket fk(int szint, int szam, int k, int kszam) BackTrack(szint, címszerint VAN, E) Az előadáson megismert visszalépéses keresés algoritmus implementációja void BackTrack(int szint, ref bool VAN, int[ ] E) Rekurziót indító metódus A fenti metódusok célszerűen nem publikusak, ezért készítsünk egy egyszerű, az algoritmus működésének (és bemenő paramétereinek) ismeretét nem feltételező indító metódust public bool MegoldasKereses() 52

53 Visszalépéses keresés (3) Már megvalósított segéd metódusok A Pozicio osztály lenti metódusa segítségével egyszerűen eldönthető, hogy a paraméterként átadott két mező kizáró kapcsolatban áll-e egymással (nem tartalmazhatják ugyanazt a számot). Visszatérési értéke csak akkor igaz, ha a két mező egy sorban, egy oszlopban vagy egy blokkban van: static int Kizaroak(Pozicio p1, Pozicio p2) A Sudoku osztály alábbi metódusai elvégzik a tábla szétbontását fix és kitöltendő mezők listájára, illetve az eredmény betöltését az eredeti táblába: void MezoSzetvalogatas( ) void MezoOsszefuzesMegoldassal(int[ ] E) A Program osztály rendelkezik egy statikus metódussal, amely segítségével ki lehet listázni egy tábla tartalmát a képernyőre: static void TablaKirajzolas(int[, ] tabla) A Program osztály rendelkezik egyéb statikus metódusokkal, amelyek visszaadnak egy-egy Sudoku feladvány táblát (a 0. mintatábla csak tesztelési célokat szolgál, ugyanis nem a játék szabályainak megfelelő méretű): static int[, ] MintaTablaFeltoltes_?( ) 53

54 Rekurzió házi feladat Házi Feladat 4.1 Valósítsuk meg az alábbi programozási tételeket rekurzív formában: Sorozatszámítás tétel Eldöntés tétel Kiválasztás tétel Keresés tétel Megszámlálás tétel Maximumkiválasztás tétel Házi Feladat 4.2 Különböző tárgyakat (Tárgy objektumok az alábbi tulajdonságokkal: Súly, Méret, Hasznosság) szeretnénk elhelyezni egy véges méretű hátizsákban (mérete: ZsákMéret). A magunkkal cipelni kívánt tárgyakat egy tömbben tároljuk el. Készítsünk egy visszalépéses keresésen alapuló algoritmust, ami választ ad az alábbi kérdésekre: Hányféle elhelyezésre van lehetőségünk? Hogyan tudjuk a lehető legtöbb tárgyat elhelyezni a zsákban? Hogyan tudjuk a lehető leghasznosabb tárgyakkal telepakolni a zsákot? Hogyan tudjuk a lehető legnagyobbnak tűnő, de mégis legkönnyebb zsákot összeállítani? 54

55 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

56 Eseménykezelés interfészekkel Feladat Készítsük el a felsorolt osztályokat és interfészeket IHívásFigyelő interfész az alábbi követelményekkel BejövőhívásTörtént(Telefon küldő, String forrás_telefonszám) KimenőhívásTörtént(Telefon küldő, String cél_telefonszám) Telefon oszály Legyen egy telefonszám nevű mezője, amit a konstruktorban lehet beállítani Legyen egy egyenleg nevű mezője, amit az EgyenlegFeltöltés(int összeg) metódus hívásával lehet növelni Legyen egy hívásfigyelő nevű, IHívásFigyelő típusú mezője, ami a regisztrált eseménykezelőt tárolja. Egy FigyelőRegisztrál(IHívásFigyelő figyelő) metódussal tudjon egy objektum regisztrálni az eseményekre Legyen egy HívásFogadás(Telefon forrás) metódusa, amely meghívja az eseménykezelő objektum (ha az létezik) BejövőHívásTörtént metódusát Legyen egy HívásKezdeményezés(Telefon cél) metódus, amely meghívja az eseménykezelő KimenőHívásTörtént metódusát, és ha az egyenleg engedi, meghívja a cél HívásFogadás metódusát, majd csökkenti az egyenleget 56

57 Eseménykezelő megvalósítása HívásNapló oszály Valósítsa meg az IHívásFigyelő interfészt Mindkét szükséges metódus írja ki a képernyőre a paraméterként kapott adatokat A fenti osztályok és interfészek implementálását követően hozzon létre minta objektumokat, majd próbálja ki a fenti funkciók működését Hozzon létre legalább két Telefon objektumot Hozzon létre egy HívásNapló objektumot Regisztrálja a HívásNaplót a két telefonnál eseménykezelőként Töltse fel valamelyik Telefon egyenlegét Indítson néhány hívást a telefonokról 57

58 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

59 A képviselő ( delegate ) A képviselő segítségével egy osztályhoz külső osztályok kapcsolódhatnak Más néven delegált vagy metódusreferencia Tetszőleges osztály kapcsolódhat a képviselőn keresztül egy másik osztályhoz, ennek feltétele az előírt formátum betartása Ez a formátum az üzenetváltáshoz hívandó metódus szignatúrája A képviselő segítségével egy osztály metódusai külső osztályok metódusait ismeretlenül is meg tudják hívni Üzenetküldési lehetőség külső osztályok részére Visszahívási, értesítési funkció A képviselők a delegate kulcsszó segítségével saját névvel és az általuk képviselendő metódusok szignatúrájával deklarálhatók public delegate void EventHandler(object sender, EventArgs e); Neve: EventHandler Visszatérési érték típusa: void Paraméterek típusai: object és EventArgs 59

60 Metódushívás képviselőkön keresztül Egyszerű metódushívás lépései Példányosítani kell a képviselő osztályt, ehhez a konstruktorának át kell adni a későbbiekben hívandó metódust (megfelelő szignatúrával) Ezt követően a létrejött képviselő objektumon keresztül meg lehet hívni az előzőleg a konstruktornak átadott metódust delegate double Közvetítő(double szám); static class Műveletek { public static double Kétszerezés(double szám) { return szám + szám; class Program { static void Main() { Közvetítő teszt = new Közvetítő(Műveletek.Kétszerezés); System.Console.WriteLine(teszt(5)); 60

61 Több metódus felfűzése (multicast) Egy képviselő egyszerre több metódust is tartalmazhat A += operátor segítségével lehet hozzáadni új metódust A -= operátor segítségével lehet elvenni egy metódust delegate void SzövegFeldolgozó(string szöveg); static class Műveletek { public static void KiírNagy(string s) { System.Console.WriteLine(s.ToUpper()); public static void KiírKicsi(string s) { System.Console.WriteLine(s.ToLower()); class Program { static void Main() { SzövegFeldolgozó teszt = new SzövegFeldolgozó (Műveletek.KiírNagy); teszt += new SzövegFeldolgozó (Műveletek.KiírKicsi); teszt( Teszt Üzenet ); 61

62 Néhány tipikus használati eset Képviselő változóként Az adatokhoz hasonlóan eltárolhat valamilyen funkciót Bármikor meghívható Bármikor megváltoztatható Tömb esetén funkciók egy teljes listáját tárolhatja Képviselő paraméterként Paraméterként várhat valamilyen funkciót Rendezés esetén a rendezési szempontot (< operátor megvalósítása) Visszahívási lehetőség (a függvény kap egy funkciót és azt hívja meg bizonyos feltételek teljesülése esetén) Képviselő visszatérési értékként Visszatérési értékként visszaadhat valamilyen funkciót A hívónak nem is kell ismernie a rendelkezésre álló funkciót körét, a paraméterek alapján a metódus dönthet, hogy melyiket célszerű használni Eseménykezelés megvalósítására 62

63 Az esemény ( event ) Az esemény egy kifejezetten értesítési célú nyelvi elem Valójában egy korlátozott, biztonságosabbá tett képviselő Az eseménykezelés általános menete Szükséges képviselő típusok létrehozása Az osztály közzéteszi az eseményeit Az esemény iránt érdeklődő osztályok saját metódusaik átadásával feliratkoznak az eseményre Értelemszerűen csak megfelelő szignatúrájú metódussal Feliratkozás a +=, leiratkozás a -= operátorral történik Amikor a közzétevő osztályban kiváltódik az esemény, a képviselők segítségével értesíti a feliratkozott osztályokat Esemény közzététele Az események speciális mezők, amelyeket az event kulcsszó jelöl, rendelkeznek saját névvel, illetve egy képviselő által megadott típussal public event EventHandler Esemény; 63

64 Eseménykezelés mintaprogram public delegate void SzamValtozott(int szamertek); class Szamolo { public event SzamValtozott figyelo; int szam; public int Szam { set { szam = value; if (figyelo!= null) figyelo(szam); class Program { static void Figyelo(int szam) { Console.WriteLine("Változás:" + szam); static void Main(string[ ] args) { Szamolo teszt = new Szamolo( ); teszt.figyelo += Figyelo; teszt.szam = 10; 64

65 Eseménykezelés képviselőkkel Feladat Készítsük el az alábbi osztályokat és képviselőket Készítsünk képviselőket az alábbi események fogadásához BejövőHívásTörtént(Telefon küldő, String forrás_telefonszám) KimenőHívásTörtént(Telefon küldő, String cél_telefonszám) Telefon oszály Legyen egy telefonszám nevű mezője, amit a konstruktorban lehet beállítani Legyen egy egyenleg nevű mezője, amit az EgyenlegFeltöltés(int összeg) metódus hívásával lehet növelni Legyen egy BejövőHívásFigyelő nevű, BejövőHívásTörtént típusú eseménye Legyen egy KimenőHívásFigyelő nevű, KimenőHívásTörtént típusú eseménye Legyen egy HívásFogadás(Telefon forrás) metódusa, amely meghívja a BejövőHívásFigyelő eseményre feliratkozott metódus(oka)t (ha léteznek) Legyen egy HívásKezdeményezés(Telefon cél) metódusa, amely meghívja a KimenőHívásFigyelő eseményre feliratkozott metódus(oka)t, és ha az egyenleg engedi, meghívja a cél HívásFogadás metódusát, majd csökkenti az egyenleget 65

66 Eseménykezelő megvalósítása HívásNapló oszály Legyen egy statikus KimenőHívásTörtént metódusa, amely paraméterként egy Telefont és egy telefonszámot vár, majd írja ki a képernyőre a kapott adatokat Legyen egy statikus BejövőHívásTörtént metódusa, amely paraméterként egy Telefont és egy telefonszámot vár, majd írja ki a képernyőre a kapott adatokat A fenti osztályok implementálását követően hozzon létre minta objektumokat, majd próbálja ki a fenti funkciók működését Hozzon létre legalább két Telefon objektumot Hozzon létre egy HívásNapló objektumot Regisztrálja a HívásNaplót a két telefonnál eseménykezelőként mindkét eseményre Töltse fel valamelyik Telefon egyenlegét Indítson néhány hívást a telefonokról 66

67 Egyenleget figyelő esemény IEgyenleggelRendelekezik interfész Készítsen egy ilyen nevű interfészt, amely egy metódus megvalósítását írja elő: EgyenlegFeltöltés(int összeg) A már meglévő Telefon osztály valósítsa meg ezt az interfészt Készítsünk képviselőt az alábbi események fogadásához EgyenlegAlacsony(IEgyenleggelRendelkezik küldő, int szükséges) Telefon osztály kiegészítése Legyen egy új EgyenlegAlacsonyFigyelő nevű, EgyenlegAlacsony típusú eseménye Amennyiben a hívás kezdeményezésnél az egyenleg 5 egység alá csökkenne, akkor a fenti eseményen keresztül hívja meg az arra feliratkozott metódusokat, paraméterként átadva önmagát, illetve a minimális 5 egységhez szükséges összeget Ezt célszerű még a híváshoz szükség egyenleg ellenőrzése előtt megtenni, mivel egy azonnali feltöltéssel a hívást végre lehet hajtani 67

68 Automata egyenlegfeltöltő megvalósítása EgyenlegAutomataFeltöltő osztály Legyen egy saját egyenleg mezője, ami a konstruktorban kap kezdőértéket Valósítsa meg az EgyenlegFeltöltés interfészt Ennek az osztálynak is legyen egy EgyenlegAlacsonyFigyelő nevű, EgyenlegAlacsony típusú eseménye (mivel az automata pénze is elfogyhat) Legyen egy TelefonAutomatikusFeltöltés metódusa, aminek szignatúrája megfelel az EgyenlegAlacsony képviselő által meghatározottnak: Meghívása esetén, amennyivel a paraméterként kapott szükséges összeg rendelkezésre áll, akkor automatikusan hívja meg a paraméterként kapott telefon EgyenlegFelöltés metódusát a kért összeggel Amennyiben az összeg nem áll rendelkezésre, hívja meg a saját EgyenlegAlacsonyFigyelő eseményén keresztül az ott figyelő metódusokat, paraméterként átadva önmagát, illetve 100 egységet. Ezt követően próbálja feltölteni a telefont. Új osztályok és események kipróbálása Hozzunk létre egy új EgyenlegAutomataFeltöltő objektumot és kössük a telefonokhoz, majd indítsunk a telefonokról hívásokat Hozzunk létre egy új KártyaVásárlás statikus metódust, ami figyeli az automata feltöltő EgyenlegAlacsony eseményét és szükség esetén feltölti azt 68

69 Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok Interfészek Interfész a C# nyelvben Interfész feladatok Kivételkezelés Saját kivételek készítése Rekurzió Egyszerű rekurzív feladatok Visszalépéses keresés Eseménykezelés Eseménykezelés interfészekkel Eseménykezelés delegáltakkal Generikus típusok

70

71

72 Képek forrásai Fun%20%7C%20Coloring%20pages:%20Butter%20&kleurplaten=

Programozás II. labor

Programozás II. labor Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés

Részletesebben

Programozás II gyakorló feladatok

Programozás II gyakorló feladatok Programozás II gyakorló feladatok Feladat Programozási tételek összeépítése 1. Programozási tételek összeépítése Feladat - mintaadatok Állatkertünkben háromféle állat tárolunk különböző méretű ketrecekben

Részletesebben

Objektumorientált programozás XI. OOP gyakorlás

Objektumorientált programozás XI. OOP gyakorlás Objektumorientált programozás XI. OOP gyakorlás ÓE-NIK, 2011 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

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

Programozás II. labor

Programozás II. labor Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés

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

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

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Programozás I. 3. előadás Tömbök a C#-ban Metódusok C#-ban Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Szoftvertechnológia

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18 C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi

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

Bánsághi Anna anna.bansaghi@mamikon.net

Bánsághi Anna anna.bansaghi@mamikon.net ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 1. ELŐADÁS - C# ÁTTEKINTÉS - 1 2015 Bánsághi Anna 1 of 84 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 84

Részletesebben

PHP5 Új generáció (2. rész)

PHP5 Új generáció (2. rész) PHP5 Új generáció (2. rész)...avagy hogyan használjuk okosan az osztályokat és objektumokat PHP 5-ben. Cikksorozatom elõzõ részében képet kaphattunk arról, hogy valójában mik is azok az objektumok, milyen

Részletesebben

C# osztályok. Krizsán Zoltán

C# osztályok. Krizsán Zoltán C# osztályok Krizsán Zoltán Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net

Bánsághi Anna anna.bansaghi@mamikon.net ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64

Részletesebben

Alkalmazott modul: Programozás

Alkalmazott modul: Programozás Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Feladatgyűjtemény Összeállította: Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Frissítve: 2015.

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

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

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

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás. Emlékeztető: a fordítás lépései Forrás-kezelő (source handler) Szimbólumtábla-kezelés Fordítóprogramok előadás (A, C, T szakirány) Lexikális elemző (scanner) Szintaktikus elemző (parser) Szemantikus elemző

Részletesebben

C#, OOP. Osztályok tervezése C#-ban

C#, OOP. Osztályok tervezése C#-ban C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat

Részletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 1. Előadás Bemutatkozás Előadó: Dr. Bécsi Tamás St.106, (1)463-1044, becsi.tamas@mail.bme.hu Közlekedés-, és Járműirányítási Tanszék www.kjit.bme.hu Programozás

Részletesebben

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606 Dr. Bécsi Tamás Bemutatkozás Előadó: Dr. Bécsi Tamás St.106, (1)463-1044, becsi.tamas@mail.bme.hu Közlekedés-, és Járműirányítási

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

3. Gyakorlat Ismerkedés a Java nyelvvel

3. Gyakorlat Ismerkedés a Java nyelvvel 3. Gyakorlat Ismerkedés a Java nyelvvel Parancssori argumentumok Minden Java programnak adhatunk indításkor paraméterek, ezeket a program egy tömbben tárolja. public static void main( String[] args ) Az

Részletesebben

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

A C++ öröklés. (Előfeltétel: 12. tétel ismerete) Az öröklés fogalma: A C++ öröklés (Előfeltétel: 12. tétel ismerete) olyan alapvető programozási technika, amely lehetővé teszi, hogy a már meglévő osztályainkból újakat tudunk származtatni, valamint az

Részletesebben

Objektum Orientált Szoftverfejlesztés (jegyzet)

Objektum Orientált Szoftverfejlesztés (jegyzet) Objektum Orientált Szoftverfejlesztés (jegyzet) 1. Kialakulás Kísérletek a szoftverkrízisből való kilábalásra: 1.1 Strukturált programozás Ötlet (E. W. Dijkstra): 1. Elkészítendő programot elgondolhatjuk

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

Objektumorientált programozás C# nyelven III.

Objektumorientált programozás C# nyelven III. Objektumorientált programozás C# nyelven III. Kivételkezelés Tulajdonságok Feladatok Készítette: Miklós Árpád Dr. Kotsis Domokos Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és

Részletesebben

117. AA Megoldó Alfréd AA 117.

117. AA Megoldó Alfréd AA 117. Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Objektum-orientált szemlélet - Egységbe zárás (incapsulation) - Információ elrejtés - Öröklődés altípusosság dinamikus kötés Öröklődés Programozási nyelvek Java - kiterjesztem, kibővítem, megváltoztatom

Részletesebben

Szervlet-JSP együttműködés

Szervlet-JSP együttműködés Java programozási nyelv 2007-2008/ősz 10. óra Szervlet-JSP együttműködés Kérés továbbítás technikái legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu Szervlet-JSP együttműködés Témakörök Osztálykönyvtár

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

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. Programozás III CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van a fejlesztő környezet és az osztálykönyvtárak is: rt.jar fájl

Részletesebben

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

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

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string Resource Objects Adatforrás elemeket hivatkozás (referencia, mutató) segítségével használhatunk, ezek karakterláncok (stringek), képek, azonosítók vagy akár fájlok is lehetnek A mappastruktúra egységesen

Részletesebben

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek

Részletesebben

C# gyorstalpaló. Készítette: Major Péter

C# gyorstalpaló. Készítette: Major Péter C# gyorstalpaló Készítette: Major Péter Adattípusok Logikai változó Egész szám (*: előjel nélküli) Lebegőponto s szám Típus Típusnév másképpen (egyenértékű) Helyigény (bit) Példa bool Boolean 8 (!) true,

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek középszint 1021 ÉRETTSÉGI VIZSGA 2011. május 13. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ NEMZETI ERŐFORRÁS MINISZTÉRIUM

Részletesebben

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal. Objektumorientált programozás Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal. Ez a nem művészi értékű, de idillikus kép azt a pillanatot mutatja,

Részletesebben

Széchenyi István Szakképző Iskola

Széchenyi István Szakképző Iskola A SZAKKÖZÉPISKOLAI SZAKMACSOPORTOS ALAPOZÓ OKTATÁS ISKOLAI PROGRAMJA 9 12. évfolyam Érvényes a 2003-2004-es tanévtől felmenő rendszerben Átdolgozva, utolsó módosítás: 2004. április 26. A szakmacsoportos

Részletesebben

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 11. előadás 2014.05.12. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Adatszerkezetek

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

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

Előzmények 2011.10.23.

Előzmények 2011.10.23. Előzmények Dr. Mileff Péter A 80-as évek közepétől a szoftverek komplexitása egyre növekszik. Megjelentek az OO nyelvek. Az OO fejlesztési módszerek a rendszer különböző nézőpontú modelljeit készítik el.

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

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék Bevezetés a C++ programozási nyelvbe Oktatási segédlet Összeállította: Ficsor Lajos 2001. 1. A C++ programozási nyelv története A C++ programozási nyelv

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

Elıírt lépésszámú ciklusok

Elıírt lépésszámú ciklusok Programozás tankönyv VI. Fejezet Elıírt lépésszámú ciklusok Ismétlés a tudás anyja. Hernyák Zoltán 61/312 Az eddig megírt programok szekvenciális mőködésőek voltak. A program végrehajtása elkezdıdött a

Részletesebben

Magas szintű programozási nyelvek 2 Előadás jegyzet

Magas szintű programozási nyelvek 2 Előadás jegyzet Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás

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

15. Programok fordítása és végrehajtása

15. Programok fordítása és végrehajtása 15. Programok fordítása és végrehajtása Programok fordítása és végrehajtása. (Fordítás és interpretálás, bytecode. Előfordító, fordító, szerkesztő. A make. Fordítási egység, könyvtárak. Szintaktikus és

Részletesebben

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal 2.0 2014.03.19 A teljes dokumentáció átírásra került 2.1 2014.07.14 8.

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal 2.0 2014.03.19 A teljes dokumentáció átírásra került 2.1 2014.07.14 8. ESZKÖZIGÉNY Felhasználói dokumentáció verzió 2.2. Budapest, 2015. Változáskezelés Verzió Dátum Változás Pont Cím Oldal 2.0 2014.03.19 A teljes dokumentáció átírásra került 2.1 2014.07.14 8.3 Új, oszlopszerkesztésbe

Részletesebben

ADATBÁZISKEZELÉS ADATBÁZIS

ADATBÁZISKEZELÉS ADATBÁZIS ADATBÁZISKEZELÉS 1 ADATBÁZIS Az adatbázis adott (meghatározott) témakörre vagy célra vonatkozó adatok gyűjteménye. - Pl. A megrendelések nyomon követése kereskedelemben. Könyvek nyilvántartása egy könyvtárban.

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek emelt szint 1021 ÉRETTSÉGI VIZSGA 2011. május 13. INFORMATIKAI ALAPISMERETEK EMELT SZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ NEMZETI ERŐFORRÁS MINISZTÉRIUM

Részletesebben

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI) Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 8. előadás (ASP.NET WebAPI) 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto A webszolgáltatás

Részletesebben

On-line értékelési módszerek II. Lengyelné Molnár Tünde

On-line értékelési módszerek II. Lengyelné Molnár Tünde On-line értékelési módszerek II. Lengyelné Molnár Tünde MÉDIAINFORMATIKAI KIADVÁNYOK On-line értékelési módszerek II. Lengyelné Molnár Tünde Eger, 2013 Korszerű információtechnológiai szakok magyarországi

Részletesebben

8. Mohó algoritmusok. 8.1. Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

8. Mohó algoritmusok. 8.1. Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete 8. Mohó algoritmusok Optimalizálási probléma megoldására szolgáló algoritmus gyakran olyan lépések sorozatából áll, ahol minden lépésben adott halmazból választhatunk. Sok optimalizálási probléma esetén

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

OOP: Java 8.Gy: Gyakorlás

OOP: Java 8.Gy: Gyakorlás OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét

Részletesebben

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere 2012. április 10. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? alaki szabályok használata - mintapélda használata - mintapélda

Részletesebben

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat: Karbantartás Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat: Jelszó módosítása: A felhasználói jelszavunkat módosíthatjuk ebben a menüpontban, a régi jelszavunk megadása után. Általánosan

Részletesebben

hatására hátra lép x egységgel a toll

hatására hátra lép x egységgel a toll Ciklusszervező utasítások minden programozási nyelvben léteznek, így például a LOGO-ban is. LOGO nyelven, (vagy legalábbis LOGO-szerű nyelven) írt programok gyakran szerepelnek az iskola számítástechnikai

Részletesebben

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

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

Borkereskedő. Dokumentáció a Programozási módszertan elmélete című tárgy beadandó programjához. Magyar Attila mattila@inf.elte.hu 2002.11.26.

Borkereskedő. Dokumentáció a Programozási módszertan elmélete című tárgy beadandó programjához. Magyar Attila mattila@inf.elte.hu 2002.11.26. Borkereskedő Dokumentáció a Programozási módszertan elmélete című tárgy beadandó programjához Magyar Attila mattila@inf.elte.hu 2002.11.26. 2 Tartalomjegyzék: Beadandó feladat 3 Borkereskedő 3 Állandók

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

1. feladat. Keresse meg, hogy kik teljesítették a legtöbb kreditet, kiknek a legrosszabb az átlaguk, kik a legfiatalabbak, stb.

1. feladat. Keresse meg, hogy kik teljesítették a legtöbb kreditet, kiknek a legrosszabb az átlaguk, kik a legfiatalabbak, stb. TUDNIVALÓK: Lévén, hogy nagyon kevés időnk van a konzultációkon, a feladatok zöme HÁZI FELADAT! Ezek megoldása fontos a tárgy sikeres teljesítéséhez! (Nyilván minden feladatsorban vannak hasonló jellegű

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

a számlavezetett Hitelintézetek részére, külföldi konvertibilis pénznemben nyilvántartott, kamatozó pénzforgalmi és lekötött számla vezetéséhez

a számlavezetett Hitelintézetek részére, külföldi konvertibilis pénznemben nyilvántartott, kamatozó pénzforgalmi és lekötött számla vezetéséhez C (TKSZ-DEV) ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEK a számlavezetett Hitelintézetek részére, külföldi konvertibilis pénznemben nyilvántartott, kamatozó pénzforgalmi és lekötött számla vezetéséhez A Magyar Takarékszövetkezeti

Részletesebben

ORPHEUS. Felhasználói kézikönyv. C o p y r i g h t : V a r g a B a l á z s 2 0 1 2 Oldal: 1

ORPHEUS. Felhasználói kézikönyv. C o p y r i g h t : V a r g a B a l á z s 2 0 1 2 Oldal: 1 ORPHEUS Felhasználói kézikönyv C o p y r i g h t : V a r g a B a l á z s 2 0 1 2 Oldal: 1 Tartalomjegyzék Rendszerkövetelmények... 5 Telepítés... 6 A program célja... 10 A program indítása... 10 Rendszeradminisztráció...

Részletesebben

Programozás C++ -ban 2007/4

Programozás C++ -ban 2007/4 Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos

Részletesebben

Bevezetés a programozásba 2

Bevezetés a programozásba 2 Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i

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

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

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

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

Bánsághi Anna anna.bansaghi@mamikon.net. 1 of 67 SZOFTVERTECHNOLÓGIA Bánsághi Anna anna.bansaghi@mamikon.net 5. ELŐADÁS - RENDSZERTERVEZÉS 1 1 of 67 TEMATIKA I. SZOFTVERTECHNOLÓGIA ALTERÜLETEI II. KÖVETELMÉNY MENEDZSMENT III. RENDSZERMODELLEK IV. RENDSZERARCHITEKTÚRÁK

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

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek) Láncolt lista Bináris keresőfa Gráf Hasító táblázat Programozás II. labor 2. rész (Adatszerkezetek) Programozás II. Láncolt lista Generikus típusok Láncolt lista megvalósítása Bináris keresőfa Bejáró tervezési

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 2. előadás Szintaktikai alapok Alapvető típusok, ismétlés C# típus.net típus Méret (byte) Leírás byte System.Byte 1Előjel nélküli 8 bites egész szám (0..255) char

Részletesebben

- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára.

- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára. Fák Fa definíciója Fa(Tree): csomópontok(nodes) halmaza, amelyeket élek(edges) kötnek össze, és teljesülnek az alábbi feltételek: - létezik egy kitűntetett csomópont: a gyökér (root) - a gyökértől különböző

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

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

Részletesebben

Bevezetés a C++ programozásba

Bevezetés a C++ programozásba Bevezetés a C++ programozásba A program fogalma: A program nem más, mint számítógép által végrehajtható utasítások sorozata. A számítógépes programokat különféle programnyelveken írhatjuk. Ilyen nyelvek

Részletesebben

Év zárása és nyitása 2015-ről 2016-ra

Év zárása és nyitása 2015-ről 2016-ra Év zárása és nyitása 2015-ről 2016-ra Ebben az évben a megszokottól eltérően, új programot kell telepíteni. Ennek lépései: 1. lépjen ki a DszámlaWIN programból (FONTOS!). Amennyiben hálózatban használják

Részletesebben

Adatbázisok* tulajdonságai

Adatbázisok* tulajdonságai Gazdasági folyamatok térbeli elemzése 4. előadás 2010. 10. 05. Adatbázisok* tulajdonságai Rendezett, logikailag összefüggő és meghatározott szempont szerint tárolt adatok és/vagy információk halmaza Az

Részletesebben

KÖZÉPSZINTŰ GYAKORLATI VIZSGA

KÖZÉPSZINTŰ GYAKORLATI VIZSGA ÉRETTSÉGI VIZSGA 2015. május 15. INFORMATIKA KÖZÉPSZINTŰ GYAKORLATI VIZSGA 2015. május 15. 8:00 A gyakorlati vizsga időtartama: 180 perc Beadott dokumentumok Piszkozati pótlapok száma Beadott fájlok száma

Részletesebben

Kalapácsvetés 2016 szöveges

Kalapácsvetés 2016 szöveges Kalapácsvetés 2016 Ebben a feladatban a 2016. évi nyári olimpiai játékokon az atlétika férfi kalapácsvetés döntőjének eredményeit kell feldolgoznia. A döntő 6 dobási sorozatból állt, de a 3. sorozat után

Részletesebben

Gyakorló feladatok ZH-ra

Gyakorló feladatok ZH-ra Algoritmuselmélet Schlotter Ildi 2011. április 6. ildi@cs.bme.hu Gyakorló feladatok ZH-ra Nagyságrendek 1. Egy algoritmusról tudjuk, hogy a lépésszáma O(n 2 ). Lehetséges-e, hogy (a) minden páros n-re

Részletesebben

BMX-W ver. 1.0 Kezelői útmutató

BMX-W ver. 1.0 Kezelői útmutató BMX-W ver. 1.0 Kezelői útmutató ÁLTALÁNOS A BMX-W betongyártást vezérlő program legfőbb jellemzője, hogy a Kezelő egy technológia ábrán jelzett betongyári elrendezést lát a képernyőn, és a szükséges paraméterezéseknél

Részletesebben

Készítette: niethammer@freemail.hu

Készítette: niethammer@freemail.hu VLogo VRML generáló program Készítette: Niethammer Zoltán niethammer@freemail.hu 2008 Bevezetés A VLogo az általános iskolákban használt Comenius Logo logikájára épülő programozási nyelv. A végeredmény

Részletesebben

Kötegelt nyomtatványok kezelése a java-s nyomtatványkitöltő programban (pl.: 1044 kötegelt nyomtatvány - HIPA; 10ELEKAFA - Elekáfa)

Kötegelt nyomtatványok kezelése a java-s nyomtatványkitöltő programban (pl.: 1044 kötegelt nyomtatvány - HIPA; 10ELEKAFA - Elekáfa) Kötegelt nyomtatványok kezelése a java-s nyomtatványkitöltő programban (pl.: 1044 kötegelt nyomtatvány - HIPA; 10ELEKAFA - Elekáfa) Kötegelt nyomtatványok általános jellemzői Minden nyomtatványköteg áll

Részletesebben

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19 PHP II. WEB technológiák Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19 Tartalomjegyzék Objektum Orientált Programozás 1 Objektum Orientált Programozás Öröklődés 2 Fájlkezelés

Részletesebben

6. AZ EREDMÉNYEK ÉRTELMEZÉSE

6. AZ EREDMÉNYEK ÉRTELMEZÉSE 6. AZ EREDMÉNYEK ÉRTELMEZÉSE A kurzus anyagát felhasználva összeállíthatunk egy kitűnő feladatlapot, de még nem dőlhetünk nyugodtan hátra. Diákjaink teljesítményét még osztályzatokra kell átváltanunk,

Részletesebben

SupOrt. talpfelvétel készítő program felhasználói leírás v3.1

SupOrt. talpfelvétel készítő program felhasználói leírás v3.1 SupOrt talpfelvétel készítő program felhasználói leírás v3.1 L&M Product Service Kft. 1074 Budapest, Csengery u. 28. Tel: (+36-1)-413-2184 e-mail: lundmkft@gmail.com Tartalomjegyzék: Tartalomjegyzék:...

Részletesebben