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 14:10]
bogdan.rusu1707 [Exerciții]
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 **
-**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ă.+Î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)**
  
-`Builder pattern` (2p) 
  
-a) Examinați câmpurile din skeletul clasei ​`Housecare includ câteva facilități obligatorii în construcția unei case, spre exemplu:+a) Examinați câmpurile din skeletul clasei ​**House** care includ câteva facilități obligatorii în construcția unei case, spre exemplu:
  
-   ​* ​`locația construcției` +   * locația construcției 
-  *    ​`numărul de etaje` +  *    numărul de etaje 
-  *    ​`camere +  *    camere 
-  *   ​unele ​`opționalepe care le poate selecta sau nu clientul, cum ar fi: +  *   ​unele ​**opționale** pe care le poate selecta sau nu clientul, cum ar fi: 
-    * `electrocasnice` +    * electrocasnice 
-    *  ​`piscină` +    *  piscină 
-    *  ​`panouri solare` +    *  panouri solare 
-    *  ​`securitate+    *  securitate
  
  
 Completați constructorul public și metoda toString. Completați constructorul public și metoda toString.
  
-b) În clasa de builder, completați câmpurile, constructorul și metodele de adăugare a facilităților opționale.+b) În clasa **HouseBuilder**, completați câmpurile, constructorul și metodele de adăugare a facilităților opționale.
  
 c) Finalizați metoda build și decomentați codul din Main pentru a putea testa corectitudinea funcționalității. c) Finalizați metoda build și decomentați codul din Main pentru a putea testa corectitudinea funcționalității.
Line 685: 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.1732104644.txt.gz · Last modified: 2024/11/20 14:10 by bogdan.rusu1707
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