hf_hez

Tipp: a diák között lépkedni a J és K billentyúkkel lehet. Szöveges kereséshez ctrl-F használható.

Letöltés

1.

Gondolatok a HF-hez • Megírtuk a világ legjobb snake játékát funkcionálisan. • OO modellre való áttérésnél kézenfekvő, hogy kígyó és gyümölcs is objektum. // eredeti kódrészlet: void eat(snake s, enum fruit f) { switch(f) { case apple: s.length += 1; break; case kiwi: s.length += 3; break; default: } } C++ programozási nyelv © BME-IIT Sz.I. // OO–nak GONDOLT változat enum kind { apple, pear, kiwi }; class Fruit { kind type; public: kind getType() { return type; } }; class Snake { int length; public: Snake() : length(1) {} void grow(int n) { length += n; } void feed(Fruit& f) { switch(f.getType()) { case apple: grow(1); Ez így nem OO program break; case kiwi: ... 2021.03.29. - 1-

2.

Mi a baj? // OO–nak GONDOLT változat enum kind { apple, pear, kiwi }; class Fruit { kind type; public: kind getType() { return type; } }; class Snake { int length; public: Snake() : length(1) {} void grow(int n) { length += n; } void feed(Fruit& f) { switch(f.getType()) { case apple: grow(1); Ez így nem OO program break; case kiwi: ... C++ programozási nyelv © BME-IIT Sz.I. • Ez C++ szintakszissal írt procedurális kód. • SWITCH eleve gyanús!!! • Ha típus kell lekérdezi az is nagyon gyanús!!!! • Objektumok nem hatnak/kommunikálnak egymással. • Nehezen módosítható. Módosítani kell a kígyó kódját pl: – Egy új gyümölcs megjelenése miatt. – Gyümölcstől függő méretű növekedést akarunk. – ... 2021.03.29. - 2-

3.

OO megvalósítás class Fruit { public: virtual void eatenBy(Snake* s); }; • Módosítható • Bővíthető • Átlátható class Snake { int length; public: Snake() : length(1) {} void grow(int n) { length += n; } void feed(Fruit& f) { f.eatenBy(this); } void draw() ... }; class Apple : public Fruit { public: void eatenBy(Snake* s) { s->grow(1); } }; C++ programozási nyelv © BME-IIT Sz.I. 2021.03.29. - 3-

4.

Mérgező alma is lehet class Fruit { public: virtual void eatenBy(Snake* s); }; class Snake { int length; bool killed; public: Snake() : length(1), killed(false) {} void grow(int n) { length += n; } void kill() { killed = true; } void feed(Fruit& f) { f.eatenBy(this); } void draw() ... }; C++ programozási nyelv © BME-IIT Sz.I. class PoisonApple : public apple { public: void eatenBy(Snake* s) { s->kill(); } }; 2021.03.29. - 4-

Utolsó frissítés: 2021-04-16 16.48