Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:static-final [2021/09/21 19:10]
florin.mihalache
poo-ca-cd:laboratoare:static-final [2022/10/30 18:50] (current)
teodora.stroe2210 [Exerciții]
Line 338: Line 338:
 O clasă de tip Singleton poate fi extinsă, iar metodele ei suprascrise,​ însă într-o clasă cu metode statice acestea nu pot fi suprascrise (//​overriden//​) (o discuție pe aceasta temă puteți găsi [[http://​geekexplains.blogspot.ro/​2008/​06/​can-you-override-static-methods-in-java.html | aici]], și o comparație între static și dynamic binding [[http://​geekexplains.blogspot.ro/​2008/​06/​dynamic-binding-vs-static-binding-in.html | aici]]). O clasă de tip Singleton poate fi extinsă, iar metodele ei suprascrise,​ însă într-o clasă cu metode statice acestea nu pot fi suprascrise (//​overriden//​) (o discuție pe aceasta temă puteți găsi [[http://​geekexplains.blogspot.ro/​2008/​06/​can-you-override-static-methods-in-java.html | aici]], și o comparație între static și dynamic binding [[http://​geekexplains.blogspot.ro/​2008/​06/​dynamic-binding-vs-static-binding-in.html | aici]]).
  
-=== Deep copy. Shallow copy ===+==== Deep copy. Shallow copy ====
  
 Pentru început, ne propunem să ne familiarizăm cu noțiunea de copie în Java.  Pentru început, ne propunem să ne familiarizăm cu noțiunea de copie în Java. 
Line 464: Line 464:
  
 ==== Exerciții ==== ==== Exerciții ====
-  - **(1 punct)** Folosind ​de pașii și de debugger, reparați codul din pachetul ''​vault''​ din cadrul scheletului laboratorului (același care este prezentat în cadrul tutorialului de debug).+  - **(0 puncte)** Folosind pașii ​de mai sus și debugger-ul, reparați codul din pachetul ''​vault''​ din cadrul ​[[https://​github.com/​oop-pub/​oop-labs/​tree/​master/​src/​lab4 | scheletului laboratorului]] (același care este prezentat în cadrul tutorialului de debug).
   - Aveți de implementat o mini aplicație de tip queries dintr-o bază de date cu studenți și cu profesori. Fiecare student are o colecție de asocieri dintre materiile sale și notele la materiile respective de tip dicționar, iar fiecare profesor are o listă de materii pe care le predă. Studenții pot executa operații care sunt doar read-only (acestea nu pot avea efecte de tip write în baza de date - hint: imutabilitate) și profesorii pot executa operații de tip read-write.   - Aveți de implementat o mini aplicație de tip queries dintr-o bază de date cu studenți și cu profesori. Fiecare student are o colecție de asocieri dintre materiile sale și notele la materiile respective de tip dicționar, iar fiecare profesor are o listă de materii pe care le predă. Studenții pot executa operații care sunt doar read-only (acestea nu pot avea efecte de tip write în baza de date - hint: imutabilitate) și profesorii pot executa operații de tip read-write.
-      - **(1 punct)** Având la bază scheletul de cod, faceți clasa Database, care se ocupă cu gestionarea bazei de date a studenților și a profesorilor,​ o clasă de tip Singleton ​(tipul ​de Singleton este la alegerea voastră). Această clasă va conține o listă de profesori și o listă de studenți. Faceți aceste liste de tip final.+      - **(2 puncte)** Având la bază scheletul de cod, faceți clasa Database, care se ocupă cu gestionarea bazei de date a studenților și a profesorilor,​ o clasă de tip Singleton ​cu implementare ​de tip lazy. Această clasă va conține o listă de profesori și o listă de studenți. Faceți aceste liste de tip final.
       - **(1 punct)** Clasa ''​Student''​ are trei câmpuri: nume, prenume și un dicționar unde sunt stocate materiile unui student, fiecare materie fiind asociată cu nota studentului la materia respectivă. În această clasă, implementați următoarele:​       - **(1 punct)** Clasa ''​Student''​ are trei câmpuri: nume, prenume și un dicționar unde sunt stocate materiile unui student, fiecare materie fiind asociată cu nota studentului la materia respectivă. În această clasă, implementați următoarele:​
           - metoda ''​averageGrade'',​ care calculează media generală a studentului (media tuturor materiile pe care acesta le are).           - metoda ''​averageGrade'',​ care calculează media generală a studentului (media tuturor materiile pe care acesta le are).
Line 486: Line 486:
           - ''​getStudentsByAverageGrade''​           - ''​getStudentsByAverageGrade''​
           - ''​getStudentsByGradeForSubject''​           - ''​getStudentsByGradeForSubject''​
-      - **(1 punct)** În clasa Student implementați următoarele metode, care vor apela metodele corespunzătoare din clasa ''​Database''​ (atenție, aici metodele trebuie să întoarcă rezultate imutabile, sub forma de deep copy, folosind modalitatea prezentată în laborator, folosind [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Collections.html | Collections.unmodifiableList()]] pentru ca evita posibilitatea de a modifica rezultatele,​ care sunt read-only):+      - **(2 puncte)** În clasa Student implementați următoarele metode, care vor apela metodele corespunzătoare din clasa ''​Database''​ (atenție, aici metodele trebuie să întoarcă rezultate imutabile, sub forma de deep copy, folosind modalitatea prezentată în laborator, folosind [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Collections.html | Collections.unmodifiableList()]] pentru ca evita posibilitatea de a modifica rezultatele,​ care sunt read-only):
           - ''​getAllTeachers''​           - ''​getAllTeachers''​
           - ''​getTeachersBySubject''​           - ''​getTeachersBySubject''​
Line 512: Line 512:
 </​note>​ </​note>​
  
-<​note>​+<​note ​tip>
 Pentru shallow copy și deep copy la ArrayList avem în felul următor: Pentru shallow copy și deep copy la ArrayList avem în felul următor:
   * shallow copy:   * shallow copy:
poo-ca-cd/laboratoare/static-final.1632240628.txt.gz · Last modified: 2021/09/21 19:10 by florin.mihalache
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0