User Tools

Site Tools


Problem constructing authldap
laboratoare:static-final
Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
laboratoare:static-final [2019/10/19 21:08]
Adriana Draghici
laboratoare:static-final [2019/10/20 14:51]
Radu Matei [Exerciții]
Line 1: Line 1:
  
-= Static și final =+= Static și final; Singleton Design Pattern ​=
  
 == Obiective == == Obiective ==
Line 244: Line 244:
 * pentru obiecte de tip //​Factory//​. * pentru obiecte de tip //​Factory//​.
  
-Exemple din API-ul Java: +Exemple din API-ul Java: [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Runtime.html | java.lang.Runtime]][[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​awt/​Toolkit.html | java.awt.Toolkit]]
-[[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Runtime.html | java.lang.Runtime]] +
-[[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​awt/​Toolkit.html | java.awt.Toolkit]]+
  
 Din punct de vedere al design-ului și testarii unei aplicații de multe ori se evită folosirea acestui pattern, în test-driven development fiind considerat un **//​anti-pattern//​**. A avea un obiect Singleton a carei referință o folosim peste tot prin aplicație introduce multe dependențe între clase și îngreunează testarea individuală a acestora. ​ Din punct de vedere al design-ului și testarii unei aplicații de multe ori se evită folosirea acestui pattern, în test-driven development fiind considerat un **//​anti-pattern//​**. A avea un obiect Singleton a carei referință o folosim peste tot prin aplicație introduce multe dependențe între clase și îngreunează testarea individuală a acestora. ​
Line 297: Line 295:
     * o constantă MAGIC_NUMBER având orice valoare doriți ​     * o constantă MAGIC_NUMBER având orice valoare doriți ​
     * un String constant MAGIC_STRING,​ lung de minim 20 de caractere, generat random     * un String constant MAGIC_STRING,​ lung de minim 20 de caractere, generat random
-    * un constructor care primește: un String numit ''​firstName'',​ un String numit ''​lastName''​ și un int numit ''​age'' ​+    * un constructor care primește: un String numit ''​name''​
     * o metodă ''​getPassword()''​ care va returna parola ​     * o metodă ''​getPassword()''​ care va returna parola ​
-      * parola se construiește concatenand următoarele șiruri: ​ +      * parola se construiește concatenand următoarele șiruri:
-        * șirul format din ultimele ''​(age % 3)''​ litere din firstName+
         * un șir random de lungime MAGIC_NUMBER,​ generat cu ''​RandomStringGenerator''​ și cu un alfabet obținut din 10 caractere obținute random din MAGIC_STRING         * un șir random de lungime MAGIC_NUMBER,​ generat cu ''​RandomStringGenerator''​ și cu un alfabet obținut din 10 caractere obținute random din MAGIC_STRING
-        * și șirul format prin conversia la String a numărului (age + lungimea ​lui lastName).+        * și șirul format prin conversia la String a lungimii ​lui name + un numar intreg generat random din intervalul [0,100]
     * Pentru subșiruri și alte metode utile consultați documentația clasei [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​String.html | String]]     * Pentru subșiruri și alte metode utile consultați documentația clasei [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​String.html | String]]
-  - (**3p**) Modificati implementarea clasei PasswordMaker astfel incat +  - (**3p**) Modificati implementarea clasei PasswordMaker astfel incat sa respecte conceptul de **Singleton pattern** (sa permita instantierea unei singur obiect) 
-    * Sa respecte conceptul de Singleton pattern (sa permita instantierea unei singur obiect) +        * Pornind de la exemplul de Singleton ​din textul laboratorului implementati o versiune care urmeaza principiul ​de Eager Initialization (singura instanta a clasei este creata la pornirea aplicatiei, indiferent daca este necesar sau nu) 
-        * Implementati ​Singleton ​pattern folosind conceptul ​de Eager Initialization (singura instanta a clasei este creata la pornirea aplicatiei, indiferent daca este necesar sau nu) +        * Implementati o versiune ​de Singleton in care variabila ''​instance'' ​este initializata intr-un bloc static 
-        * Modificati implementarea anterioara urmand conceptul ​de Lazy Initialization (singura instanta a clasei este creata doar atunci cand este nevoie de ea+        * Adaugati un contor care sa numere de cate ori a fost accesata metoda ''​getInstance()''​. E nevoie ​ca acest contor sa fie static? 
-  - (**4p**) Să se implementeze o clasă ''​MyImmutableArray''​ care sa contina:+        * //​Tema ​de gandire:// Ce se va intampla daca folosim conceptul de Singleton pattern intr-un program paralelizat,​ care ruleaza pe mai multe linii de executie (thread-uri). Ce probleme ar putea sa apara? 
 +  - (**3p**) Să se implementeze o clasă ''​MyImmutableArray''​ care sa contina:
     * un field de ''​ArrayList<​Integer>​ immutableArray;''​ neinitializat in prima faza     * un field de ''​ArrayList<​Integer>​ immutableArray;''​ neinitializat in prima faza
     * un constructor care primeste un ArrayList<​Integer>​ si copiaza toate elementele din acel array in ''​immutableArray''​     * un constructor care primeste un ArrayList<​Integer>​ si copiaza toate elementele din acel array in ''​immutableArray''​
laboratoare/static-final.txt · Last modified: 2019/10/23 12:19 by Radu Matei