Cele 4 principii ale OOP (abstractizare, incapsulare, mostenire, polimorfism)

Azi povestim despre OOP sau Object Oriented Programming care este o paradigma des intalnita in programare. Foarte multe limbaje de programare populare suporta OOP. Printre ele as aminti Java, C++, C#, Python, PHP, JavaScript, Ruby, Perl, Objective-C, sau Swift.

Aceste limbaje care suporta OOP au la baza cateva concepte precum Clasele care sunt niste templaturi si Obiectele care sunt instante ale acestor clase. De exemplu putem sa avem o Clasa numita Persoana si pe baza ei sa creem mai multe Obiecte care vor fi practic niste persoane, adica Obiectul Radu, Mihai sau Cristina. Dar despre Clase si Obiecte vom invata mai multe in videoul viitor care va fi practic, in JS.



Vrei sa inveti WordPress, GIT sau Security Testing?
Vezi aceste cursuri in limba Romana.



OOP se bazeaza pe 4 mari principii. Daca intelegem aceste principii ne va fi usor sa intelegem si aceasta paradigma si modul in care putem implementa viitoarele proiecte. Hai sa le luam pe rand.

  1. Abstractizarea este procesul prin care “ascundem” anumite functionalitati pe care nu e nevoie sa le stii. De exemplu, atunci cand lucrezi intr-o echipa de programatori ai putea primi un task in care e nevoie sa creezi functionalitatea de salvare in baza de date. Ceilalti colegi vor folosi functionalitatea ta de foarte multe ori cand vor salva lucruri in baza de date. Ei bine, ei nu trebuie sa stie exact cum salvezi tu acele date, cum ai scris codul si ce se intampla mai exact in functionalitatea ta. Ei pur si simplu vor folosi functionalitatea ta trimitand datele in baza de date cu un efort minim. In acest mod, codul aplicatiei devine oarecum modular, adica format din bucatele de sine statatoare care fac anumite lucruri bine definite.
  2. Incapsulare este procesul prin care tinem datele si functiile separate de exterior. Daca luam tot exemplul precendent in care tu faci functionalitatea de adaugare in baza de date, e posibil ca acolo sa ai niste variabile in care sa tii username-ul si parola de conectare la baza de date. Ei bine, nu ai vrea ca o alta functionalitatea sa poata modifica variabila username sau din gresala ea sa fie suprascrisa de un username folosit in zona de creare useri. Prin incapsulare creem o capsula care delimiteaza interiorul de exterior.
  3. Mostenirea sau Inheritance da voie unor clase sa preia proprietati din alte clase. Un exemplu bun pentru a explica mostenirea este cazul unei aplicatii prin care vindem masini. Aceste masini au in general aceleasi proprietati cu unele mici diferente. Toate vor avea un anumit tip de combustibil, capacitate cilindrica a motorului sau pret. Diferenta vine atunci cand ne intereseaza numarul de locuri in cazul unui autoturism si masa maxima de transport in cazul unui camion. In codul nostru, vom avea nevoie de 2 clase si anume Car si Truck care au destul de multe proprietati in comun. Ca sa nu duplicam proprietatile acestea putea sa creem o clasa principala numita Vehicle care va avea proprietatile comune si apoi clasele Car si Truck care vor mostenii Vehicle si vor avea in plus proprietatile specifice.
  4. Polimorfism este procesul prin care putem sa creem mai multe copii ale aceleiasi metode care poate sa primeasca inputuri diferite. Ca exemplu practic putem sa luam aici din nou un site de vanzari auto. Am stabilit mai inainte ca avem nevoie de o clasa Vehicle si in ea vrem sa creem o metoda care sa ne aduca toate informatiile unei masini pe baza numarul de inmatriculare. In acelasi timp vrem sa putem face acest lucru si pe baza seriei de sasiu. Ei bine aceste 2 date sunt diferite ca format si lungime asa ca avem nevoie de 2 metode, cu acelasi nume care primesc inputuri diferite dar afiseaza acelasi lucru.

Mai multe resurse:

Radu Popescu

https://RaduPopescu.ro

Fondatorul comunitatii VlogDeIT. IT-ist generalist pasionat de zona de marketing/business. Ajut tinerii sa inteleaga domeniul IT din Romania si sa se angajeze mai usor.

Related post

1 Comment

  • Preferi functional programming sau oop?

Leave a Reply

Your email address will not be published. Required fields are marked *