logo

Programare orientată pe obiecte în C++

Programare orientată pe obiecte – După cum sugerează și numele, folosește obiecte în programare. Programarea orientată pe obiecte urmărește să implementeze entități din lumea reală, cum ar fi moștenirea, ascunderea, polimorfismul etc. în programare. Scopul principal al OOP este de a lega împreună datele și funcțiile care operează pe acestea, astfel încât nicio altă parte a codului să nu poată accesa aceste date, cu excepția acelei funcții.

Există câteva concepte de bază care acționează ca elemente de bază ale POO, de ex.



  1. Clasă
  2. Obiecte
  3. Încapsulare
  4. Abstracția
  5. Polimorfism
  6. Moştenire
  7. Legare dinamică
  8. Trecere mesaj

Caracteristicile unui limbaj de programare orientat pe obiecte

Conceptul OOPS în C++

arraylist.sort

Clasă

Blocul de bază al C++ care duce la programarea orientată pe obiecte este o clasă. Este un tip de date definit de utilizator, care deține propriii membri de date și funcții membre, care pot fi accesate și utilizate prin crearea unei instanțe a acelei clase. O clasă este ca un plan pentru un obiect. De exemplu: Luați în considerare clasa de mașini. Pot exista multe mașini cu nume și mărci diferite, dar toate vor împărtăși unele proprietăți comune, cum ar fi toate vor avea 4 roți, limită de viteză, interval de kilometraj etc. Deci aici, mașina este clasa și roți, limite de viteză , iar kilometrajul sunt proprietățile lor.

  • O clasă este un tip de date definit de utilizator care are membri de date și funcții membre.
  • Membrii de date sunt variabilele de date, iar funcțiile membre sunt funcțiile utilizate pentru a manipula aceste variabile împreună, acești membri de date și funcțiile membre definesc proprietățile și comportamentul obiectelor dintr-o clasă.
  • În exemplul de mai sus al clasei Car, membrul de date va fi limita de viteză, kilometrajul etc., iar funcțiile membre pot aplica frânele, crește viteza etc.

Putem spune că a Clasă în C++ este un plan care reprezintă un grup de obiecte care împărtășește unele proprietăți și comportamente comune.



Obiect

Un obiect este o entitate identificabilă cu anumite caracteristici și comportament. Un obiect este o instanță a unei clase. Când o clasă este definită, nu este alocată nicio memorie, dar atunci când este instanțiată (adică este creat un obiect) memoria este alocată.

C++
// C++ Program to show the syntax/working of Objects as a // part of Object Oriented PProgramming #include  using namespace std; class person {  char name[20];  int id; public:  void getdetails() {} }; int main() {  person p1; // p1 is a object  return 0; }>

Obiectele ocupă spațiu în memorie și au o adresă asociată, cum ar fi o înregistrare în pascal sau structură sau unire. Când un program este executat, obiectele interacționează prin trimiterea de mesaje unul altuia. Fiecare obiect conține date și cod pentru a manipula datele. Obiectele pot interacționa fără a fi nevoie să cunoască detalii despre datele sau codul celuilalt, este suficient să cunoaștem tipul de mesaj acceptat și tipul de răspuns returnat de obiecte.

Pentru a afla mai multe despre obiectele și clasele C++, consultați acest articol - Clase și obiecte C++



Încapsulare

În termeni normali, încapsularea este definită ca împachetarea datelor și informațiilor într-o singură unitate. În programarea orientată pe obiecte, încapsularea este definită ca legarea împreună a datelor și a funcțiilor care le manipulează. Luați în considerare un exemplu real de încapsulare, într-o companie, există diferite secțiuni, cum ar fi secțiunea de conturi, secțiunea de finanțe, secțiunea de vânzări etc. Secțiunea de finanțe se ocupă de toate tranzacțiile financiare și ține evidența tuturor datelor legate de finanțe. În mod similar, secțiunea de vânzări se ocupă de toate activitățile legate de vânzări și ține evidența tuturor vânzărilor. Acum poate apărea o situație în care, dintr-un motiv oarecare, un oficial de la secția de finanțe are nevoie de toate datele despre vânzări într-o anumită lună. În acest caz, nu are voie să acceseze direct datele secțiunii de vânzări. Mai întâi va trebui să contacteze un alt ofițer din secțiunea de vânzări și apoi să-i solicite să furnizeze anumite date. Aceasta este încapsularea. Aici datele secțiunii de vânzări și angajații care le pot manipula sunt împachetate sub un singur nume de secțiune de vânzări.

