Minden állat ToString() metódusa így nézzen ki: rajtszám. kutya/macska neve, pontszáma.



Hasonló dokumentumok
Objektumorientált programozás C# nyelven

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

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

BME MOGI Gépészeti informatika 8.

C++ programozási nyelv

Öröklés és Polimorfizmus

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

Bevezetés a Python programozási nyelvbe

Elemi Alkalmazások Fejlesztése II.

C++ programozási nyelv

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

BME MOGI Gépészeti informatika 6.

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Dokumentáció. 1. Beadandó feladat

Programozás II gyakorlat. 6. Polimorfizmus

Gyakorlati vizsgatevékenység A

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

C++ programozási nyelv Konstruktorok-destruktorok

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.

JAVA PROGRAMOZÁS 2.ELŐADÁS

A fizetendő összegből a 35 év fölötti tulajdonos 20 % kedvezményt kap.

A következő táblázat tartalmazza az egyes fajták jellemzőit.

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

Programozás módszertan p.1/46

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

Objektumorientált programozás C# nyelven

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

Kompetencia Alapú Levelező Matematika Verseny

Már megismert fogalmak áttekintése

RESIDENT EVIL CODENAME: NIK

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

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

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Osztályok. 4. gyakorlat

OOP. Alapelvek Elek Tibor

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

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

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

Tájékoztató. Használható segédeszköz: -

Alkalmazott modul: Programozás

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

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

