Differences

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

Link to this comparison view

poo:breviare:breviar-03 [2025/10/16 12:23]
stefanel.turcu [Principii POO]
poo:breviare:breviar-03 [2025/10/16 12:26] (current)
stefanel.turcu [Extra: Tipuri speciale în Java: enum și record]
Line 397: Line 397:
  
 Un alt exemplu elocvent, pentru acest prinicpiu POO, este operatorul ''​+''​ care execută operații diferite în cotexte diferite. Un alt exemplu elocvent, pentru acest prinicpiu POO, este operatorul ''​+''​ care execută operații diferite în cotexte diferite.
 +
 +==== Extra: Tipuri speciale în Java: enum și record ====
 +
 +=== Ce este un enum? ===
 +
 +Un **enum** (de la *enumeration*) este un tip special de clasă care definește un set fix de constante.  ​
 +Este folosit atunci când o variabilă poate avea doar un număr limitat de valori posibile.
 +
 +**Exemplu:​**
 +
 +<code java>
 +public enum ZiSaptamana {
 +    LUNI, MARTI, MIERCURI, JOI, VINERI, SAMBATA, DUMINICA
 +}
 +
 +public class Program {
 +    public static void main(String[] args) {
 +        ZiSaptamana zi = ZiSaptamana.VINERI;​
 +
 +        // Poți folosi switch cu enum
 +        switch (zi) {
 +            case SAMBATA, DUMINICA -> System.out.println("​Weekend!"​);​
 +            default -> System.out.println("​Zi de lucru."​);​
 +        }
 +    }
 +}
 +</​code>​
 +
 +**Observații:​**
 +  * Valorile //LUNI//, //MARTI//, etc. sunt constante (publice, statice și imutabile).
 +  * Se folosesc frecvent pentru a face codul mai clar și mai sigur (în locul valorilor numerice sau string).
 +
 +=== Ce este un record? ===
 +
 +Un **record** este o formă modernă de clasă introdusă în Java 14 (stabilă din Java 16),  ​
 +care servește pentru a defini **obiecte imutabile de tip „data class”**, adică structuri care doar rețin date.
 +
 +**Exemplu simplu:**
 +
 +<code java>
 +public record Punct(int x, int y) { }
 +
 +public class Main {
 +    public static void main(String[] args) {
 +        Punct p1 = new Punct(3, 5);
 +        System.out.println(p1); ​         // => Punct[x=3, y=5]
 +        System.out.println(p1.x()); ​     // accesează câmpul x
 +    }
 +}
 +</​code>​
 +
 +**Ce oferă automat un record:**
 +  * constructor pentru toți parametrii (`new Punct(int x, int y)`)
 +  * metode //x()// și //y()// pentru acces la date (getters)
 +  * metode //​equals()//,​ //​hashCode()//​ și //​toString()//​ generate automat
 +  * toate câmpurile sunt //private// și //final// → obiectul este imutabil
 +
 +**Avantaj:​**  ​
 +**record** reduce semnificativ codul boilerplate comparativ cu o clasă clasică.
 +
 +**Exemplu echivalent (clasă obișnuită):​**
 +
 +<code java>
 +public class PunctClasic {
 +    private final int x;
 +    private final int y;
 +
 +    public PunctClasic(int x, int y) {
 +        this.x = x;
 +        this.y = y;
 +    }
 +
 +    public int getX() { return x; }
 +    public int getY() { return y; }
 +
 +    @Override
 +    public String toString() {
 +        return "​Punct[x="​ + x + ", y=" + y + "​]";​
 +    }
 +}
 +</​code>​
 +
 +**Când să folosești un record:**
 +  * Când vrei un obiect simplu, imutabil, care doar conține date.
 +  * Când nu ai nevoie de moștenire (un //record// nu poate extinde altă clasă).
  
  
  
poo/breviare/breviar-03.1760606611.txt.gz · Last modified: 2025/10/16 12:23 by stefanel.turcu
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