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:21]
florian_luis.micu [Polimorfism datorită Metaspace + VTables]
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>​
  
Line 1059: 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 1065: 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>​
  
Line 1075: 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.1761074504.txt.gz · Last modified: 2025/10/21 22:21 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