Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:design-avansat-de-clase [2025/10/21 22:20]
florian_luis.micu [Ce este VTable și cum ajută la overriding?]
poo-ca-cd:laboratoare:design-avansat-de-clase [2025/10/25 19:50] (current)
florian_luis.micu [Laboratorul 3: Design Avansat de Clase]
Line 3: Line 3:
   * Autori: [[stefancocioran@gmail.com | Ștefan Cocioran ]], [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]]   * Autori: [[stefancocioran@gmail.com | Ștefan Cocioran ]], [[miculuis1@gmail.com | Florian-Luis Micu ]], [[sorinabuf@gmail.com | Sorina-Anamaria Buf ]]
   * Data publicării:​ 20.10.2025   * Data publicării:​ 20.10.2025
-  * Data ultimei modificări: ​20.10.2025+  * Data ultimei modificări: ​25.10.2025 
 +    * clarificări pentru gestionarea memoriei statice și VTables.  
 +    * schimbat tipul de return în Lazy Evaluation. 
 +    * clarificări pentru specificatorii de acces în contextul moștenirii.
  
 =====Obiective===== =====Obiective=====
Line 72: Line 75:
    ​private Engine engine;    ​private Engine engine;
        
-   ​public ​void initializeEngine() {+   ​public ​Engine ​initializeEngine() {
       if (engine == null) {       if (engine == null) {
          ​engine = new Engine();          ​engine = new Engine();
Line 286: Line 289:
 ===Blocarea accesului la membrii folosind specificatori de acces=== ===Blocarea accesului la membrii folosind specificatori de acces===
  
-Reamintim **specificatorii de acces** prezentați în laboratorul trecut în contextul ​**moștenirii membrilor**:​ +Reamintim **specificatorii de acces** prezentați în laboratorul trecut ​**în contextul moștenirii membrilor**:​ 
-  * **public**: câmpul/​metoda poate fi accesată de oriundeinclusiv din clasele derivate. + 
-  * **protected/​default**:​ câmpul/​metoda poate fi accesată în clasa proprie sau în clasele derivate. +^ ^Default^Private^Protected^Public^ 
-  * **private**:​ câmpul/​metoda poate fi accesată doar în clasa proprie.+^Aceeași clasă|Da|Da|Da|Da| 
 +^Același pachetsubclasă|Da|Nu|Da|Da| 
 +^Același pachet, non-subclasă|Da|Nu|Da|Da| 
 +^Pachet diferit, subclasă|Nu|Nu|Da|Da| 
 +^Pachet diferit, non-subclasă|Nu|Nu|Nu|Da|
  
 ===Moștenirea constructorilor=== ===Moștenirea constructorilor===
Line 423: Line 430:
 | Expunerea metodei ​        | doar obiectul conținut ​               | toate metodele părintelui ​                 | | Expunerea metodei ​        | doar obiectul conținut ​               | toate metodele părintelui ​                 |
 | Control asupra obiectului | containerul folosește obiectul extern | copilul extinde comportamentele părintelui | | Control asupra obiectului | containerul folosește obiectul extern | copilul extinde comportamentele părintelui |
-| Exemplu ​                  | Car **has a**n Engine ​                 | Dog **is a** Animal ​                       |+| Exemplu ​                  | Car **has a**n Engine ​                 | Dog **is a**Animal ​                       |
  
 În general, întrebarea ''​has-a''​ sau ''​is-a''​ este suficientă pentru a determina tipul de relație, însă există obiecte pentru care relația nu poate fi stabilită ușor folosind această întrebare. ​ În general, întrebarea ''​has-a''​ sau ''​is-a''​ este suficientă pentru a determina tipul de relație, însă există obiecte pentru care relația nu poate fi stabilită ușor folosind această întrebare. ​
Line 1023: Line 1030:
  
 <note tip> <note tip>
-VTable există doar pentru **metode virtuale (non-static)**. Metodele ​static ​nu sunt incluse în VTable pentru a nu folosi mecanismul de suprascriere.+VTable există doar pentru **metode virtuale (non-static)**. Metodele ​statice ​nu sunt incluse în VTable pentru a nu folosi mecanismul de suprascriere.
 </​note>​ </​note>​
  
-===De ce metodele ​static ​nu pot fi suprascrise===+ 
 +====Legătura cu Upcasting & Downcasting==== 
 + 
 +^ Concept ^ Ce face ^ Legătura cu memoria ^ 
 +| Upcasting (safe) | tratezi Dog ca Animal | DOAR schimbă tipul referinței,​ obiectul rămâne în Heap, legătura cu VTable se păstrează | 
 +| Downcasting (risky) | tratezi Animal ca Dog | JVM verifică în Metaspace dacă tipul real are VTable pentru ''​Dog''​ | 
 + 
 +====Polimorfism datorită Metaspace + VTables==== 
 + 
 +<code java>  
 +Animal a = new Dog(); // upcast a.makeSound();​ // JVM folosește vtable din Metaspace → Dog.makeSound 
 + 
 +Animal.info();​ // apelează Animal.info() din Metaspace 
 +Dog.info(); // apelează Dog.info() din Metaspace 
 +</​code>​ 
 + 
 +====De ce metodele ​statice ​nu pot fi suprascrise====
  
 ^ Caracteristică ​    ^ Metode de instanță ^ Metode ''​static'' ​                    ^ ^ Caracteristică ​    ^ Metode de instanță ^ Metode ''​static'' ​                    ^
Line 1043: Line 1066:
 ===Rolul constant Pool=== ===Rolul constant Pool===
  
-Apelurile către metode ''​static''​ sunt rezolvate folosind **Constant Pool**, o zonă de memorie asociată fiecărei clase care conține **referințe simbolice** către metode, câmpuri și clase.+Apelurile către metode ''​static''​ sunt rezolvate folosind **Constant Pool**, o zonă de memorie ​care se află tot în Metaspace și care este asociată fiecărei clase care conține **referințe simbolice** către metode, câmpuri și clase.
  
   * Intrările din **Constant Pool** sunt folosite pentru a localiza metodele ''​static''​ în Metaspace, unde este stocată logica clasei.   * Intrările din **Constant Pool** sunt folosite pentru a localiza metodele ''​static''​ în Metaspace, unde este stocată logica clasei.
Line 1049: Line 1072:
  
 <note tip> <note tip>
-  * Constant Pool-ul optimizează memoria adresând duplicarea constantelor și a String-urilor (vom vedea în următoarele laboratoare). Totodată, această optimizare ajută și la performanță. +  * Constant Pool-ul ​**optimizează memoria** adresând duplicarea constantelor și a String-urilor (mai multe despre String ​în următoarele laboratoare). Totodată, această optimizare ajută și la **performanță**
-  * Ideal am stoca cât mai multe informații în Constant Pool, însă putem stoca doar constante (variabile constante, nume de clasă, nume de metodă, semnături, referințe simbolice etc.). +  * Idealam stoca cât mai multe informații în Constant Pool, însă putem stoca doar **constante** (variabile constante, nume de clasă, nume de metodă, semnături, referințe simbolice etc.). 
-  * Memoria statică efectivă este stocată în Metaspace, dar referința simbolică folosită de ''​invokestatic''​ este stocată în Constant Pool.+  * Memoria statică efectivă este stocată în **Metaspace**, dar referința simbolică folosită de ''​invokestatic''​ este stocată în **Constant Pool**.
 </​note>​ </​note>​
- 
-====Legătura cu Upcasting & Downcasting==== 
- 
-^ Concept ^ Ce face ^ Legătura cu memoria ^ 
-| Upcasting (safe) | tratezi Dog ca Animal | DOAR schimbă tipul referinței,​ obiectul rămâne în Heap, legătura cu VTable se păstrează | 
-| Downcasting (risky) | tratezi Animal ca Dog | JVM verifică în Metaspace dacă tipul real are VTable pentru ''​Dog''​ | 
- 
-====Polimorfism datorită Metaspace + VTables==== 
- 
-<code java> ​ 
-Animal a = new Dog(); // upcast a.makeSound();​ // JVM folosește vtable din Metaspace → Dog.makeSound 
- 
-Animal.info();​ // apelează Animal.info() din Metaspace 
-Dog.info(); // apelează Dog.info() din Metaspace 
-</​code>​ 
  
 ====Rezumat al memoriei în Java==== ====Rezumat al memoriei în Java====
Line 1074: Line 1082:
   * Stack = ține referințele către ele.   * Stack = ține referințele către ele.
   * Metaspace = știe ce este fiecare obiect, ce metode are, inclusiv variabile și metode statice, prin vtables.   * Metaspace = știe ce este fiecare obiect, ce metode are, inclusiv variabile și metode statice, prin vtables.
 +  * Constant Pool = stocat tot în Metaspace; conține literaluri, referințe simbolice către clase, metode și câmpuri, folosit de JVM pentru rezoluție dinamică și apeluri de metode.
   * Upcasting-ul funcționează fără probleme pentru că JVM știe din Metaspace ce este obiectul real.   * Upcasting-ul funcționează fără probleme pentru că JVM știe din Metaspace ce este obiectul real.
   * Downcasting-ul se verifică la runtime tot cu ajutorul informațiilor din Metaspace.   * Downcasting-ul se verifică la runtime tot cu ajutorul informațiilor din Metaspace.
poo-ca-cd/laboratoare/design-avansat-de-clase.1761074444.txt.gz · Last modified: 2025/10/21 22: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