Szkriptnyelvek - 9. gyakorló feladatsor

Objektumorientáltság JavaScriptben

Megoldás: A feladatsor egy lehetséges megoldása elérhető ide kattintva.

Pizzázó (50 pont)

Levente egy pizzázót üzemeltet, aminek el szeretné készíteni a weboldalát. Ehhez először modellezni szeretné a pizzázóval kapcsolatos fontosabb fogalmakat. Készítsd el az Etel, Pizza és Vasarlo osztályokat JavaScript nyelven a feladatleírás alapján!

1. Az Etel osztály (13 pont)

Hozz létre egy Etel nevű osztályt, amelynek legyen 3 adattagja: nev (az étel neve), _kaloriaSzam (az ételben található kalóriák száma) és egy _fogyaszthato nevű logikai adattag (ez mondja meg azt, hogy az étel fogyasztható-e vagy sem)! (1 pont)

2. A Pizza osztály (23 pont)

Készíts egy Pizza nevű osztályt, amely az Etel osztályból öröklődik! Az örökölt adattagokon kívül a pizza rendelkezzen még egy _ar és egy feltetek adattaggal is! Az _ar a pizza árát jelenti, a feltetek adattag pedig egy tömb, ami a pizzán található feltétek neveit fogja tárolni. (1 pont)

3. A Vasarlo osztály (14 pont)

Írj egy Vasarlo nevű osztályt, amelynek legyen 3 adattagja: nev (a vásárló neve), penz (a vásárló pénzének mennyisége) és egy rendelesek nevű tömb, amely a vásárló rendeléseit tárolja! (1 pont)

Példa a kód működésére

const etel1 = new Etel('alma', 70);
const etel2 = new Etel('sajt', -100);
etel1.kaloriaSzam = 50;
etel2.fogyaszthato = false;

console.log(etel1);         // Etel { nev: 'alma', _kaloriaSzam: 50, _fogyaszthato: true }
console.log(etel2);         // Etel { nev: 'sajt', _kaloriaSzam: 0, _fogyaszthato: false }
console.log(etel1.info());  // 'alma (50 kaloria), fogyaszthato: igen'
console.log(etel2.info());  // 'sajt (0 kaloria), fogyaszthato: nem'
console.log('----------------------------------------------------------------------------------------------------');

const p1 = new Pizza('hawaii', 1000, 1800);
const p2 = new Pizza('sonkas-kukoricas pizza', 1000);
p1.ar = 2000;

p1.megromlik();                                       // 'A pizza megromlott.'
p1.feltetetFelvesz('sajt');                           // 'HIBA! Nem egy feltet!'
p1.feltetetFelvesz({nev: 'sajt'});                    // 'HIBA! Nem egy feltet!'
p1.feltetetFelvesz({nev: 'sajt', kaloria: 'otven'});  // 'HIBA! Nem megfelelo tipus!'
p1.feltetetFelvesz({nev: 'sajt', kaloria: 50});       // 'Feltet felvetel sikeres!'
p1.feltetetFelvesz({nev: 'sajt', kaloria: 70});       // 'HIBA! Mar van ilyen feltet!'
p1.feltetetFelvesz({nev: 'sonka', kaloria: 120});     // 'Feltet felvetel sikeres!'
p1.feltetetFelvesz({nev: 'kukorica', kaloria: 30});   // 'Feltet felvetel sikeres!'

console.log(p1.info());  // 'hawaii pizza (1200 kaloria), fogyaszthato: nem, ar: 2300 forint, feltetek: sajt, sonka, kukorica'
console.log(p2.info());  // 'sonkas-kukoricas pizza (1000 kaloria), fogyaszthato: igen, ar: 1500 forint'
console.log('----------------------------------------------------------------------------------------------------');

const v1 = new Vasarlo('Sanyi', 5000);
const v2 = new Vasarlo('Bela', 10000);

v1.pizzatRendel('valami pizza');                        // 'HIBA! Nem pizza!'
v1.pizzatRendel(p1);                                    // 'HIBA! Nem eheto pizza!'
v1.pizzatRendel(p2);                                    // 'Sikeres rendeles!'
v1.pizzatRendel(new Pizza('negysajtos', 1200, 1200));   // 'Sikeres rendeles!'
v1.pizzatRendel(p2);                                    // 'Sikeres rendeles!'
v1.pizzatRendel(p2);                                    // 'HIBA! Nincs eleg penz!'

console.log(v1.penz);                               // 800
console.log(v2.penz);                               // 10000
console.log(v1.pizzakatListaz());                   // '2 darab sonkas-kukoricas pizza, 1 darab negysajtos pizza'
console.log(v2.pizzakatListaz());                   // 'Nincs rendeles!'