Încapsulare în C++ cu exemple

Încapsulare în C++

Încapsularea duce, de asemenea, la abstracția sau ascunderea datelor . Utilizarea încapsulării ascunde și datele. În exemplul de mai sus, datele oricărei secțiuni precum vânzări, finanțe sau conturi sunt ascunse din orice altă secțiune.

Pentru a afla mai multe despre încapsulare, consultați acest articol - Încapsulare în C++

Abstracția

Abstracția datelor este una dintre cele mai esențiale și importante caracteristici ale programării orientate pe obiecte în C++. Abstracția înseamnă afișarea doar a informațiilor esențiale și ascunderea detaliilor. Abstracția datelor se referă la furnizarea numai de informații esențiale despre date către lumea exterioară, ascunderea detaliilor de fundal sau implementare. Luați în considerare un exemplu din viața reală a unui bărbat care conduce o mașină. Bărbatul știe doar că apăsarea pedalei de accelerație va crește viteza mașinii sau aplicarea frânelor va opri mașina, dar nu știe cum la apăsarea pedalei de accelerație crește efectiv viteza, nu știe despre mecanismul interior al mașinii sau implementarea unui accelerator, frâne etc. în mașină. Aceasta este abstractizarea.

  • Abstracția folosind clase : Putem implementa Abstraction în C++ folosind clase. Clasa ne ajută să grupăm membrii datelor și funcțiile membre folosind specificatorii de acces disponibili. O clasă poate decide care membru de date va fi vizibil pentru lumea exterioară și care nu.
  • Abstracție în fișierele de antet : Un alt tip de abstractizare în C++ pot fi fișierele antet. De exemplu, luați în considerare metoda pow() prezentă în fișierul antet math.h. Ori de câte ori trebuie să calculăm puterea unui număr, numim pur și simplu funcția pow() prezentă în fișierul antet math.h și trecem numerele ca argumente fără a cunoaște algoritmul de bază conform căruia funcția calculează efectiv puterea numerelor. .

Pentru a afla mai multe despre abstracția C++, consultați acest articol - Abstracția în C++

Polimorfism

Cuvântul polimorfism înseamnă a avea mai multe forme. Cu cuvinte simple, putem defini polimorfismul ca fiind capacitatea unui mesaj de a fi afișat în mai multe forme. O persoană în același timp poate avea caracteristici diferite. Un bărbat este în același timp un tată, un soț și un angajat. Deci aceeași persoană are un comportament diferit în situații diferite. Acest lucru se numește polimorfism. O operațiune poate prezenta comportamente diferite în cazuri diferite. Comportamentul depinde de tipurile de date utilizate în operațiune. C++ acceptă supraîncărcarea operatorului și supraîncărcarea funcțiilor.

  • Supraîncărcarea operatorului : Procesul de a face ca un operator să manifeste comportamente diferite în cazuri diferite este cunoscut sub numele de supraîncărcare a operatorului.
  • Supraîncărcarea funcției : supraîncărcarea funcției este utilizarea unui singur nume de funcție pentru a efectua diferite tipuri de sarcini. Polimorfismul este utilizat pe scară largă în implementarea moștenirii.

Exemplu : Să presupunem că trebuie să scriem o funcție pentru a adăuga câteva numere întregi, uneori sunt 2 numere întregi, iar uneori sunt 3 numere întregi. Putem scrie Metoda de adunare cu același nume având parametri diferiți, metoda respectivă va fi apelată în funcție de parametri.

Polimorfism în C++ cu Exemplu

Polimorfismul în C++

Pentru a afla mai multe despre polimorfism, consultați acest articol - Polimorfismul în C++

es5 vs es6

