Te salut si bine ai venit la un nou articol despre Programare. In acest articol vorbim despre Programarea Orientata pe Obiecte si vom vedea ce este, cu ce este diferita fata de programarea procedurala si cum o putem folosi. Hai sa incepem!

Continutul articolului
I. Concepte teoretice despre POO
Programarea Orientata pe Obiecte (POO) – sau OOP –Object Oriented Programming – este o paradigma de programare care foloseste concepte abstracte (sub forma de clase si obiecte) pentru a crea modele bazate pe elemente din lumea reala. O aplicatie construita pe programare orientata pe obiecte foloseste mai multe obiecte care comunica prin mesaje specifice pentru a rezolva diverse servicii (ale aplicatiei) solicitate. Aceste obiecte sunt capabile sa trimita mesaje (date), sa primeasca mesaje (date) si sa proceseze date. Scopul programarii orientate pe obiecte este de a incerca sa creasca flexibilitatea si mentenabilitatea programelor. Deoarece programele create folosind o un limbaj orientat pe obiecte (cum este Java) sunt modulare, ele pot fi mai usor de dezvoltat si mai usor de inteles dupa dezvoltare.
Programare Orientata pe Obiecte vs. Programare Procedurala
Programele sunt alcatuite din module. Aceste module pot fi programe de sine statatoare (independente) care pot fi dezvoltate (codate) si testate separat fata de programul initial (ulterior acestea – mai multe module – putand fi asamblate pentru a forma un program complet). In limbajele de programare procedulare (cum ar fi C si Pascal) aceste module sunt defapt proceduri, adica o secventa de instructiuni.
In limbajul C, procedurile sunt functii care au un set clar de instructiuni (de tipul if, for, while etc.) cu scopul de a intoarce (sau nu) un rezultat (al acelei functii).
In programarea procedurala se ia problema (care se doreste a fi rezolvata) si sparge in mai multe bucati (sub proceduri). Astfel sub procedurile rezolva bucati mai mici din problema initiala. Lucrurile continua asa pana cand problemele secundare (bucatile mai mici) sunt suficient de simple pentru a fi rezolvate de sub procedura corespunzatoare ei.
Dificultatatea cu acest tip de programare consta in faptul ca intretinerea software-ului poate fi dificila si consumatoare de timp. Atunci cand se efectueaza modificari ale procedurii principale, aceste modificari pot intra in cascada, iar schimbarea poate avea un impact major asupra tuturor procedurilor din programul initial.
O alternativa la programarea procedurala este programarea orientata obiect. Scopul programarii orientate pe obiecte este cel de a rezolva dificultatile legate de programarea procedurala. In programarea orientata pe obiecte, principalele module dintr-un program sunt clase, mai degraba decat proceduri. Programarea orientata pe obiecte ne permite sa ne cream clase si obiecte care modeleaza elementele din lumea reala.
II. Din ce este compusa programarea orientata pe obiecte?
Dupa cum poti vedea si in figura 2 de mai jos, programarea orientata pe obiecte este alcatuita din urmatoarele elemente:

