User Tools

Site Tools


Problem constructing authldap
laboratoare:agregare-mostenire
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:agregare-mostenire [2019/10/13 21:53]
Adriana Draghici
laboratoare:agregare-mostenire [2019/10/30 01:02] (current)
Florin Mihalache [Resurse]
Line 47: Line 47:
  
 class Book { class Book {
-    private String title; // Compoziţie +    private String title; // Compunere 
-    private Page[] pages; // Compoziţie+    private Page[] pages; // Compunere
     private LibraryRow libraryRow = null; // Agregare     private LibraryRow libraryRow = null; // Agregare
   
Line 291: Line 291:
 Constructorii **nu** se moștenesc și pot fi apelați doar în contextul unui constructor copil. Apelurile de constructor sunt înlănțuite,​ ceea ce înseamnă că înainte de a se inițializa obiectul copil, mai întâi se va inițializa obiectul părinte. În cazul în care părintele este copil la rândul lui, se va înițializa părintele lui (până se va ajunge la parintele suprem -- root). Constructorii **nu** se moștenesc și pot fi apelați doar în contextul unui constructor copil. Apelurile de constructor sunt înlănțuite,​ ceea ce înseamnă că înainte de a se inițializa obiectul copil, mai întâi se va inițializa obiectul părinte. În cazul în care părintele este copil la rândul lui, se va înițializa părintele lui (până se va ajunge la parintele suprem -- root).
  
-În laboratorul [[http://​elf.cs.pub.ro/​poo/​laboratoare/​constructori-referinte#​cuvantul-cheie-final--obiecte-immutable |Constructori și referințe]] au fost prezentate și câteva din cuvintele cheie ce pot fi puse înaintea unor membri ai claselor, sau chiar a claselor. 
- 
-* cuvântul cheie **''​final''​** ​ 
-    * folosit la declararea unei metode, implicând faptul că metoda nu poate fi suprascrisă în clasele derivate ​ 
-    * folosit la declararea unei clase, implicând faptul că acea clasă nu poate fi derivată ​ (de exemplu clasa [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​String.html | String]]) 
-  ​ 
 Pe lângă reutilizarea codului, moștenirea dă posibilitatea de a dezvolta pas cu pas o aplicație (procedeul poartă numele de //​incremental development//​). Astfel, putem folosi un cod deja funcțional și adaugă alt cod nou la acesta, în felul acesta izolându-se bug-urile în codul nou adăugat. Pentru mai multe informații citiți capitolul //Reusing Classes// din cartea //Thinking în Java (Bruce Eckel)// ​ Pe lângă reutilizarea codului, moștenirea dă posibilitatea de a dezvolta pas cu pas o aplicație (procedeul poartă numele de //​incremental development//​). Astfel, putem folosi un cod deja funcțional și adaugă alt cod nou la acesta, în felul acesta izolându-se bug-urile în codul nou adăugat. Pentru mai multe informații citiți capitolul //Reusing Classes// din cartea //Thinking în Java (Bruce Eckel)// ​
  
Line 394: Line 388:
 Int c = new Int(10); Int c = new Int(10);
  
-a.print(); // afișează Car +a.equals(a); // afișează Car 
-b.print(); // afișează Car deoarece se face upcasting de la Dacia la Car +a.equals(b); // afișează Car deoarece se face upcasting de la Dacia la Car 
-c.print(); // afișează Object deoarece se face upcasting de la Int la Object+a.equals(c); // afișează Object deoarece se face upcasting de la Int la Object
 </​code>​ </​code>​
  
Line 511: Line 505:
   ​   ​
 ==Summary== ==Summary==
-Relatii intre obiecte:+**Relații între ​obiecte:**
   * Agregare - **has a**   * Agregare - **has a**
-  * Mostenire ​- **is a**+  * Moștenire ​- **is a**
  
 **Upcasting** ​ **Upcasting** ​
   * convertire **copil** => **parinte**   * convertire **copil** => **parinte**
-  * realizata ​automat+  * realizată ​automat 
 **Downcasting** **Downcasting**
   * convertire **parinte** =>​**copil**   * convertire **parinte** =>​**copil**
-  * trebuie ​facuta ​explicit de catre programator +  * trebuie ​facută ​explicit de către ​programator 
-  * incercati sa evitati ​folosirea operatorului **instanceof**+  * încercați să evitați ​folosirea operatorului **instanceof**
  
 **Suprascrierea** ​ **Suprascrierea** ​
-  * inlocuirea functionalitatii ​metodei din parinte in copil +  * înlocuirea functionalitații ​metodei din clasa de bază în clasa derivată 
-  * pastreaza numele ​si semnatura metodei+  * pastreaza numele ​și semnatura metodei
  
 **Supraincarcarea**  ​ **Supraincarcarea**  ​
-  * in interiorul clasei pot exista mai multe metode cu acelasi nume, cu conditia ​ca semnatura ​(tipul, argumentele) ​sa fie diferita+  * în interiorul clasei pot exista mai multe metode cu acelasi nume, cu condiția ​ca semnătura ​(tipul, argumentele) ​să fie diferită
  
 **super** **super**
-  * instanta ​clasei parinte +  * instanța ​clasei parinte 
-  * amintiti-va ca **[[.lab2|this]]** se refera ​la instanta ​clasei curente+  * amintiți-vă din laboratorul anterior că **[[[[laboratoare:​constructori-referinte|this]]** se referă ​la instanța ​clasei curente
  
  
 ==Exerciții== ==Exerciții==
  
-<note important>​Exercițiile 1-6 se rezolvă în ordine.</​note>​ +Gigel vrea -i faca mamei sale un cadou de ziua ei și știe că-i plac foarte mult bomboanele. El are nevoie de ajutorul vostru pentru ​construi cel mai frumos ​și gustos cadou:
- +
-Gigel vrea sa-i faca mamei sale un cadou de ziua ei si stie ca-i plac foarte mult bomboanele. El are nevoie de ajutorul vostru pentru ​ca construi cel mai frumos ​si gustos cadou:+
   ​   ​
 **Task 1** [2p] **Task 1** [2p]
Line 546: Line 539:
                   * un constructor fără parametri                   * un constructor fără parametri
                   * un constructor ce va inițializa toate campurile                   * un constructor ce va inițializa toate campurile
-                  * o metoda ''​getVolume()'',​ care va intoarce valoarea 0;+                  * o metoda ​de tip float ''​getVolume()'',​ care va intoarce valoarea 0;
                   * Întrucât clasa ''​Object''​ se află în rădăcina arborelui de moștenire pentru orice clasă, orice instanta va avea acces la o serie de facilități oferite de Object. Una dintre ele este metoda ''​toString()'',​ al cărei scop este de a oferi o reprezentare unei instanțe sub forma unui șir de  caractere, utilizata in momentul apelului System.out.println(). Adaugati o metoda ''​toString()'',​ care va returna flavor-ul si regiunea de proveniență a cutiei de bomboane.                   * Întrucât clasa ''​Object''​ se află în rădăcina arborelui de moștenire pentru orice clasă, orice instanta va avea acces la o serie de facilități oferite de Object. Una dintre ele este metoda ''​toString()'',​ al cărei scop este de a oferi o reprezentare unei instanțe sub forma unui șir de  caractere, utilizata in momentul apelului System.out.println(). Adaugati o metoda ''​toString()'',​ care va returna flavor-ul si regiunea de proveniență a cutiei de bomboane.
  
 **Task 2** [2p] **Task 2** [2p]
  
-Din ea derivați clasele ''​Lindt'',​ ''​Chococo'',​ ''​Baravelli'',​ ''​ChocAmor''​. Pentru un design interesant, cutiile vor avea forme diferite:+Din ea derivați clasele ''​Lindt'',​ ''​Baravelli'',​ ''​ChocAmor''​. Pentru un design interesant, cutiile vor avea forme diferite:
   * //Lindt// va contine ''​length'',​ ''​width'',​ ''​height''​ (float);   * //Lindt// va contine ''​length'',​ ''​width'',​ ''​height''​ (float);
-  * //Chococo// va avea forma unui cilindru cu baza triunghilara,​ cu campurile ''​baseHeight'',​ ''​height''​ si ''​base''​ (float) 
   * //​Baravelli//​ va fi un cilindru. Acesta va conține un camp ''​radius''​ și unul ''​height''​ (float);   * //​Baravelli//​ va fi un cilindru. Acesta va conține un camp ''​radius''​ și unul ''​height''​ (float);
   * //​ChocAmor//,​ fiind un cub, va conține un camp ''​length''​ (float);   * //​ChocAmor//,​ fiind un cub, va conține un camp ''​length''​ (float);
Line 566: Line 558:
    
  
-Adăugați o metodă ''​equals()''​ în clasa ''​CandyBar''​. Justificați criteriul de echivalentă ales. Vedeți metodele clasei [[https://​docs.oracle.com/​en/​java/​javase/​12/​docs/​api/​java.base/​java/​lang/​Object.html | Object]], moștenită de toate clasele - Object are metoda equals, a cărei implementare verifică echivalența obiectelor comparând referințele.+Adăugați o metodă ''​equals()''​ în clasa ''​CandyBox''​. Justificați criteriul de echivalentă ales. Vedeți metodele clasei [[https://​docs.oracle.com/​en/​java/​javase/​12/​docs/​api/​java.base/​java/​lang/​Object.html | Object]], moștenită de toate clasele - Object are metoda equals, a cărei implementare verifică echivalența obiectelor comparând referințele.
 <note important>​**Hint:​** <note important>​**Hint:​**
 Puteti genera automat metoda, cu ajutorul IDE. Selectați câmpurile considerate și Puteti genera automat metoda, cu ajutorul IDE. Selectați câmpurile considerate și
Line 573: Line 565:
 **Task 4** - //''​Upcasting''//​ [2p] **Task 4** - //''​Upcasting''//​ [2p]
  
-Acum că am stabilit tipul cutiilor de bomboane, putem construi cadoul, ramanand la latitudinea vostra care va fi designul lui. In pachetul java.util se gaseste clasa ''​ArrayList'',​ care definește un resizable array, cu metodele specifice (add, size, get, lista lor completa este in [[https://​docs.oracle.com/​en/​java/​javase/​12/​docs/​api/​java.base/​java/​util/​ArrayList.html|documentatie]). Creati o clasă ''​CandyBag'',​ care va conține un ArrayList cu mai multe cutii din fiecare tip. Creați obiecte de tip Chococo ​si testați egalitatea lor;+Acum că am stabilit tipul cutiilor de bomboane, putem construi cadoul, ramanand la latitudinea vostra care va fi designul lui. In pachetul java.util se gaseste clasa ''​ArrayList'',​ care definește un resizable array, cu metodele specifice (add, size, get, lista lor completa este in [[https://​docs.oracle.com/​en/​java/​javase/​12/​docs/​api/​java.base/​java/​util/​ArrayList.html|documentatie]]). Creati o clasă ''​CandyBag'',​ care va conține un ArrayList cu mai multe cutii din fiecare tip. Creați obiecte de tip Lindt si testați egalitatea lor;
  
  
 **Task 5** - //''​Downcasting''//​ [1p] **Task 5** - //''​Downcasting''//​ [1p]
  
-Adaugati clasei ''​Baravelli'',​ functia ''​printBaravelliDim()'',​ care va afișa dimensiunile razei și inaltimii. În mod analog, procedati cu celelalte tipuri de cutii, adaugand metodele ​''​printChococoDim()'', ​''​printChocAmorDim()''​ si ''​printLindtDim()'',​ în care să afișați dimensiunile fiecarei cutii.+Adaugati clasei ''​Baravelli'',​ functia ''​printBaravelliDim()'',​ care va afișa dimensiunile razei și inaltimii. În mod analog, procedati cu celelalte tipuri de cutii, adaugand metodele ''​printChocAmorDim()''​ si ''​printLindtDim()'',​ în care să afișați dimensiunile fiecarei cutii.
  
 **Task 6** - //''​Agregare''//​ [2p] **Task 6** - //''​Agregare''//​ [2p]
Line 592: Line 584:
  
 == Resurse == == Resurse ==
-* {{|Soluție}} ​(disponibilă din 28.10.2019)+* {{laboratoare:​agregare-mostenire:​lab3-sol-2019.zip|Soluție}}
 * [[laboratoare:​old-exercises|Exerciții din alți ani]] * [[laboratoare:​old-exercises|Exerciții din alți ani]]
  
laboratoare/agregare-mostenire.1570992826.txt.gz · Last modified: 2019/10/13 21:53 by Adriana Draghici