Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:abstractizare-clase-speciale-si-restrictii [2025/10/27 01:20]
florian_luis.micu [Task 1 (2p)]
poo-ca-cd:laboratoare:abstractizare-clase-speciale-si-restrictii [2025/11/12 11:31] (current)
florian_luis.micu [Clase și metode abstracte]
Line 3: Line 3:
   * Autori: [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]], [[stefancocioran@gmail.com | Ștefan Cocioran ]]   * Autori: [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]], [[stefancocioran@gmail.com | Ștefan Cocioran ]]
   * Data publicării:​ 27.10.2025   * Data publicării:​ 27.10.2025
-  * Data ultimei modificări: ​27.10.2025+  * Data ultimei modificări: ​04.11.2025 
 +    * clarificări și expandarea conținutului despre DTO-uri. 
 +    * ștergerea notiței legată de contest (numele problemei a fost actualizat pe Code Devmind). 
  
 =====Obiective===== =====Obiective=====
Line 148: Line 151:
  
 <code java> <code java>
-Vehicle vehicle ​= new Sedan(); +Sedan sedan = new Sedan(); 
-vehicle.startEngine();​ // Output: Car engine started! +sedan.startEngine();​ // Output: Car engine started! 
-vehicle.openTrunk();​ // Output: Trunk opened in the back of the car!+sedan.openTrunk();​ // Output: Trunk opened in the back of the car!
 </​code>​ </​code>​
  
Line 539: Line 542:
 } }
 </​code>​ </​code>​
 +
 +<note tip>
 +Conform laboratoarelor trecute, vă reamintim că puteți crea de asemenea și **constante globale** dacă faceți un câmp ''​static final''​.
 +</​note>​
  
 De asemenea, putem marca **parametrii** unei metode ca fiind ''​final''​ pentru a indica faptul că aceștia **nu pot fi schimbați în corpul unei metode**: De asemenea, putem marca **parametrii** unei metode ca fiind ''​final''​ pentru a indica faptul că aceștia **nu pot fi schimbați în corpul unei metode**:
Line 828: Line 835:
  
 <note tip> <note tip>
-Observă ​că getteri există, dar nu se numesc ''​getName()'',​ ci exact ca proprietatea''​name()''​.+Observați ​că getteri există, dar nu se numesc ''​getName()'',​ ci exact ca proprietatea ​definită în clasă (ex. ''​name()''​).
 </​note>​ </​note>​
  
Line 889: Line 896:
  
 <note tip> <note tip>
-  ​* DTO (Data Transfer Object) este un obiect folosit pentru **transportul datelor** între ​straturi ​ale unei aplicații sau între aplicații ​diferite, **fără logică de business**. ​De exempludacă am vrea să transmitem tot obiectul ''​User''​ dintr-o aplicație bancară ​am putea transmite inclusiv date confidențiale despre acesta (CNPadresă etc.). Pentru ​transmite doar datele necesareputem crea o clasă ''​UserDTO''​ care conține doar câmpurile ​relevante ​pentru ​transfer+Veți învăța despre **Spring** când veți face web back-end development. 
-  * Veți învăța despre ​**Spring** ​când veți face web back-end development.+</​note>​ 
 + 
 +===Ce sunt DTO-urile?​=== 
 + 
 +**DTO (Data Transfer Object)** este un obiect folosit pentru ​**transfera** date între ​diferite părți ​ale unei aplicații sau între aplicații, **fără ​a conține ​logică de business**. ​Scopul lui este să transporte doar informațiile necesareîntr-o formă **sigură** și **optimă**. 
 + 
 +De exemplu, într-o aplicație bancară ​avem clasa User, care ar putea conține informații sensibile precum: 
 +  * nume 
 +  * email 
 +  * CNP 
 +  * adresă 
 +  * sold cont 
 +  * roluri ​etc. 
 + 
 +Dacă vrem să trimitem date despre utilizator către interfațweb sau către alt serviciunu vrem să expunem date confidențiale precum CNP-ul sau adresa completă. În acest caz, creăm un ''​UserDTO''​, o clasă separată ​care conține ​**doar** informațiile necesare transferului,​ de exemplu: 
 + 
 +<code java UserDTO.java>​ 
 +public class UserDTO { 
 +    private String name; 
 +    private String email; 
 +
 +</​code>​ 
 + 
 +Astfel: 
 +  * Protejăm datele sensibile 
 +  * Controlăm ce date sunt trimise 
 +  * Simplificăm transferul de date 
 +  * Evităm expunerea logicii interne a aplicației 
 + 
 +==Conversia dintr-o clasă în DTO== 
 + 
 +Ca să convertim un obiect dintr-o clasă normală (**model/​entity**) într-un **DTO**, există mai multe abordări. În principiu luăm doar câmpurile ​de care avem nevoie și le copiem în obiectul DTO. 
 + 
 +Există mai multe metode ​pentru ​a face această copiere, însă cea recomandată este prin folosirea unui constructor:​ 
 + 
 +<code java> 
 +public class UserDTO { 
 +    private String name; 
 +    private String email; 
 + 
 +    public UserDTO(User user) { 
 +        this.name = user.getName();​ 
 +        this.email = user.getEmail();​ 
 +    } 
 +
 +</​code>​ 
 + 
 +Totodată, puteți rescrie codul de mai sus folosind ''​record''​ astfel: 
 + 
 +<code java> 
 +public record UserDTO(String name, String email) {} 
 +</​code>​ 
 + 
 +<note tip> 
 +  * Când veți începe să lucrați cu framework-ul ​**Spring/Spring Boot**veți întâlni termenii **model** sau **entity**, care reprezintă de obicei **obiectele stocate în baza de date**. Pentru moment este suficient să rețineți că aceste clase descriu obiecte reale din aplicație, cu **atribute** și **comportament**. 
 +  * În laboratoarele următoare vom învăța despre **Builder**,​ fiind un alt concept care ne poate ajuta în crearea DTO-urilor.
 </​note>​ </​note>​
  
Line 946: Line 1008:
   * Exercițiile vor fi făcute pe platforma [[https://​code.devmind.ro/​|Devmind Code]]. Găsiți exercițiile din acest laborator în **contestul aferent**.   * Exercițiile vor fi făcute pe platforma [[https://​code.devmind.ro/​|Devmind Code]]. Găsiți exercițiile din acest laborator în **contestul aferent**.
   * Vă recomandăm să copiați scheletul și să faceți exercițiile **mai întâi** în IntelliJ, deoarece acolo aveți acces la o serie de **instrumente** specifice unui IDE. După ce ați terminat exercițiile puteți să le **copiați** pe Devmind Code.   * Vă recomandăm să copiați scheletul și să faceți exercițiile **mai întâi** în IntelliJ, deoarece acolo aveți acces la o serie de **instrumente** specifice unui IDE. După ce ați terminat exercițiile puteți să le **copiați** pe Devmind Code.
 +</​note>​
 +
 +<note note>
 +În contest veți observa că problema se cheamă //​Problem-LAB05-POO//,​ însă nu este o problemă. Vom redenumi problema cât de curând.
 </​note>​ </​note>​
  
poo-ca-cd/laboratoare/abstractizare-clase-speciale-si-restrictii.1761520814.txt.gz · Last modified: 2025/10/27 01:20 by florian_luis.micu
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