Moştenire

Se numește capacitatea unei clase de a deriva proprietăți și caracteristici dintr-o altă clasă Moştenire . Moștenirea este una dintre cele mai importante caracteristici ale programării orientate pe obiecte.

  • Subclasa : Clasa care moștenește proprietăți de la o altă clasă se numește Subclasă sau Derived Class.
  • Super clasa : Clasa ale cărei proprietăți sunt moștenite de o subclasă se numește Clasă de bază sau Superclasă.
  • Reutilizabilitate : Moștenirea acceptă conceptul de reutilizare, adică atunci când dorim să creăm o clasă nouă și există deja o clasă care include o parte din codul pe care îl dorim, putem deriva noua noastră clasă din clasa existentă. Făcând acest lucru, reutilizam câmpurile și metodele clasei existente.

Exemplu : Câine, pisică, vacă pot fi derivate din clasa de bază a animalelor.

Moștenire în C++ cu Exemplu

Moștenirea în C++

Pentru a afla mai multe despre Moștenire, consultați acest articol - Moștenirea în C++

python __dict__

Legare dinamică

În legarea dinamică, codul care trebuie executat ca răspuns la apelul funcției este decis în timpul execuției. C++ are funcții virtuale pentru a sprijini acest lucru. Deoarece legarea dinamică este flexibilă, evită dezavantajele legării statice, care a conectat apelul funcției și definirea în timpul construirii.

Exemplu:

C++
// C++ Program to Demonstrate the Concept of Dynamic binding // with the help of virtual function #include  using namespace std; class GFG { public:  void call_Function() // function that call print  {  print();  }  void print() // the display function  {  cout << 'Printing the Base class Content' << endl;  } }; class GFG2 : public GFG // GFG2 inherit a publicly { public:  void print() // GFG2's display  {  cout << 'Printing the Derived class Content'  << endl;  } }; int main() {  GFG geeksforgeeks; // Creating GFG's object  geeksforgeeks.call_Function(); // Calling call_Function  GFG2 geeksforgeeks2; // creating GFG2 object  geeksforgeeks2.call_Function(); // calling call_Function  // for GFG2 object  return 0; }>

Ieșire
Printing the Base class Content Printing the Base class Content>

După cum putem vedea, funcția print() a clasei părinte este apelată chiar și din obiectul clasei derivate. Pentru a rezolva acest lucru, folosim funcții virtuale.

Exemplu de mai sus cu funcție virtuală:

C++
#include using namespace std; class GFG { public:  void call_Function() // function that call print  {  print();  }  virtual void print() // using 'virtual' for the display function   {  cout << 'Printing the Base class Content' << endl;  } }; class GFG2 : public GFG // GFG2 inherit a publicly { public:  void print() // GFG2's display  {  cout << 'Printing the Derived class Content'  << endl;  } }; int main() {  GFG geeksforgeeks; // Creating GFG's object  geeksforgeeks.call_Function(); // Calling call_Function  GFG2 geeksforgeeks2; // creating GFG2 object  geeksforgeeks2.call_Function(); // calling call_Function  // for GFG2 object  return 0; } //this code is contributed by Md Nizamuddin>

Ieșire
Printing the Base class Content Printing the Derived class Content>


Trecere mesaj

Obiectele comunică între ele prin trimiterea și primirea de informații. Un mesaj pentru un obiect este o solicitare pentru executarea unei proceduri și, prin urmare, va invoca o funcție din obiectul receptor care generează rezultatele dorite. Transmiterea mesajului implică specificarea numelui obiectului, a numelui funcției și a informațiilor care trebuie trimise.

Exemplu:

C++
#include  using namespace std; // Define a Car class with a method to display its speed class Car { public:  void displaySpeed(int speed) {  cout << 'The car is moving at ' << speed << ' km/h.' << endl;  } }; int main() {  // Create a Car object named myCar  Car myCar;  // Send a message to myCar to execute the displaySpeed method  int currentSpeed = 100;  myCar.displaySpeed(currentSpeed);  return 0; } //this code is contributed by Md Nizamuddin>


Articole similare :