Programozási technológia I. 1. beadandó feladatsor

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

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

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

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Swedish store (C#) Óbudai Egyetem, Programozás 2 Mérnök Informatikus szak, BSc Labor. Bedők Dávid v0.1

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

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

Java gyakorlat feladatai e s megolda sai ( )

INFORMATIKAI ALAPISMERETEK

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.

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

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

Objektumorientált szoftverfejlesztés alapjai

Programozási nyelvek Java

Blokkolási paraméter ablak leírása. 1/5 CLIP-ERP HUNGARY INFORMÁCIÓS LEVELE 2017/63. SZÁM OKTÓBER. A szerkesztő gondolatai

OOP és UML Áttekintés

Java programozási nyelv 6. rész Java a gyakorlatban

III. OOP (objektumok, osztályok)

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

C++ programozási nyelv

Objektumorientált programozás C# nyelven

1. Egy 30 cm sugarú körszelet körívének hossza 120 cm. Mekkora a körív középponti szöge?

Vizuális programozás Komplex számok

Interfészek. PPT 2007/2008 tavasz.

Nevelési év indítása óvodák esetén

Programozási feladatok Tartalom

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

Programozás C++ -ban 2007/7

KOMPETENCIA ALAPÚ LEVELEZŐ MATEMATIKA VERSENY

ELTE SAP Excellence Center Oktatóanyag 1

Programozási nyelvek Java

MATEMATIKA ÉRETTSÉGI május 06. KÖZÉPSZINT I.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

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

OOP #14 (referencia-elv)

KÖZLEKEDÉSI ALAPISMERETEK (KÖZLEKEDÉS-ÜZEMVITEL)

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

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

cím létrehozása

Smart Pointer koncepciója

Programozási alapismeretek 4.

Kenguru 2013 Maljuk, 2. osztály (75 perc)

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?

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

Gyakorló feladatok az 1. nagy zárthelyire

(Solid modeling, Geometric modeling) Testmodell: egy létező vagy elképzelt objektum digitális reprezentációja.

43. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY MEGYEI FORDULÓ HATODIK OSZTÁLY JAVÍTÁSI ÚTMUTATÓ

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

EBBEN A VIZSGARÉSZBEN A VIZSGAFELADAT ARÁNYA

Algoritmizálási feladatok

Átírás:

C# 4. Gyakorlat Öröklés 1. feladat Vészesen közeleg az állatverseny időpontja, és a megrendelő most jött rá, hogy módosítani kellene a programunkat (a megrendelők már csak ilyenek ) Hiába dugjuk az orra alá az eredeti kérését, mégpedig ezt: Az állatmenhely alapítvány március közepén kisállat-versenyt rendez. Mindegyik állat regisztrálásakor meg kell adni az állat nevét és a születési évét. Ezek a verseny során nyilván nem változhatnak. Mindegyikőjüket pontozzák, pontot kapnak a szépségükre és a viselkedésükre is. A pontszám meghatározásakor figyelembe veszik a korukat is (csak év): egy egységesen érvényes maximális kor fölött 0 pontot kapnak, alatta pedig az életkor arányában veszik figyelembe a szépségre és a viselkedésre adott pontokat. Minél fiatalabb, annál inkább a szépsége számít, és minél idősebb, annál inkább a viselkedése. (Ha pl. 10 év a maximális kor, akkor egy 2 éves állat pontszáma: (10-2)*a szépségére adott pontok + 2* a viselkedésére kapott pontok.) ő közli, hogy bocsánat, tévedett, és kéri a módosítást. Kiderült ugyanis, hogy a versenyen kutyák és macskák vesznek részt, nem teljesen egyforma feltételekkel. A regisztrációra és a pontozásra való előírás nagyjából marad, de ezeket a módosításokat kéri: Kutyák esetén a gazdához való viszonyt is pontozzák. Ez hozzáadódik a szépségért és viselkedésért kapott pontokhoz, de ezt a viszony-pontot még a verseny előtt adja a zsűri, és csak akkor vehet részt a kutya a versenyen, ha már túlesett ezen az előfeltételen. Ha nincs viszony-pontja, akkor a végső pontszáma nulla lesz. Mivel kutyák és macskák együtt szerepelnek, ezért csak olyan macskák versenyezhetnek, akiknek van macskaszállító dobozuk. A doboz létét már a regisztráció során be kell jelenteni, de a verseny pillanatáig módosítható. Ha a verseny pillanatában nincs ilyen doboz, akkor az ő végső pontszáma is nulla lesz. Bár a megrendelő csak ennyit mondott, de azért figyelmeztessük rá, hogy így nem lehet egyértelműen azonosítani az állatokat, hiszen miért ne lehetne köztük két azonos nevű. Most állapodjunk meg abban, hogy mindegyikőjük kap egy rajtszámot, mégpedig a regisztrálás sorrendjének megfelelő értéket. Minden állat ToString() metódusa így nézzen ki: rajtszám. kutya/macska neve, pontszáma. 1. Először próbáljuk ki az elkészült osztályokat két konkrét példányra. 2. Utána kapcsolja össze a feladatot az előző órán tanultakkal, azaz regisztráljon valahány állatot (vegyesen kutyákat és macskákat), majd versenyeztesse őket (legegyszerűbb, ha véletlen pontokat ad). A regisztráció után is és a verseny után is írassa ki az adataikat. Az adatokat az allatok.txt fájlból olvassa. (A megoldás több részletét kedd estétől az AllatVerseny2.pdf fájlban olvashatja.) 1

2. feladat Járműpark továbbfejlesztése. A szomszéd vállalkozó is szeretne egy járműparkot adminisztráló programot, de az ő vállalkozása kicsit összetettebb: teherautókat és buszokat ad bérbe, ráadásul elég nagy telephelye van, vagyis elvileg bármikor bővítheti a rendelkezésre álló járműparkot. Mindkét járműfajtának van rendszáma, regisztrációkor mindegyiknél meg kell adni a gyártási évet és a fogyasztást, de a buszoknál a férőhelyek számát is, teherautók esetén pedig a maximálisan szállítható mennyiséget (tonna). Ugyanúgy lehet kiszámolni a buszok és teherautók futott kilométerszámát és egy-egy út költségét, mint ahogy ezt a járművek esetén tárgyaltuk, de ezeket a járműveket bérbe is lehet adni. Minden jármű esetén van egy egységes alap bérleti díj, amelyre buszok esetén is és teherautók esetén is rájön még egy-egy pótdíj: buszoknál a férőhelyek számának és egy, az összes buszra egyformán érvényes szorzónak a szorzata, teherautóknál pedig a maximális teherbírás és egy, a teherautókra egyformán érvényes, de a buszokétól esetleg eltérő szorzónak a szorzata. Ezen kívül minden egyes jármű esetén ki kell fizetni az aktuális út költségének x %-kal növelt értékét. Ez a százalékérték minden jármű esetén egyforma. (Ez a haszonkulcs, vagyis ha pl. 1000 Ft a költség és x=10%- os haszonkulccsal dolgozik a cég, akkor a díjnak ez a része 1100 Ft.) Tesztelje az elkészült osztályokat! (A megoldás menetét kedd estétől a Jarmupark3.pdf fájlban olvashatja.) 3. feladat Különböző henger alakú testek nyilvántartását végző programot szeretnénk írni. Vannak olyan hengerek, amelyek csupán mértani testek. Ezeknek van sugaruk és magasságuk. Vannak rudak, melyeknek tömegük is van (tömör hengerek). Az ilyen alakzatoknak van sűrűségük is. Végül vannak csövek, azaz lyukas rudak Készítsük el a megadott alakzatok osztályait, figyelembe véve az alakzatok közötti hierarchikus kapcsolatot (öröklődést). Minden alakzat legyen képes visszaadni alapadatait, térfogatát és esetleges tömegét. Készítsünk indító osztályt, amelyben létrehozunk egy hengert, egy rudat és két csövet, és a program kiírja az objektumok megfelelő adatait. (A megoldás lépéseit csütörtök estétől a Henger.pdf fájlban olvashatja.) 4. feladat Vannak téglalap alapú hasábok, hengerek és kockák, próbáljuk meg kiszámítani minél kevesebb ismétlődéssel és az öröklődés felhasználásával a térfogatukat, felületüket. Tesztelje a megoldást néhány adattal. Segítség: gondolja végig, mi az, amire minden térfogatszámításnak szüksége van, ez legyen az ősosztályban (ez akár absztrakt osztály is lehet), és gondolja végig azt is, hogy melyik osztály melyikből öröklődhet. 2

5. feladat Egy könyvet jellemez a címe, szerzője, oldalszáma, beszerzési ára, adója és eladási ára. Az adó értékét az egységes ÁFA-kulcs határozza meg, az eladási ár a beszerzési ár áfával növelt értéke. A könyv borítójára (ToString()) a szerzőt, címet, oldalszámot és eladási árat kell feltüntetni. Az idegen nyelvű könyvet szintén jellemzik ezek az adatok, valamint egy, a könyv nehézségére utaló jelző. Ezt a könyvpéldány létrehozásakor egy egész számmal jelezzük, de a könyv borítójára a megfelelő szó kerül majd, és az is, hogy a könyv olvasása hány idegen szó ismeretét igényli (mekkora szókincs kell hozzá). Alapértelmezett adatok lehetnek például ezek: 1-es szint: 400 szó, alapfok; 2-es szint: 1000 szó, középfok, 3-as szint: 1500 szó felsőfok. Hogy serkentsék a nyelvtanulást, a könyv árából elengedik a szókincs ezrelékének megfelelő összeget, de egy minimális árnál olcsóbban semmit sem adnak. a/ Tesztelje az elkészült osztályokat néhány példány létrehozásával és kiíratásával. Próbálja megoldani azt is, hogy módosítani lehessen az idegen nyelvű könyvek nehézségére vonatkozó szó-számot, feliratot. Ha elég ügyes, avval is próbálkozhat, hogy a szintek száma is lehessen eltérő. b/ Olvasson be néhány adatot, ezekből hozzon létre könyv példányokat és számolja ki, hogy mekkora a bevétel, ha eladják az összes könyvet. Azt, hogy az épp aktuális könyv magyar vagy idegen nyelvű, egy véletlen szám alapján döntse el, és persze, ennek megfelelően kérje vagy ne kérje be a könyv szintjét. c/ A mellékelt konyvek.txt adatfájlból (vagy egy Ön által készített hasonló adatfájlból) olvassa be az adatokat, és hozza létre a könyvek listáját, majd számolja ki, mekkora az össz-bevétel, ha eladjuk őket. Melyik(ek) a legdrágább és melyik(ek) a legolcsóbb könyv(ek)? 6. feladat A mai gyerekek már elektronikus meséken nőnek fel (szegények ). Sőt, a mesékhez nem egyszer készül játék szoftver is. Akár az Ön feladata is lehet valamikor később, hogy egy, mondjuk a Csipkerózsika mesét feldolgozó játékszoftvert író csapat munkatársa legyen. Talán emlékszik rá, hogy a mesében vannak tündérek és boszorkány(ok) is. Hogy érdekesebb legyen a játék, ezek a karakterek rendelkezhetnek valamilyen, a játékhoz szükséges tulajdonságokkal. Például lehet varázserejük, ami változhat a játék során. Amikor találkoznak egy emberrel, akkor ennek az erőnek megfelelően valamilyen hatást gyakorolhatnak rájuk a tündérek nyilván jó hatást, a boszorkányok rosszat, stb. Egy ilyen játék persze akkor érdekes, ha a felhasználó grafikus felületen, interaktív módon beleavatkozhat a játék menetébe, de még nem rendelkezik az ehhez szükséges ismeretekkel. A karakterek alaptulajdonságait viszont már meg tudja fogalmazni, és egy egyszerűbb kis tesztprogrammal ellenőrizni is tudja a működésüket. Ez lesz most a feladata. Vannak tehát tündérek és boszorkányok. Mindegyiknek van neve, és mindegyik rendelkezik valamekkora mágikus erővel (egy int érték). Mindegyikük tud áldani vagy átkozni. A varázslás (azaz áldás vagy átok) során mindegyikük kifejt valamekkora hatást. Ez a hatás egy egész szám, amelyet az illető hölgy ereje alapján számítunk, mégpedig úgy, hogy tündérek esetén ezt az erőt megszorozzuk egy, a tündérekre egyaránt érvényes szorzóval, boszorkányok esetén pedig egy, a boszorkányokra egyaránt érvényes szorzóval. Boszorkányok esetén ez a hatás még egy -1-es szorzóval is kiegészül. Mivel a jócselekedetek növelik az ember erejét, a rosszak pedig legalábbis a mesében csökkentik, ezért a tündérek ereje minden egyes varázsláskor 1-gyel növekszik, a boszorkányoké 1-gyel csökken, de csak addig, amíg nulla nem lesz. 3

Mindenki tudja visszaadni (ToString()) azt, hogy tündér vagy boszorkány, továbbá a nevét és az erejének értékét. Ha a boszorkány ereje nullára csökken, akkor még az is kerüljön az adatok mellé, hogy megjavult. a/ Tesztelje néhány adattal az elkészült osztályokat. b/ Írja meg a mese keresztelő részét, vagyis: olvassa be a meghívottak nevét addig, amíg van újabb meghívott (egy kérdésre adott válasz dönti el, hogy van-e még). Az illető hölgy induló ereje legyen egy véletlen érték. Az pedig, hogy tündér-e vagy boszorkány, szintén a véletlenen múlik. Vegye figyelembe azt is, hogy a hölgyeknek kb. x %-a boszorkány. A meghívás után írassa ki a jelenlévő hölgyeket, majd egyenként mindenki varázsoljon, és számoljuk ki ezek összhatását. c/ A mellékelt boszi.txt adatfájlból (vagy egy Ön által készített hasonló adatfájlból) olvassa be az adatokat, és hozza létre a hölgyek listáját, majd számolja ki, az átlagos varázserőt, valamint a legnagyobb varázserejű tündér és a leggonoszabb boszorkány nevét. 7. feladat Egy projekt elvégzésére dolgozókat és gyakornokokat vesznek fel. A gyakornok csak annyiban különbözik egy teljes értékű dolgozótól, hogy fizetése a teljes munkaidős dolgozó fizetésének 65%-a. Felvételkor meg kell adni a dolgozó nevét és azt, hogy milyen munkakörbe vették fel. A projekt ideje alatt ezek egyike sem változhat. A dolgozók a ledolgozott óraszámuk alapján kapják a fizetésüket, az óradíj minden egyes dolgozó esetén azonos. A dolgozó időnként dolgozik valahány órát, ekkor ledolgozott óraszáma a metódus paraméterében lévő óraszámmal növekszik. Írjon programot, amelyben felveszi a jelentkezőket (beolvassa az adataikat egy adatfájlból), dolgoztatja őket (kérdezze meg, hogy ki hány órát dolgozott), majd kiíratja a fizetésüket. Számítsa ki az összes kifizetett bér értékét is. 8. feladat Készítsünk alkalmazást egy vállalatnál dolgozó emberek fizetésének kiszámítására. A dolgozók között vannak Vezetők, akik havi fix bérért dolgoznak. Vannak ÓraBéres munkások, akiknek a bére attól függ, hogy hány órát dolgoztak. A túlóráért az órabér 150%-át kapják. A ledolgozott órák számát és a túlórák számát is megadhatja egy set beállítással. Az óradíj egységes. A DarabBéres munkások bére attól függ, hogy hány darab terméket állítottak elő. A darabbér minden darabra azonos. A dolgozók negyedik csoportja a Kereskedő, akik fix alapbért kapnak, és jutalék is jár nekik, amely attól függ, hány terméket értékesítettek. A jutalék minden termékre azonos. Minden dolgozót jellemez: Azonosító, Név, Belépés dátuma, munkabére. A ToString() adja vissza az azonosítót, nevet és belépési dátumot. A munkabér nem ennyire nyilvános, azt alapból ne adja vissza, csak akkor, ha direkt kérjük. Hozzon létre egy absztrakt Dolgozo osztályt, amely definiálja a MunkaBer() metódust. Hozza létre a leszármazott osztályokat, és az osztálynak megfelelő módon számítsa ki a dolgozók bérét. Írjon egy alkalmazást, ahol teszteli a megoldását! (Elég, ha csak néhány példányt hoz létre.)! 4

Emlékeztető: Öröklődés: Class UtodOsztaly : OsOsztaly { } Az öröklődés során egy meglévő osztályból kiindulva, új osztályt hozunk létre (származtatunk). Az ősosztálytól örököljük annak public és protected mezőit és metódusait. Ezen mezőkre a saját metódusainkban hivatkozhatunk, az örökölt metódusokat meghívhatjuk. Hasonlóan örököljük a private mezőket és metódusokat is, de azok védelmi szintje, hatásköre miatt ezekre nem hivatkozhatunk közvetlenül. Valójában a származtatott osztály az ősosztály minden tagját, metódusát örökli, kivéve a példánykonstruktorokat, a statikus konstruktorokat és a destruktorokat. Az ősosztály metódusának újradefiniálása a leszármazott osztályban az override kulcsszóval történik. A lecserélhetőséget az ősben a virtual kulcsszóval jelezzük. Az absztrakt (abstract) osztályt nem lehet példányosítani. Az absztrakt osztály tartalmazhat normál metódusokat. Az absztrakt metódusok csak deklarálva vannak az absztrakt osztályban, az utódosztályban kell megvalósítanunk őket. A megvalósító metódusokat az override kulcsszóval kell ellátnunk. Az absztrakt metódusok implicite virtuálisak is. 5