This shows you the differences between two versions of the page.
|
poo-ca-cd:laboratoare:design-avansat-de-clase [2025/10/21 22:24] 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 oriunde, inclusiv 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 pachet, subclasă|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**n 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 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. | ||