- Obiecte
- Clase
- Mostenirea (claselor)
- Polimorfism
- Abstractizarea (claselor)
- Incapsularea (claselor)
In aceasta setiune vom vorbi pe scurt despre fiecare element in parte, iar in articolele viitoare vom intra in mai multe detalii.
1) Obiecte si Clase in programarea orientata pe obiecte
O clasa este o colectie de obiecte care au proprietati, operatii si comportamente comune. O clasa este o combinatie de stari (date) si de comportamente (metode). In POO o clasa este un tip de date, iar obiectele sunt instante ale acestui tip de date. Despre clase si obiecte vorbesc mai multe in articolul de AICI.
Iti recomand sa urmaresti acest tutoriale unde iti explic mai multe despre clase si obiecte care fac parte din programarea orientata pe obiecte:
2) Mostenirea claselor in programarea orientata pe obiecte
Mostenirea (Inheritance) unei clase X de catre o clasa Y ii ofera acesteia posibilitatea de a imprumuta metodele si campurile existenta in clasa (parinte) X. Putem lua exemplul unui autoturism, marca BMW care are la baza foarte multe elemente comune cu alte autoturisme (Mercedes, Audi, Porsche etc), dar in acelasi timp are si elemente unice, specifice marcii BMW. Acesta este un exemplu cand un BMW mosteneste caracteristicile unui autoturism (marca, caroserie, roti, culoare, viteza maxima, capacitate motor, combustibil folosit etc.). Mai multe despre acest subiect in articolele viitoare.
Iti recomand sa urmaresti acest tutoriale unde iti explic mai multe despre mostenirea claselor care fac parte din programarea orientata pe obiecte:
3) Polimorfismul in programarea orientata pe obiecte
Polimorfism-ul reprezinta “a avea mai multe forme” si apare in momentul in care folosim mostenirea. Practic polimorfismul ne ofera posibilitatea de a folosi metodele mostenite sub mai multe forme, in functie de rezultatul pe care il dorim (astfel codul nostru devenind mai flexibil). Acest lucru ne ofera avantajul de a face un lucru in mai multe moduri. In concluzie, mostenirea ne ofera posibilitatea de a folosi campurile si metodele clasei parinte, in timp ce polimorfismul ne ofera posibilitatea de a folosi metodele mostenite sub mai multe forme pentru a obtine rezultate diferite. Acest lucru se face prin overloading (supraincarcare) si overriding (suprascriere) despre care vom vorbi in articolele viitoare.
4) Abstractizarea in programarea orientata pe obiecte
Procesul de abstractizare a datelor are legatura cu ascunderea anumitor elemente care compun clasele (care de obicei reprezinta aspecte de detaliu) si punerea in evidenta a acelor informatii esentiale pentru un utilizator. Abstractizarea poate fi facuta fie prin clase abstracte, fie prin interfete. Mai multe detalii in articolele viitoare.
5) Incapsularea in programarea orientata pe obiecte
Incapsularea ne asigura cu faptul ca ascunde informatii sensibile de catre utilizatori. In aceasta situatie ne referim in mod special la variabile, metode sau clase care pot avea atributul private.
Despre Programarea Orienta pe Obiecte (POO):
In POO o clasa este un tip de date, iar obiectele sunt instante aleacestuitipde date.
Unei clase X de catre o clasa Y ii ofera acesteia posibilitatea de a imprumuta metodele si campurile existenta in clasa (parinte) X.
Apare in momentul in care folosim mostenirea si ne ofera posibilitatea de a folosi metodele mostenite sub mai multe forme.
Are legatura cu ascunderea anumitor elemente care compun clasele.
Ne asigura cu faptul ca ascunde informatii sensibile de catre utilizatori.
III. Beneficiile Programarii Orientate pe Obiecte
Iata un sumar al beneficiilor cu care vine Programare Orientata pe Obiecte:
1. Modularitatea: codul sursa pentru o clasa poate fi scris si mentinut independent de codul sursa pentru alte clase. Odata creat, un obiect poate fi usor transferat in interiorul sistemului.
2. Securitate ridicata la nivel de cod: Interactionand doar cu metodele obiectului, detaliile implementarii interne raman ascunse de lumea exterioara.
3. Reutilizarea codului: daca o clasa exista deja, puteti utiliza in programul dvs. obiecte din acea clasa. Acest lucru permite programatorilor sa implementeze / testa / depana obiecte complexe, specifice pentru sarcini, pe care apoi le puteti folosi in propriul cod.
4. Debugging mai usor: Daca un anumit obiect se dovedeste a fi o problema, il puteti elimina din program si puteti adauga/conecta, ca inlocuitor, un obiect diferit. Acest lucru este similar cu rezolvarea problemelor mecanice in lumea reala. Daca un surub se rupe, il inlocuiti pe el, nu intreaga masina.
IV. Ce limbaje de programare sa inveti pentru a folosi programarea orientata pe obiecte?
Acum ca ai inteles ce este programarea orientata pe obiecte, probabil ca te gandesti: “ok, ok, dar ce limbaj de programare sa invat pentru a face POO?”. Iata mai jos o lista cu limbajele de programare pe care le poti studia (care folosesc principii de POO).
- C++ – Limbaj perfecte pentru a construi interfete grafice (GUI) si pentru a construi jocuri de calculator folosind Unity.
- JavaScript – JavaScript (adesea numit si JS) este un limbaj de programare orientat obiect (POO) folosit pentru introducerea de functionalitati in pagini web. JavaScript introduce un element de dinamica si varietate intr-o pagina web care (in momentul incarcarii) este rulata direct de catre browser.
- PHP – Realizarea Backend-ului pentru o pagina web interactiva, limbaj intalnit si in inlocuirea Shell Script-ului pe Linux. Doua dintre framework-urile populare pentru acest limbaj sunt Laravel si Symfony, de asemenea PHP-ul este adesea folosit impreauna cu SQL-ul, limbaj folosit in programarea bazelor de date.
- Java / C# / Swift – Limbaje destinate aplicatiilor mobile pentru Android, Microsoft sau Apple.
- Python, Perl, Ruby – Aceste trei limbaje, sunt catalogate ca limbaje de scripting, deoarece sunt cel mai des intalnite in automatizari. Ultimul dintre acestea, Ruby, poate fi folosit ca inlocuitor al PHP-ului, prin framework-ul Ruby on Rails, destinat Web Developing-ului
Acestea au fost doar cateva exemple de limbaje de programare care pot fi folosite pentru programare orientata pe obiecte. Iata mai jos un tutorial care te poate ajuta sa iei o decizie in legatura cu ce limbaj de programare sa inveti:
Vrei sa inveti mai multe despre Programare?
Iti multumesc pentru ca ai citit acest articol despre programarea orientata pe obiecte. Daca esti interesat sa inveti mai multe despre Programarea, atunci iti recomand cartea mea “Introducere in Programare cu Java”. Notiunile explicate in aceasta carte te vor ajuta extrem de mult sa intelegi atat elementele teoretice cat si cele practice care au de a face cu notiunile de baza ale programarii, programare orientata pe obiecte (POO), structuri de date si multe altele. Click AICI pentru a afla mai multe.

Mult spor la invatat iti doresc, Ramon
Foarte folositoare informatiile pentru cei la inceput de drum!
Multumesc, Andrei!
Foarte bine structurat si usor de inteles .
Multumesc pentru munca depusa si implicarea fata de cei care se afla la inceput de drum intr-o cariera in IT
Cu mare drag 🙂
Salut.
Oare de ce nu se vorbeste de poo php ?
Salutare,
Pentru ca am ales sa vorbesc de Java POO 🙂