Differences

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

Link to this comparison view

poo-is-ab:laboratoare:06 [2024/10/28 09:50]
razvan.cristea0106 [Agregare]
poo-is-ab:laboratoare:06 [2025/01/19 22:29] (current)
razvan.cristea0106
Line 1: Line 1:
-===== Laborator 6 - Moștenire multiplă și agregare =====+===== Laborator 06 - Moștenire multiplă și agregare =====
  
 **Autor: Răzvan Cristea** **Autor: Răzvan Cristea**
Line 22: Line 22:
 <note important>​În general, găsirea unei combinații potrivite de clase care să respecte **moștenirea multiplă** poate fi o provocare, deoarece aceasta poate duce la situații **complexe** și **ambigue**. **Moștenirea multiplă** poate să genereze probleme atunci când două **clase părinte** au **metode** sau **membri comuni**, ceea ce poate crea **conflicte** sau **confuzie** în interpretarea acestora în **clasa copil**. Astfel, devine esențial ca **moștenirea multiplă** să fie utilizată doar atunci când **clasele părinte** sunt **bine definite**, **fără** suprapuneri de responsabilități sau funcționalități,​ pentru a **evita** situațiile de ambiguitate și a păstra codul ușor de întreținut și de extins.</​note>​ <note important>​În general, găsirea unei combinații potrivite de clase care să respecte **moștenirea multiplă** poate fi o provocare, deoarece aceasta poate duce la situații **complexe** și **ambigue**. **Moștenirea multiplă** poate să genereze probleme atunci când două **clase părinte** au **metode** sau **membri comuni**, ceea ce poate crea **conflicte** sau **confuzie** în interpretarea acestora în **clasa copil**. Astfel, devine esențial ca **moștenirea multiplă** să fie utilizată doar atunci când **clasele părinte** sunt **bine definite**, **fără** suprapuneri de responsabilități sau funcționalități,​ pentru a **evita** situațiile de ambiguitate și a păstra codul ușor de întreținut și de extins.</​note>​
  
-Pentru acest laborator propunem ca și clase părinte **ProdusComercial** și respectiv **PiesaElectronica**,​ iar ca și clasă copil **CameraWeb**. Dacă am menționat **moștenire** acest lucru este echivalent cu relația de **"​is-a"​** ceea ce înseamnă că **orice cameră web** este un **produs comercial** și în același timp **orice cameră web** este o **piesă electronică**.+**Moștenirea** poate fi vizualizată ca o structură arborescentă,​ ceea ce explică de ce organizarea claselor într-un astfel de sistem este denumită **ierarhie de clase**. Într-o **ierarhie**,​ fiecare **clasă derivată** își are rădăcinile în **clasele părinte**, iar această organizare permite construirea unei structuri **logice** și **ordonate** a relațiilor dintre clase. De exemplu, în C++, putem observa în imaginea de mai jos un **arbore de fluxuri (ierarhia claselor de fluxuri)** în care clasele specifice de intrare și ieșire (precum **''​ifstream''​**,​ **''​ofstream''​**,​ **''​stringstream''​**) sunt derivate din clase generale precum **''​istream''​**,​ **''​ostream''​** sau **''​iostream''​**. Această structură arborescentă oferă atât claritate conceptuală,​ cât și flexibilitate în reutilizarea și extinderea funcționalităților claselor. 
 + 
 +{{ :​poo-is-ab:​laboratoare:​arbore_fluxuri.jpg?​400 |}} 
 + 
 +Pentru acest laborator propunem ca și clase părinte **ProdusComercial** și respectiv **PiesaElectronica**,​ iar ca și clasă copil **CameraWeb**. Dacă am menționat **moștenire** acest lucru este echivalent cu relația de **"​is-a"​** ceea ce înseamnă că **orice cameră web** este un **produs comercial** și în același timp **orice cameră web** este și o **piesă electronică**.
  
 Declarația clasei **ProdusComercial** se poate observa în blocul de cod mai jos. Declarația clasei **ProdusComercial** se poate observa în blocul de cod mai jos.
Line 75: Line 79:
 #include "​PiesaElectronica.h"​ #include "​PiesaElectronica.h"​
  
-class CameraWeb : public ProdusComercial,​ public PiesaElectronica // CameraWeb mosteneste atat ProdusComercial cat si PiesaElectronica+class CameraWeb : public ProdusComercial,​ public PiesaElectronica // CameraWeb mosteneste atat clasa ProdusComercial cat si clasa PiesaElectronica
 { {
  int rezolutie;  int rezolutie;
Line 332: Line 336:
 </​code>​ </​code>​
  
-Iar implementarea ​funcțiilor din cadrul namespace-ului se poate observa mai jos.+Iar implementările ​funcțiilor din cadrul namespace-ului se pot observa mai jos.
  
 <code cpp> <code cpp>
Line 363: Line 367:
 </​code>​ </​code>​
  
-Testarea acestui namespace este facută în **funcția main** după cum urmează în codul de mai jos.+Testarea acestui ​**namespace** este facută în **funcția main** după cum urmează în codul de mai jos.
  
 <code cpp> <code cpp>
poo-is-ab/laboratoare/06.1730101847.txt.gz · Last modified: 2024/10/28 09:50 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