Se afișează postările cu eticheta poo. Afișați toate postările
Se afișează postările cu eticheta poo. Afișați toate postările

duminică, 7 septembrie 2025

Principiile Programării Orientate spre Obiecte

Principiul Abstractizării

  • Este procesul de a prelua obiecte din lumea reală și a le transforma în concepte virtuale. 
  • Reprezintă posibilitatea ca un program să ignore unele aspecte ale informației pe care o manipulează, adică oferă posibilitatea concentrării asupra esențialului, dintr-un anumit punct de vedere.

Principiul Moștenirii
  • Oferă posibilitatea de a proiecta noi clase folosind clase deja existente;
  • Clasa derivată moștenește variabilele și metodele clasei de bază;
  • Permite reutilizarea codului;
  • În Java o clasă nu poate extinde (moșteni) direct mai multe clase.
Principiul polimorfismului
  • Etimologic , cuvântul polimorfism provine din limba greacă, de la polys (multe) și morphos (forme);
  • În POO, prin polimorfism se înțelege posibilitatea ca, prin apelarea unei funcții, să obținem efecte diferite, în fucție de contextul apelului. De exemplu, pentru toate figurile geometrice putem calcula aria, însă pentru fiecare din ele se calculează diferit;
  • Deviza polimorfismului este ,, Același nume – implementare diferită”
Principiul Încapsulării
  • Acest termen definește accesul la membrii unei clase. Din anumite motive accesul la membrii unei clase se dorește a fi restricționați ca urmare aceștia sunt încapsulați în clasă prin intermediul unor cuvinte rezervate (modificatori de acces);
  • Reprezintă proprietatea obiectelor de a-și ascunde o parte din date și metode. Din exteriorul obiectului sunt accesibile (”vizibile”) numai datele și metodele publice.

Programarea Orientată spre Obiecte

Ca urmare a dezvoltării aplicațiilor software se impune o organizare cât mai eficientă a codului sursă astfel încât acesta să fie mai ușor de întreținut și înțeles.

Dea lungul timpului au fost dezvoltate mai multe tehnici de organizare a codului sursă:

a) Programarea nestructurată
  • Date și instrucțiunile se găsesc în programul principal, într-o unitate de compilare;
  • Implică utilizarea excesivă a instrucțiunilor "goto" pentru a transfera controlul de la o secțiune a codului la alta. Aceasta poate duce la crearea unor structuri de control dificil de urmărit și de înțeles.
  • Lipsesc structuri de control clare, precum bucle și condiții, care sunt fundamentale în tehnicile noi de organizare a codului;
  • Cu cât codul devine mai lung cu atât mai greu este de întreținut;
  • Mult cod duplicat;
Exemple: Assembler, Fortran, Basic, Cobol, ș.a

❗ Este important să subliniem că aceste limbaje nu erau neapărat proiectate pentru a încuraja programarea nestructurată, ci mai degrabă reflectau practicile de dezvoltare din perioadele timpurii ale informaticii, când conceptele de programare structurată nu erau încă pe deplin înțelese și adoptate. Cu timpul, oamenii au recunoscut avantajele programării structurate și au dezvoltat limbaje și practici care să promoveze o abordare mai clară și ușor de înțeles a dezvoltării software.

b) Programarea structurată

  • Utilizarea instrucțiunilor de control de flux precum bucle (for, while), condiționale (if, else), și structuri de selecție (switch) pentru a organiza logica programului.
  • Minimizarea utilizării instrucțiunilor de salt necontrolate ("goto") pentru a preveni crearea de fluxuri de control haotice și greu de urmărit.
  • Își propune să creeze programe mai ușor de înțeles, de întreținut și de extins, contribuind astfel la eficiența și calitatea dezvoltării software.
Exemple: C, C++, Pascal, Modula-2, Phyton, ș.a

c) Programarea procedurală
  • Se bazează pe noțiunea de subprogram ( proceduri, funcții) ;
  • Codul este mai bine organizat cu o funcționalitate mai bine precizată;
  • Codul devine mai complicat însă poate fi reutilizat;
  • Modificarea subprogramelor nu afectează restul programului;
Exemple: C, C++, Pascal, Fortran, Algol, ș.a

d) Programarea modulară
  • A apărut în urma creșterii dimensiunilor programelor, iar simpla organizare a codului sub formă de proceduri nu mai era eficientă;
  • Implică împărțirea unui sistem software mare și complex în module mai mici și independente ce permit rezolvarea problemelor dintr-un anumit domeniu;
  • Fiecare modul are o interfață bine definită care specifică cum poate fi utilizat de către alte module. Aceasta include declarații de funcții, tipuri de date și alte detalii necesare pentru a interacționa cu modulul.
  • Îmbunătățește lucrul cu reutilizarea codului;
  • Echipele de dezvoltare pot lucra independent la diferite module, reducând dependențele și facilitând dezvoltarea paralelă.
  • Testarea modulelor în mod separat este mai ușor de realizat, ceea ce contribuie la identificarea și remedierea erorilor mai rapid.
Exemple: C, C++, Pascal, Python, Modula2, Ada, ș.a

e) Programarea orientată spre obiecte
  • Tendință nouă de programare;
  • Modelează obiecte din lumea reală;
  • Programele sunt organizate ca colecții de obiecte ce cooperează între ele;
  • Detaliile și comportamentul obiectelor sunt păstrate în clase;
  • Programele sunt mult mai complexe și ușor de întreținut și modificat;
  • Simplifică lucrul în echipă la un program;
  • Se bazează pe 4 principii: încapsulare, moștenire, polimorfism, abstractizare;
Exemple: C++, Simula, Smalltalk, Java, ș.a


Deci, POO este un stil de programare în care programele sunt organizate ca şi colecții de obiecte cooperante, fiecare dintre ele reprezentând o instanță a unei clase, iar clasele sunt membre ale unei ierarhii de clase între care există relații de moștenire și respectă principiile POO.