Differences

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

Link to this comparison view

poo:laboratoare:13 [2021/01/17 19:18]
carmen.odubasteanu
poo:laboratoare:13 [2023/12/09 11:42] (current)
carmen.odubasteanu
Line 1: Line 1:
-===== Laboratorul ​13. =====+===== Laboratorul ​11. =====
  
 === Problema 1 - Singleton ​ === === Problema 1 - Singleton ​ ===
Line 19: Line 19:
 <code java> <code java>
 public abstract class User { public abstract class User {
-  ​private ​String firstName, lastName;+  ​protected ​String firstName, lastName;
   public User(String firstName, String lastName) {   public User(String firstName, String lastName) {
     this.firstName = firstName;     this.firstName = firstName;
Line 42: Line 42:
         User studentC = UserFactory.createUser("​Student",​ "​C",​ "​Ionescu"​);​         User studentC = UserFactory.createUser("​Student",​ "​C",​ "​Ionescu"​);​
  
-        User mother = UserFactory.createUser("​Parent",​ "MAC", "​Ionescu"​);​ +        User mother = UserFactory.createUser("​Parent",​ "M_AC", "​Ionescu"​);​ 
-        User father = UserFactory.createUser("​Parent",​ "MAC", "​Ionescu"​);​+        User father = UserFactory.createUser("​Parent",​ "T_AC", "​Ionescu"​);​
                
         User teacher = UserFactory.createUser("​Teacher",​ "​Teacher",​ "​Georgescu"​);​         User teacher = UserFactory.createUser("​Teacher",​ "​Teacher",​ "​Georgescu"​);​
Line 156: Line 156:
 <​note>​ <​note>​
 Hint!  Hint! 
 +
 1.Parent va tine minte si o lista a notificarilor,​ iar Catalog o lista a Observatorilor. 1.Parent va tine minte si o lista a notificarilor,​ iar Catalog o lista a Observatorilor.
 +
 2. Atentie! Primesc notificari doar parintii studentului respectiv! Modificati clasa Student astfel incat sa avem memorati si parintii pentru fiecare Student si adaugati o metoda isParent(Observer parent) care verifica daca un observator este parintele studentului current. 2. Atentie! Primesc notificari doar parintii studentului respectiv! Modificati clasa Student astfel incat sa avem memorati si parintii pentru fiecare Student si adaugati o metoda isParent(Observer parent) care verifica daca un observator este parintele studentului current.
 </​note>​ </​note>​
Line 165: Line 167:
 Fiecare profesor va aplica o politica prin care la sfârșitul semestrului selecteaza cel mai bun student. Pentru a realiza acest lucru în cadrul implementarii,​ va trebui sa folosiți șablonul de proiectare **Strategy**. Veți defini câte o clasa pentru fiecare din urmatoarele strategii: Fiecare profesor va aplica o politica prin care la sfârșitul semestrului selecteaza cel mai bun student. Pentru a realiza acest lucru în cadrul implementarii,​ va trebui sa folosiți șablonul de proiectare **Strategy**. Veți defini câte o clasa pentru fiecare din urmatoarele strategii:
  
-1. **BestPartialScore** – aceasta strategie va selecta studentul care are cel mai mare punctaj în timpul semestrului;​ +  - 1. **BestPartialScore** – aceasta strategie va selecta studentul care are cel mai mare punctaj în timpul semestrului;​ 
-2. **BestExamScore** – aceasta strategie va selecta studentul care are cel mai mare punctaj în examen; +  ​- ​2. **BestExamScore** – aceasta strategie va selecta studentul care are cel mai mare punctaj în examen; 
-3. **BestTotalScore** – aceasta strategie va selecta studentul care are punctajul total maxim.+  ​- ​3. **BestTotalScore** – aceasta strategie va selecta studentul care are punctajul total maxim.
  
 <code java> <code java>
Line 196: Line 198:
 Clasele **Assistant** și **Teacher** vor implementa interfața **Element**,​ iar clasa **ScoreVisitor** va implementa interfața **Visitor**. ​ Clasele **Assistant** și **Teacher** vor implementa interfața **Element**,​ iar clasa **ScoreVisitor** va implementa interfața **Visitor**. ​
 În clasa **ScoreVisitor** vom avea doua dicționare în care sunt stocate notele studentilor pentru examene și pentru parcurs. În clasa **ScoreVisitor** vom avea doua dicționare în care sunt stocate notele studentilor pentru examene și pentru parcurs.
-• Dicționarul **examScores** va avea cheia de tip **Teacher** și valoare de tip lista de **Pair** **(Student, Numele ​ cursului – ca String, nota pe care a acordat-o studentului pentru cursul indicat – ca Double).** +Dicționarul **examScores** va avea cheia de tip **Teacher** și valoare de tip lista de **Pair** **(Student, Numele ​ cursului – ca String, nota pe care a acordat-o studentului pentru cursul indicat – ca Double).** 
-• Dicționarul **partialScores** cu semnificație similara, dar pentru notele de pe parcurs atribuite de asistenți.+Dicționarul **partialScores** cu semnificație similara, dar pentru notele de pe parcurs atribuite de asistenți.
  
 În continuare, se va prezenta implementarea de la care veți porni pentru aceasta clasa: În continuare, se va prezenta implementarea de la care veți porni pentru aceasta clasa:
  
 <code java> <code java>
-public class ScoreVisitor implements Visitor { +class Pair<K, V1, V2> { 
-private HashMap<​Teacher,​ ArrayList<​Pair<​Student,​ String,,! Double>>>​ examScores;​ +  private K key; 
-private HashMap<​Assistant,​ ArrayList<​Pair<​Student,​ String,,! Double>>>​ partialScores;​ +  private V1 value1; 
-private ​class Pair<K, V1, V2> { +  private V2 value2; 
-private K key; +  public Pair(K key, V1 value1, V2 value2) { 
-private V1 value1; +    this.key = key; 
-private V2 value2; +    this.value1 = value1; 
-public Pair(K key, V1 value1, V2 value2) { +    this.value2 = value2; 
-this.key = key; + } 
-this.value1 = value1; + ​public K getKey() { 
-this.value2 = value2; +   ​return key; 
-+ } 
-public K getKey() { + ​public V1 getValue1() { 
-return key; +  return value1; 
-+ } 
-public V1 getValue1() { + ​public V2 getValue2() { 
-return value1; +  return value2; 
-+ }
-public V2 getValue2() { +
-return value2; +
-} +
-public void visit(Assistant assistant) { +
-// TODO1 +
-+
-public void visit(Teacher teacher) { +
-// TODO2+
 } }
 +public class ScoreVisitor implements Visitor {
 +  private HashMap<​Teacher,​ ArrayList<​Pair<​Student,​ String, Double>>>​ examScores;
 +  private HashMap<​Assistant,​ ArrayList<​Pair<​Student,​ String, Double>>>​ partialScores;​
 +  public ScoreVisitor(HashMap<​Teacher,​ ArrayList<​Pair<​Student,​ String, Double>>>​ examScores, HashMap<​Assistant,​ ArrayList<​Pair<​Student,​ String, Double>>>​ partialScores){
 +       ​this.examScores=examScores;​
 +       ​this.partialScores=partialScores;​
 +  }
 +  public void visit(Assistant assistant) {
 +   // **TODO1**
 +  }
 +  public void visit(Teacher teacher) {
 +   // **TODO2**
 +  }
 } }
 </​code>​ </​code>​
  
-• **TODO1** – veți determina toate notele pe care le are de trecut asistentul primit ca parametru de metoda respectiva. Veți verifica daca pentru o intrare din lista de note exista sau nu un obiect de tip Grade pentru cursul indicat corespunzator studentului. +• **TODO1** – veți determina toate notele pe care le are de trecut asistentul primit ca parametru de metoda respectiva. Veți verifica daca pentru o intrare din lista de note exista sau nu un obiect de tip **Grade** pentru cursul indicat corespunzator studentului. 
-Daca exista, atunci se va seta nota de pe parcurs pentru acel obiect, daca nu exista, se va crea un nou obiect Grade și se va adauga cursului.+Daca exista, atunci se va seta nota de pe parcurs pentru acel obiect, daca nu exista, se va crea un nou obiect ​**Grade** și se va adauga cursului.
  
-• **TODO2** – veți determina toate notele pe care le are de trecut profesorul primit ca parametru de metoda respectiva. Veți verifica daca pentru o intrare din lista de note exista sau nu un obiect de tip Grade pentru cursul indicat corespunzator studentului. +• **TODO2** – veți determina toate notele pe care le are de trecut profesorul primit ca parametru de metoda respectiva. Veți verifica daca pentru o intrare din lista de note exista sau nu un obiect de tip **Grade** pentru cursul indicat corespunzator studentului. 
-Daca exista, atunci se va seta nota de la examen pentru acel obiect, daca nu exista, se va crea un nou obiect Grade și se va adauga cursului.+Daca exista, atunci se va seta nota de la examen pentru acel obiect, daca nu exista, se va crea un nou obiect ​**Grade** și se va adauga cursului.
  
 <​note>​**Hint!** <​note>​**Hint!**
-Veti adauga metodele de care aveti nevoie in clasele utilizate. Exemple: +Veti adauga metodele de care aveti nevoie in clasele utilizate. ​ 
-In Catalog veti adauga o metoda public Course getCourse(String name), care intoarce obiectul Course corespunzator numelui trimis ca parametru. + 
-In Course o metoda addGrade(Grade );+Exemple: 
 +In **Catalog** veti adauga o metoda public ​**Course** **getCourse**(**String** name), care intoarce obiectul Course corespunzator numelui trimis ca parametru. 
 + 
 +In **Course** o metoda ​**addGrade**(**Grade** g);
 Etc. Etc.
 </​note>​ </​note>​
  
-<​note>​ Folositi pentru testare main-ul de la Factory! </​note>​  +<​note>​ Folositi pentru testare main-ul de la **Factory**! </​note>​  
- +<​hidden>​{{:​poo:​laboratoare:​arhiva_13.zip|Arhiva laborator}} 
-{{:​poo:​laboratoare:​arhiva_13.zip|Arhiva laborator}}+</​hidden>​
  
poo/laboratoare/13.1610903894.txt.gz · Last modified: 2021/01/17 19:18 by carmen.odubasteanu
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