Differences

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

Link to this comparison view

poo-is-ab:laboratoare:03 [2025/10/11 16:16]
razvan.cristea0106
poo-is-ab:laboratoare:03 [2025/12/07 13:14] (current)
razvan.cristea0106 [Programarea Orientată pe Obiecte (POO)]
Line 191: Line 191:
 </​code>​ </​code>​
  
-<note important>​Un obiect nu este altceva decât un reprezentant al clasei, care respectă structura acesteia, adică deține toate proprietățile pe care clasa le pune la dispoziție. Pentru a înțelege ​puteți ​face analogia cu oamenii. Toți oamenii au plămâni, aceasta fiind o caracteristică comună speciei umane. Diferențele pot să apară la starea de sănătate a plămânilor,​ deoarece, în general, persoanele mai tinere au plămâni mai sănătoși comparativ cu cei ai persoanelor vârstnice. Starea de sănătate a plămânilor poate varia și în funcție de factori precum stilul de viață, expunerea la poluare sau fumat.</​note>​+<note important>​Un ​**obiect** nu este altceva decât un **reprezentant** al clasei, care respectă structura acesteia, adică deține ​**toate proprietățile** pe care clasa le pune la dispoziție. Pentru a înțelege ​mai bine putem face analogia cu oamenii. Toți oamenii au **plămâni**, aceasta fiind o **caracteristică comună** speciei umane. Diferențele pot să apară la **starea de sănătate** a plămânilor,​ deoarece, în general, persoanele mai **tinere** au plămâni ​**mai sănătoși** comparativ cu cei ai persoanelor ​**vârstnice**. Starea de sănătate a plămânilor poate varia și în funcție de **factori** precum ​**stilul de viață****expunerea la poluare** sau **fumat**.</​note>​
  
 Dacă vom dori să accesăm membrii clasei **Brad** direct din funcția **main** vom primi o eroare de compilare, deoarece membrii sunt **inaccesibili**. Dacă vom dori să accesăm membrii clasei **Brad** direct din funcția **main** vom primi o eroare de compilare, deoarece membrii sunt **inaccesibili**.
Line 243: Line 243:
 </​code>​ </​code>​
  
-<note warning>​Acest lucru însă **nu** este o variantă indicată, deoarece **am încălcat principiul încapsulării datelor** și în plus, acum oricine poate modifica din exterior membrii clasei. După cum se poate observa, clasa **Brad** scrisă în această manieră se comportă exact ca o structură. Diferența între cele 2 (struct și class) constă în faptul că într-o structură totul este marcat cu **public** by default în timp ce o clasă are membrii by default marcați cu **private**. Vom menționa mai târziu cum putem respecta principiul încaspulării datelor pentru clasa **Brad** când vom discuta despre funcții membre (metode).</​note>​+<note warning>​Acest lucru însă **nu** este o variantă indicată, deoarece **am încălcat principiul încapsulării datelor** și în plus, acum oricine poate modifica din exterior membrii clasei. După cum se poate observa, clasa **Brad** scrisă în această manieră se comportă exact ca o **structură**. Diferența între cele 2 (**struct** și **class**) constă în faptul că într-o structură ​**totul** este marcat cu **public** by default în timp ce o clasă are membrii by default marcați cu **private**. Vom menționa mai târziu cum putem respecta principiul încaspulării datelor pentru clasa **Brad** când vom discuta despre ​**funcții membre** (**metode**).</​note>​
  
 == Moștenirea == == Moștenirea ==
Line 249: Line 249:
 Moștenirea (**Inheritance**) permite unei clase să **preia** proprietățile și comportamentele unei alte clase, oferind astfel posibilitatea reutilizării codului. În același timp, **clasa derivată (clasa moștenitoare)** poate adăuga funcționalități specifice pe care clasa de bază nu le are, extinzând astfel comportamentul acesteia și adaptându-l la nevoile proprii. ​ Moștenirea (**Inheritance**) permite unei clase să **preia** proprietățile și comportamentele unei alte clase, oferind astfel posibilitatea reutilizării codului. În același timp, **clasa derivată (clasa moștenitoare)** poate adăuga funcționalități specifice pe care clasa de bază nu le are, extinzând astfel comportamentul acesteia și adaptându-l la nevoile proprii. ​
  
-<​note>​Ca și exemplu putem lua omul care este un mamifer. Omul la fel ca toate mamiferele are plămâni, dar spre deosebire de alte animale din categoria mamiferelor acesta are o postură bipedă. Vom detalia mai multe despre moștenire peste câteva laboratoare și tot atunci vom vorbi mai mult despre specificatorul de acces **protected**.</​note>​+<​note>​Ca și exemplu putem lua ***omul** care este un **mamifer**. Omul la fel ca toate mamiferele are **plămâni**, dar spre deosebire de alte animale din categoria mamiferelor acesta are o **postură bipedă**. Vom detalia mai multe despre ​**moștenire** peste câteva laboratoare și tot atunci vom vorbi mai mult despre specificatorul de acces **protected**.</​note>​
  
 == Polimorfismul == == Polimorfismul ==
Line 310: Line 310:
 == Constructorii == == Constructorii ==
  
