This shows you the differences between two versions of the page.
poo-ca-cd:laboratoare:polimorfism [2024/10/27 00:17] raluca.birladeanu created |
poo-ca-cd:laboratoare:polimorfism [2024/10/27 18:45] (current) valentin.carauleanu [Summary] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 7: Overriding, overloading & Visitor pattern ===== | + | ===== Laboratorul 4: Polimorfism ===== |
- | + | ||
- | **Video introductiv:** [[https://www.youtube.com/watch?v=_mfLYYInv6c| link ]] | + | |
==== Obiective ==== | ==== Obiective ==== | ||
Line 7: | Line 5: | ||
* Implementarea polimorfismului în Java | * Implementarea polimorfismului în Java | ||
* Diferența dintre Overriding & Overloading | * Diferența dintre Overriding & Overloading | ||
- | * Prezentarea design pattern-ului Visitor și familiarizarea cu situațiile în care acesta este util de aplicat | ||
==== Polimorfismul ==== | ==== Polimorfismul ==== | ||
Line 181: | Line 178: | ||
{{:poo-ca-cd:laboratoare:lab7.png?600|}} | {{:poo-ca-cd:laboratoare:lab7.png?600|}} | ||
+ | |||
+ | === Exercitii === | ||
+ | <note important> | ||
+ | Pentru a încărca soluția, va trebui să accesați link-ul https://code.devmind.ro/login, să intrați pe tab-ul Contests, unde veți găsi laboratorul grupei voastre. | ||
+ | |||
+ | </note> | ||
+ | |||
+ | ** Task 1 [1p] ** | ||
+ | |||
+ | In clasa Employee adaugati 3 parametri `private`: name (String), salary (double) | ||
+ | si age (int). Adaugati constructor cu toti cei 3 parametri si getteri si setteri | ||
+ | pentru fiecare parametru. | ||
+ | |||
+ | In fiecare clasa-copil (`Manager`, `Developer`) adaugati un constructor care sa apeleze | ||
+ | constructorul din clasa de baza (`super`). | ||
+ | |||
+ | In toate cele 3 clase adaugati metoda `toString` astfel: | ||
+ | |||
+ | - pentru `Employee` va afisa: Name: `name`, Salary: `salary`, Age: `age` | ||
+ | - pentru `Manager` va afisa: Name: `name`, Salary: `salary`, Age: `age` | ||
+ | [Position: Manager] | ||
+ | - pentru `Developer` va afisa: Name: `name`, Salary: `salary`, Age: `age` | ||
+ | [Position: Developer] | ||
+ | |||
+ | ** Task 2 [1p] ** | ||
+ | |||
+ | Implementati metoda `calculateBonus` in clasa `Employee` care va salariul * 0.05. | ||
+ | |||
+ | Suprascrieti metoda in cele doua clase copil astfel: | ||
+ | - pentru `Manager` bonusul va fi salariul * 0.2 | ||
+ | - pentru `Developer` bonusul va fi salariul * 0.15 | ||
+ | |||
+ | ** Task 3 [1p] ** | ||
+ | |||
+ | Implementati metoda `validateEmployee` in clasa `Employee` care va verifica daca | ||
+ | salariul este mai mare decat 0 si varsta este intre 18. Metoda va returna | ||
+ | `Salary cannot be negative.` cand salariul este mai mic de 0 si `Employee age must | ||
+ | be 18 or older.` cand varsta este mai mica de 18. | ||
+ | |||
+ | ** Task 4 [2p] ** | ||
+ | |||
+ | Pentru clasele `Manager` si `Developer` adaugati un parametru `private` | ||
+ | care sa reprezinte numarul de angajati pe care il are fiecare manager, respectiv | ||
+ | numarul de proiecte pe care le are fiecare developer. Adaugati getteri si setteri | ||
+ | pentru acesti parametri. Adaugati un constructor care sa primeasca si acesti parametri | ||
+ | si sa apeleze constructorul din clasa de baza. | ||
+ | |||
+ | In clasa `Employee` adaugati o metoda showDetails care sa afiseze mesajul | ||
+ | `Employee details: `. | ||
+ | |||
+ | In clasele copil suprascrieti metoda astfel: | ||
+ | - pentru `Manager` va afisa: `Employee details: Manager of X employees.` | ||
+ | - pentru `Developer` va afisa: `Employee details: Developer with Y projects.` | ||
+ | |||
+ | ** Task 5 [2p] ** | ||
+ | |||
+ | Suprascrieti metoda `validateEmployee` in clasele copil astfel: | ||
+ | - pentru `Manager` va verifica daca numarul de angajati este mai mare decat 1. Daca nu | ||
+ | va afisa mesajul `Number of employees managed must be 1 or greater.`. | ||
+ | - pentru `Developer` va verifica daca numarul de proiecte este mai mare decat 1. Daca nu | ||
+ | va afisa mesajul `Number of projects must be 1 or greater.`. | ||
+ | |||
+ | ** Task 6 [2p] ** | ||
+ | |||
+ | Supraincarcati metoda `calculateBonus` in clasele copil astfel incat sa primeasca un | ||
+ | parametru de tip int care sa reprezinte bonusul per angajat/proiect. Metoda va calcula | ||
+ | astfel: | ||
+ | - pentru `Manager` bonusul va fi salariul * 0.2 + bonus * numarul de angajati | ||
+ | - pentru `Developer` bonusul va fi salariul * 0.15 + bonus * numarul de proiecte | ||
+ | |||
+ | ** Task 7 [1p] ** | ||
+ | |||
+ | Adugati metoda compareSalary in clasa `Employee` care va primi un obiect de tip Employee. | ||
+ | Aceasta va returna un int astfel: | ||
+ | - 1 daca salariul obiectului curent este mai mare decat salariul obiectului | ||
+ | primit ca parametru | ||
+ | - 0 daca salariul obiectului curent este egal cu salariul obiectului primit ca | ||
+ | parametru | ||
+ | - -1 daca salariul obiectului curent este mai mic decat salariul obiectului | ||
+ | primit ca parametru | ||
+ | |||
+ | Mesajul de afisare: | ||
+ | - 1 sau -1 -> "Name" has a higher salary. | ||
+ | - 0 -> Both employees have the same salary. | ||
+ | |||
+ | |||
+ | ** Example: ** | ||
+ | |||
+ | **Input:** | ||
+ | 1 | ||
+ | |||
+ | **Expected Output** | ||
+ | Name: John, Salary: 5000.0, Age: 35 [Position: Manager] | ||
+ | |||
+ | |||
+ | |||
+ | |||
==== Referințe ==== | ==== Referințe ==== | ||
- Kathy Sierra, Bert Bates. //SCJP Sun Certified Programmer for Java™ 6 - Study Guide//. Chapter 2 - Object Orientation ([[http://firozstar.tripod.com/_darksiderg.pdf|available online]]) - moștenire, polimorfism, overriding, overloading + exemple de întrebări | - Kathy Sierra, Bert Bates. //SCJP Sun Certified Programmer for Java™ 6 - Study Guide//. Chapter 2 - Object Orientation ([[http://firozstar.tripod.com/_darksiderg.pdf|available online]]) - moștenire, polimorfism, overriding, overloading + exemple de întrebări | ||
- | - Vlissides, John, et al. //Design patterns: Elements of reusable object-oriented software//. Addison-Wesley (1995) ([[http://index-of.co.uk/Software-Engineering/Design%20Patterns%20-%20Elements%20Of%20Reusable%20Object-Oriented%20Software%20-%20Addison%20Wesley.pdf|available online]]) | ||
- |