Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:design-patterns [2024/11/20 12:36]
maria.enescu [Observer Pattern]
poo-ca-cd:laboratoare:design-patterns [2024/11/20 14:42] (current)
bogdan.rusu1707 [Exerciții]
Line 628: Line 628:
 **Task 1 - Observer, Strategy, Factory (8p) ** **Task 1 - Observer, Strategy, Factory (8p) **
  
-**Part 1. (4p) - Strategy, Factory**+**Part 1. (4p) - Strategy, Factory **
  
-În cadrul acestui exercițiu, dorim să implementăm un magazin, ce are disponibile mai multe modalități de plată pentru clienții săi (folosind un voucher, IBAN-ul sau un card pe care îl posedă).+În cadrul acestui exercițiu, dorim să implementăm un magazin, ce are disponibile mai multe modalități de plată pentru clienții săi:
  
-Cele 3 modalități de plată sunt reprezentate de clase ce implementează interfața PaymentStrategy. ​+   * folosind un voucher 
 +  *  IBAN-ul 
 +  *  un card pe care îl posedă 
 + 
 +Cele 3 modalități de plată sunt reprezentate de clase ce implementează interfața ​**PaymentStrategy**.
  
 Trebuie să implementați:​ Trebuie să implementați:​
  
-      ​Metoda ​pay din cadrul fiecărei metode de plată. +  * metoda **pay** din cadrul fiecărei metode de plată. 
-      Metoda ​getPaymentMethod,​ ce primește un client ca parametru și instanțiază o tranzacție folosind o anumită metodă de plată, aleasă random. ​ +  * metoda **getPaymentMethod**, ce primește un client ca parametru și instanțiază o tranzacție folosind o anumită metodă de plată, aleasă random.
- <​note tip> **HINT:** getPaymentMethod va fi folosită în cadrul unei metode ce trebuie implementată în cadrul părții de Observer </​note>​+
  
-  ​ 
-**Part 2. (4p) - Observer** 
  
-În acest context, ​subiectul (cel care este Observable) ​este clasa Person. Această clasă implementează interfața BalanceObserver ​(care este Observer-ul). Clasa Shop (ce joacă rol de Publisher, întrucât implementează interfața TransactionPublisherva avea rolul de a notifica un client când o tranzacție este efectuată.+**Part 2. (4p) - Observer ** 
 + 
 +În acest context, ​**subscriber-ul/​observer-ul** ​este clasa Person. Această clasă implementează interfața ​**BalanceObserver**. Clasa Shop, care este **subiectul/​publisher-ul** care trebuie să implementeze ​interfața ​**TransactionPublisher** va avea rolul de a **notifica** un client când o tranzacție este efectuată.
  
 Trebuie să implementați:​ Trebuie să implementați:​
-      ​*Motoda ​update din cadrul clasei Person, ce notifică faptul ​că un client are în cont  mai puțini Lei decât o anumită limită, specifică fiecărui client în parte, printr-un mesaj adecvat ("<nume> <prenume>, ramai fara bani, saracule!"). +  * metoda **update** din cadrul clasei ​**Person**, ce preia notificarea faptului ​că un client are în cont mai puțini Lei decât o anumită limită, specifică fiecărui client în parte, printr-un mesaj adecvat (”$nume$ $prenume$, ramai fara bani, saracule!); 
-      *Metoda ​payBy din cadrul clasei Person, ce întoarce valoarea de adevăr a reușitei efectuării unei plăți (dacă e posibil efectuează plata), iar în caz negativ afisează și un mesaj adecvat ("<nume> <prenume>, pleaca de aici, saracule!"). +  * metoda **payBy** din cadrul clasei Person, ce întoarce valoarea de adevăr a reușitei efectuării unei plăți (dacă e posibilefectuează plata), iar în caz negativ afisează și un mesaj adecvat (”$nume$ $prenume$, pleaca de aici, saracule!); 
-      *Metoda ​createTransaction din cadrul clasei Shop, ce verifică dacă trebuie notificată persoana cu ajutorul metodei update, în urma unei tranzacții. +  * metoda **createTransaction** din cadrul clasei ​**Shop**, ce verifică dacă trebuie notificată persoana cu ajutorul metodei ​**update**, în urma unei tranzacții.
-<note tip> **HINT:** trebuie folosită și metoda payBy </​note>​+
  
  
Line 655: Line 657:
 **Task 2 - Builder pattern (2p)** **Task 2 - Builder pattern (2p)**
  
-a) Scrieți câmpuri în skeletul clasei House pentru câteva facilități obligatorii în construcția unei case, spre exemplu: locația construcției,​ numărul de etaje, încălzire,​ camere, dar și unele opționale pe care le poate selecta sau nu clientul, cum ar fi electrocasnice,​ piscină, panouri solare, securitate etc. 
  
-Completați constructorul privatmetodele ​de get și metoda toString.+a) Examinați câmpurile din skeletul clasei **House** care includ câteva facilități obligatorii în construcția unei casespre exemplu: 
 + 
 +   * locația construcției 
 +  *    numărul ​de etaje 
 +  *    camere 
 +  *   unele **opționale** pe care le poate selecta sau nu clientul, cum ar fi: 
 +    * electrocasnice 
 +    *  piscină 
 +    *  panouri solare 
 +    *  securitate 
  
 +Completați constructorul public și metoda toString.
  
-b) În clasa de builder, completați câmpurile, constructorul și metodele de adăugare +b) În clasa **HouseBuilder**, completați câmpurile, constructorul și metodele de adăugare a facilităților opționale.
-a facilităților opționale.+
  
-c) Finalizați metoda build și testați funcționalitatea într-o clasă Main creată de voi, acoperind cazuri în care se construiește o casa doar cu facilitați obligatorii și altele adăugând și pe cele opționale.+c) Finalizați metoda build și decomentați codul din Main pentru a putea testa corectitudinea ​funcționalității.
  
 **Task 3 - Command pattern (8p)** **Task 3 - Command pattern (8p)**
Line 675: Line 686:
   * //Client// - entry-point-ul în program   * //Client// - entry-point-ul în program
  
-(4p) Implementați ​tipuri de comenzi, pentru următoarele acțiuni:+(4p) Implementați ​tipuri de comenzi, pentru următoarele acțiuni:
   * Draw rectangle - crează o DiagramComponent și o adaugă în DiagramCanvas   * Draw rectangle - crează o DiagramComponent și o adaugă în DiagramCanvas
   * Resize - modifică width și height al unei DiagramComponent pe baza unui procent dat   * Resize - modifică width și height al unei DiagramComponent pe baza unui procent dat
poo-ca-cd/laboratoare/design-patterns.1732098966.txt.gz · Last modified: 2024/11/20 12:36 by maria.enescu
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