Kocsmaszimulátor feladat
Kocsmaszimulátor¶
Az itt bemutatott feladat gyakorlatilag az objektum-orientált programozást hivatott gyakoroltatni, de csak az alapokat. A feladat két részből áll, először csak hagyományos osztályokat kell készíteni, a második részben jön be az öröklődés.
Amennyiben az órán nem hallottad még az öröklődést, csak az első részt oldd meg. A feladat megoldása előtt olvasd végig a feladatsort, és készíts hozzá UML osztálydiagramot.
Kocsmaszimulátor part 1¶
public class Ember {
private String nev;
private int kor;
private boolean ferfi;
// konstruktorok
// getterek és szetterek
}
Bővítsük ki a már létező Ember osztályt egy privát pénz, és részegség int, és egy kocsmában boolean változókkal. Legyen egy új konstruktor, ez fogadjon a már meglévő paramétereken kívül egy pénz paramétert is, amit állítson be az Ember pénzének. A részegség 0, a kocsmában false legyen alapértelmezetten. Legyen az Embernek egy iszik(Kocsmáros kocsmaros)
metódusa, ami egy Kocsmárost vár majd. Ha ezt meghívják, akkor ha az illető a kocsmában van, fogyjon 1 a pénzéből, nőjön 1-gyel a részegsége, generáljon 1 koszos poharat, és adjon 1 pénzt a kocsmárosnak, akit paraméterül kapott. Majd látjuk, hogy a poharat hova kell eltárolni, és mi a Kocsmáros. Ha nincs a kocsmában, akkor írjon ki egy üzenetet erről. Legyen egy alszik()
metódusa is, ami nullázza a részegséget és kiírja, hogy elaludt, egy hazamegy()
metódusa, ami false-ra állítja a kocsmában változót, és egy jön()
metódusa, ami true-ra. Ezekről is történjen kiírás.
Legyen egy Kocsmáros
osztály is. Neki is legyen privát pénze, amit konstruktorban is meg lehet adni. Az összes kocsmáros ugyanazokon a koszos poharakon osztozzon (static), és legyen egy elmos()
metódusa, ami csökkenti eggyel a koszos poharak számát, és kiírja, hogy elmosott egy poharat. Ha nincs koszos pohár, akkor azt írja ki.
Legyen egy Ital
osztály is, aminek a következő privát tulajdonságai lesznek: ár, alkoholtartalom.
Az Embernek legyen egy olyan iszik metódusa is, aminek fejléce iszik(Kocsmáros kocsmáros, Ital ital)
, azaz italt is tud fogadni. Ekkor az ital árát adja át az Ember a Kocsmárosnak 1 helyett. Az Ember részegsége az ital alkoholtartalmával nőjön.
Ha a részegség eléri a 40-et, akkor az Ember mindkét iszik()
függvényénél automatikusan aludjon el.
Az összes osztály privát változóihoz legyenek getter, setter metódusok, és az osztályokhoz értelmes toString metódus.
Legyen egy main függvény, mondjuk Main nevű osztályban, itt írjatok egy rövidke futtatást, amiben eljátszogattok egy kicsit az emberekkel, bemutattok pár esetet, igyanak, aludjanak, stb...
Kocsmaszimulátor part 2¶
A meglévő Kocsmáros
osztályunkat örököltessük az Ember
-ből, mivel a kocsmárosok is emberek.
Ettől automatikusan megkapja az Ember
osztályban deklarált adattagokat (változókat) is. A Kocsmáros
hoz írjunk egy új paraméteres konstuktort, ami az Ember
(tehát az ős) konstruktorát is meghívja (super
kulcsszó). Elvileg a Kocsmáros így működőképes lesz, ha nem, akkor hozzuk működőképes állapotba további hibaelhárítással.
Az Ember
osztályunkból örököltessünk egy Diák
ot is, aki egy különleges ember lesz. A diák rendelkezzen privát ösztöndíj változóval, ami megadja, hogy mennyi pénzt keres a tanulással. Legyen egy tanul()
metódusa, amitől az ösztöndíja mennyiségével nő a pénze. Legyen egy paraméteres tanul(int mennyit)
metódusa is, amivel be lehet állítani, mennyit tanuljon, és ennek megfelelő pénzt kap.
Az Ember
ből származzon még egy Kidobó
is. Neki legyen egy privát boolean dolgozik
adattagja. Legyen egy static
változója is, ami azt fogja megadni, hogy hány olyan kidobó van, aki dolgozik éppen. Ez alapból 0. Új kidobó példányok konstruktorába rakjuk ennek a változónak a növelését, és változtassuk mindig megfelelően, ha a dolgozik változó értéke változhat (setter, szolgalatbaAll()
, szolgalatbolKilep()
). Legyen tehát szolgalatbaAll()
, és szolgalatbolKilep()
metódusa is, amelyek a dolgozik
értékét állítják. Írjuk felül az iszik
függvényét úgy, hogy ellenőrizze le, az adott kidobó éppen dolgozik-e, mivel szolgálatban nem ihat alkoholtartalmú italt, azonban 0 alkoholtartalmút igen. Ha nincs szolgálatban, hívjuk meg az Ember
(tehát super) iszik
függvényét.
A Diák
, és a Kidobó
is rendelkezzen paraméteres konstruktorral.
A Diák
, Kocsmáros
, és Kidobó
toString()
-jét írjuk felül, hívjuk meg benne az Ember
toString()
-jét is, valamint írjuk ki az adott osztályra jellemző egyéb adatokat is.
Az Ember
rendelkezzen egy kötözködik(Ember kivel)
metódussal, ami egy másik embert vár paraméterül. Le kell ellenőrizni, hogy van-e szolgálatban lévő kidobó, ha igen, az első embert hazaküldjük. Ha nincs, kiírjuk, hogy jót kötözködött.
Italok¶
Az Ital
osztályból örököltessünk egy Sör
, Bor
, és egy Kevert
osztályt.
A Bor rendelkezzen egy privát int évjárat
változóval. A Sör
nek ne legyen új változója. Ezek kapjanak megfelelő konstruktort.
A Kevert
osztálynak legyen 2, 3, 4 paraméteres konstruktora is, ami italokat vár paraméterül, például: public Kevert(Ital it1, Ital it2, Ital it3, Ital it4)
Ezek az italok lehetnek sima Ital
, Sör
, vagy Bor
tipusúak, ezt nem kell külön lekezelnünk, mert erre is jó az öröklődés, mivel ezek mind kezelhetőek Ital
ként.
A konstruktor a Kevert
ital alkoholtartalmát a megadott italok átlag-alkoholtartalmára állítsa be. Egy példa a konstruktor hívására:
Minden osztály privát adattagjainak legyenek getterei és setterei.
A main függvényben játsszunk kicsit a beépített új funkciókkal is.