-Așa cum le spune și numele această categorie de metode se ocupă de **construirea (inițializarea) obiectelor**.+Așa cum le spune și numele această categorie de metode se ocupă de **construirea (inițializarea) obiectelor ​(instanțelor clasei)**.
  
 Constructorii au o serie de trăsături care îi fac pe aceștia foarte ușor de recunoscut după cum urmează: Constructorii au o serie de trăsături care îi fac pe aceștia foarte ușor de recunoscut după cum urmează:
Line 399: Line 399:
     Brad(const float& inaltime); // constructor cu un parametru     Brad(const float& inaltime); // constructor cu un parametru
  
-    Brad(const int& vechime, const float& inaltime, const double& pret);+    Brad(const int& vechime, const float& inaltime, const double& pret); ​// constructor cu trei parametri
 }; };
  
Line 433: Line 433:
 Pentru a putea soluționa problema de mai sus trebuie să introducem un nou keyword specific **POO** pe care îl vom întâlni în aproape toate limbajele de programare care suportă paradigma **OO** și anume cuvântul cheie **this**. Pentru a putea soluționa problema de mai sus trebuie să introducem un nou keyword specific **POO** pe care îl vom întâlni în aproape toate limbajele de programare care suportă paradigma **OO** și anume cuvântul cheie **this**.
  
-În C++ **this** este un **pointer** pe care **toate funcțiile membre** îl primesc ca parametru pe **prima poziție**. ​În C++ acest pointer **nu** este vizibil, **dar asta nu înseamnă că nu există**, în lista de parametri a metodei, dar în limbajul Python acesta este prezent și poartă denumirea de **self** și obligatoriu trebuie pus de către **programator** pe **prima poziție** în lista de parametri a fiecărei **funcții membre** dintr-o clasă.+În C++ **this** este un **pointer** pe care **toate funcțiile membre** îl primesc ca parametru pe **prima poziție**. ​Deși poate părea neclar în C++ acest pointer **nu** este vizibil, **dar asta nu înseamnă că nu există**, în lista de parametri a metodei, dar în limbajul Python acesta este prezent și poartă denumirea de **self** și obligatoriu trebuie pus de către **programator** pe **prima poziție** în lista de parametri a fiecărei **funcții membre** dintr-o clasă.
  
 Pointerul **this** indică **adresa obiectului curent** și are rolul de a **rezolva** problemele de ambiguitate între **membrii clasei** și **parametrii metodelor**. Acesta este utilizat pentru a **diferenția** în mod clar variabilele locale de câmpurile obiectului, permițând atribuirea **corectă** a valorilor parametrilor metodelor **membrilor interni** ai obiectului. Pointerul **this** indică **adresa obiectului curent** și are rolul de a **rezolva** problemele de ambiguitate între **membrii clasei** și **parametrii metodelor**. Acesta este utilizat pentru a **diferenția** în mod clar variabilele locale de câmpurile obiectului, permițând atribuirea **corectă** a valorilor parametrilor metodelor **membrilor interni** ai obiectului.
Line 440: Line 440:
  
 <code cpp> <code cpp>
-// Brad::​Brad(Brad* this, const float& inaltime) -> asa arata de fapt aceasta functie la compilare+// Brad::​Brad(Brad* this, const float& inaltime) -> asa arata de fapt aceasta ​metoda (functie ​membra) ​la compilare
 Brad::​Brad(const float& inaltime) Brad::​Brad(const float& inaltime)
 { {
Line 471: Line 471:
 }; };
  
-// Brad::​Brad(Brad* this) - asa arata la compilare+// Brad::​Brad(Brad* this) -asa arata la compilare
 Brad::​Brad() Brad::​Brad()
 { {
Line 479: Line 479:
 } }
  
-// Brad::​Brad(Brad* this, const float& inaltime) - asa arata la compilare+// Brad::​Brad(Brad* this, const float& inaltime) -asa arata la compilare
 Brad::​Brad(const float& inaltime) Brad::​Brad(const float& inaltime)
 { {
Line 487: Line 487:
 } }
  
-// Brad::​Brad(Brad* this, const int& vechime, const float& inaltime, const double& pret) - asa arata la compilare+// Brad::​Brad(Brad* this, const int& vechime, const float& inaltime, const double& pret) -asa arata la compilare
 Brad::​Brad(const int& vechime, const float& inaltime, const double& pret) Brad::​Brad(const int& vechime, const float& inaltime, const double& pret)
 { {
Line 525: Line 525:
     Brad(const int& vechime, const float& inaltime, const double& pret);     Brad(const int& vechime, const float& inaltime, const double& pret);
  
-    int getVechime() const; // metoda la compilare arata asaint getVechime(const Brad* this);+    int getVechime() const; // metoda la compilare arata asa -> int getVechime(const Brad* this);
     float getInaltime() const;     float getInaltime() const;
     double getPret() const;     double getPret() const;
  
-    void setVechime(const int& vechime); // metoda la compilare arata asavoid setVechime(Brad* this, const int& vechime);+    void setVechime(const int& vechime); // metoda la compilare arata asa -> void setVechime(Brad* this, const int& vechime);
     void setInaltime(const float& inaltime);     void setInaltime(const float& inaltime);
     void setPret(const double& pret);     void setPret(const double& pret);
poo-is-ab/laboratoare/03.1760188563.txt.gz · Last modified: 2025/10/11 16:16 by razvan.cristea0106
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