This shows you the differences between two versions of the page.
poo-ca-cd:laboratoare:agregare-mostenire [2024/10/20 11:05] alexandra.nioata |
poo-ca-cd:laboratoare:agregare-mostenire [2024/10/20 22:48] (current) alexandra.nioata |
||
---|---|---|---|
Line 714: | Line 714: | ||
<note important> | <note important> | ||
- | Veți încărca soluția voastră pe LambdaChecker, contest [[https://beta.lambdachecker.io/contest/54/problems?page=1 | POO - LAB3]]. | + | 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. |
- | Încercați să accesați de aici contest-ul, altfel e posibil să vă ceară o parolă care nu există. De asemena, să fiți logați pe LambdaChecker înainte de accesa link-ul. m( | ||
</note> | </note> | ||
- | Schelet laborator: [[https://github.com/oop-pub/oop-labs/tree/master/src/lab3 | Laborator 3]] | ||
- | + | **Task 1 [1p]** | |
- | **Task 1** [1p] | + | |
Veți proiecta o clasă Form care va avea câmpul privat color (String). | Veți proiecta o clasă Form care va avea câmpul privat color (String). | ||
- | Clasa va avea, de asemenea: | + | Clasa va avea, de asemenea: |
- | * un constructor fără parametri, care va inițializa culoarea cu "white"; | + | |
- | * un constructor cu parametri; | + | |
- | * o metodă de tip float getArea(), care va întoarce valoarea 0; | + | |
- | * o metodă toString(): "This form has the color [color]". | + | |
- | **Task 2** [2p] | ||
- | Din clasa Form derivați clasele Square, Triangle, Circle: | + | - un constructor fără parametri, care va inițializa culoarea cu “white”; |
+ | |||
+ | - un constructor cu parametri; | ||
+ | |||
+ | - o metodă de tip float getArea(), care va întoarce valoarea 0; | ||
+ | |||
+ | - o metodă toString(): “This form has the color [color]”. | ||
+ | |||
+ | |||
+ | **Task 2 [2p]** | ||
+ | |||
+ | Din clasa Form derivați clasele Square, Triangle, Circle: | ||
+ | |||
+ | - clasa Triangle (triunghi isoscel) va avea 2 membri height și base (adiacenta unghiurilor congruente) de tip float; | ||
+ | |||
+ | - clasa Circle va avea membrul radius de tip float; | ||
+ | |||
+ | - clasa Square va avea membrul side de tip float. | ||
- | * clasa Triangle va avea 2 membri height și base de tip float; | ||
- | * clasa Circle va avea membrul radius de tip float; | ||
- | * clasa Square va avea membrul side de tip float. | ||
Clasele vor avea: | Clasele vor avea: | ||
- | * constructori fără parametri; | + | - constructori fără parametri; |
- | * constructori care permit inițializarea membrilor. Identificați o modalitate de reutilizare a codului existent; | + | |
- | * suprascrieți metoda getArea() pentru a întoarce aria specifică fiecărei figuri geometrice; | + | - constructori care permit inițializarea membrilor. Identificați o modalitate de reutilizare a codului existent; |
- | * suprascrieți metoda toString() în clasele derivate, astfel încât aceasta să utilizeze implementarea metodei toString() din clasa de baza. | + | |
+ | - suprascrieți metoda getArea() pentru a întoarce aria specifică fiecărei figuri geometrice; | ||
+ | |||
+ | - suprascrieți metoda toString() în clasele derivate, astfel încât aceasta să utilizeze implementarea metodei toString() din clasa de baza. | ||
+ | |||
+ | |||
+ | **Task 3 [2p]** | ||
- | **Task 3** [2p] | ||
- | |||
Adăugați o metodă equals() în clasa Triangle. | Adăugați o metodă equals() în clasa Triangle. | ||
Justificați criteriul de echivalență ales. | Justificați criteriul de echivalență ales. | ||
- | <note important>**Hint:** | + | Hint: Puteți genera automat metoda, cu ajutorul IDE. Selectați câmpurile considerate și analizați în ce fel va fi suprascrisă metoda equals. |
- | Puteți genera automat metoda, cu ajutorul IDE. Selectați câmpurile considerate și | + | |
- | analizați în ce fel va fi suprascrisă metoda equals.</note> | + | |
- | **Task 4** - //''Upcasting''// [2p] | + | **Task 4 - Upcasting [1p]** |
+ | |||
+ | Creați un vector de obiecte Form și populați-l cu obiecte de tip Triangle, Circle și Square (upcasting). | ||
- | Creați un vector de obiecte Form și populați-l cu obiecte de tip Triangle, Circle și Square (upcasting). | ||
Parcurgeți acest vector și apelați metoda toString() pentru elementele sale. Ce observați? | Parcurgeți acest vector și apelați metoda toString() pentru elementele sale. Ce observați? | ||
- | **Task 5** - //''Downcasting''// [2p] | + | **Task 5 - Downcasting [2p]** |
+ | |||
+ | Adăugați: | ||
+ | |||
+ | - clasei Triangle metoda printTriangleDimensions, | ||
+ | |||
+ | - clasei Circle metoda printCircleDimensions | ||
+ | |||
+ | - clasei Square metoda printSquareDimensions | ||
- | Adăugați clasei Triangle metoda printTriangleDimensions, clasei Circle metoda printCircleDimensions și clasei Square metoda printSquareDimensions. | ||
Implementarea metodelor constă în afișarea bazei și înălțimii, razei, respectiv laturii. | Implementarea metodelor constă în afișarea bazei și înălțimii, razei, respectiv laturii. | ||
- | Parcurgeți vectorul de la exercițiul anterior și, folosind downcasting la clasa corespunzătoare, apelați | + | |
- | metodele specifice fiecărei clase (printTriangleDimensions pentru Triangle, printCircleDimensions pentru Circle și printSquareDimensions pentru Square). | + | Parcurgeți vectorul de la exercițiul anterior și, folosind downcasting la clasa corespunzătoare, apelați metodele specifice fiecărei clase: |
+ | |||
+ | |||
+ | - printTriangleDimensions pentru Triangle | ||
+ | |||
+ | - printCircleDimensions pentru Circle | ||
+ | |||
+ | - printSquareDimensions pentru Square | ||
Pentru a stabili tipul obiectului curent folosiți operatorul instanceof. | Pentru a stabili tipul obiectului curent folosiți operatorul instanceof. | ||
- | **Task 6** - //''Agregare''// [1p] | + | **Task 6 - Agregare [1p]** |
Afișați dimensiunile formelor din vectorul creat fără a folosi operatorul instanceof. | Afișați dimensiunile formelor din vectorul creat fără a folosi operatorul instanceof. | ||
+ | |||
+ | **Task 7 - Final [1p]** | ||
+ | |||
+ | Afișați perimetrul fiecărui obiect din vectorul creat utilizând exclusiv funcția printPerimeter, modificând doar ce se afla in corpul funcției, lasând antetul identic. | ||
+ | |||
==== Resurse ==== | ==== Resurse ==== |