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:19]
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: Î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 +   ​* ​folosind un voucher 
-IBAN-ul +  ​*  ​IBAN-ul 
-un card pe care îl posedă+  ​*  ​un card pe care îl posedă
  
-Cele 3 modalități de plată sunt reprezentate de clase ce implementează interfața ​`PaymentStrategy`.+Cele 3 modalități de plată sunt reprezentate de clase ce implementează interfața ​**PaymentStrategy**.
  
 Trebuie să implementați:​ Trebuie să implementați:​
  
-Metoda `paydin 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.
  
  
-**Part 2. (4p) - `Observer**+**Part 2. (4p) - Observer **
  
-În acest context, ​`subscriber-ul/​observer-uleste clasa Person. Această clasă implementează interfața ​`BalanceObserver`. Clasa Shop, care este `subiectul/​publisher-ulcare trebuie să implementeze interfața ​`TransactionPublisherva avea rolul de a `notificaun 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:​
- +  * 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 `updatedin 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 posibilefectuează plata), iar în caz negativ afisează și un mesaj adecvat (”$nume$ $prenume$, pleaca de aici, saracule!”); 
-Metoda `payBydin 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 **createTransaction** din cadrul clasei ​**Shop**, ce verifică dacă trebuie notificată persoana cu ajutorul metodei ​**update**, în urma unei tranzacții.
-Metoda `createTransactiondin cadrul clasei Shop, ce verifică dacă trebuie notificată persoana cu ajutorul metodei ​`update`, în urma unei tranzacții.+
  
  
Line 658: 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 688: 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.1732105146.txt.gz · Last modified: 2024/11/20 14:19 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