logo

OOPs | Proiectare orientată pe obiecte

Design orientat pe obiecte a început chiar din momentul în care au fost inventate computerele. Programarea era acolo, iar abordările de programare au intrat în imagine. Programarea înseamnă, practic, să ofere anumite instrucțiuni computerului.
La începutul erei computerului, programarea era de obicei limitată la programarea în limbajul mașinii. Limbajul mașinii înseamnă acele seturi de instrucțiuni care sunt specifice unei anumite mașini sau procesor, care sunt sub formă de 0 și 1. Acestea sunt secvențe de biți (0100110…). Dar este destul de dificil să scrieți un program sau să dezvoltați software în limbajul mașinii.
De fapt, este imposibil să dezvoltați software folosit în scenariile de astăzi cu secvențe de biți. Acesta a fost principalul motiv pentru care programatorii au trecut la următoarea generație de limbaje de programare, dezvoltând limbaje de asamblare, care erau suficient de aproape de limba engleză pentru a fi ușor de înțeles. Aceste limbaje de asamblare au fost folosite în microprocesoare. Odată cu inventarea microprocesorului, limbajele de asamblare au înflorit și au stăpânit peste industrie, dar nu a fost suficient. Din nou, programatorii au venit cu ceva nou, și anume, programare structurată și procedurală.



Programare structurata -
Principiul de bază al abordării de programare structurată este împărțirea unui program în funcții și module. Utilizarea modulelor și funcțiilor face programul mai ușor de înțeles și de citit. Ajută la scrierea unui cod mai curat și la menținerea controlului asupra funcțiilor și modulelor. Această abordare acordă importanță mai degrabă funcțiilor decât datelor. Se concentrează pe dezvoltarea de aplicații software mari, de exemplu, C a fost folosit pentru dezvoltarea unui sistem de operare modern. Limbajele de programare: PASCAL (introdus de Niklaus Wirth) și C (introdus de Dennis Ritchie) urmează această abordare.
Abordare de programare procedurală -
Această abordare este cunoscută și sub denumirea de abordare de sus în jos. În această abordare, un program este împărțit în funcții care îndeplinesc sarcini specifice. Această abordare este utilizată în principal pentru aplicații de dimensiuni medii. Datele sunt globale și toate funcțiile pot accesa date globale. Dezavantajul de bază al abordării de programare procedurală este că datele nu sunt securizate deoarece datele sunt globale și pot fi accesate de orice funcție. Fluxul de control al programului este realizat prin apeluri de funcții și instrucțiuni goto. Limbajele de programare: FORTRAN (dezvoltat de IBM) și COBOL (dezvoltat de Dr. Grace Murray Hopper) urmează această abordare.
Aceste constructe de programare au fost dezvoltate la sfârșitul anilor 1970 și 1980. Au existat încă unele probleme cu aceste limbaje, deși îndeplineau criteriile de programe bine structurate, software, etc. Nu erau atât de structurate precum cerințele la acea vreme. Ele par a fi suprageneralizate și nu se corelează cu aplicațiile în timp real.
Pentru a rezolva astfel de probleme, a fost dezvoltată ca soluție OOP, o abordare orientată pe obiecte.

Abordarea programarii orientate pe obiecte (OOP) –
Conceptul OOP a fost conceput practic pentru a depăși dezavantajele metodologiilor de programare de mai sus, care nu erau atât de apropiate de aplicațiile din lumea reală. Cererea a crescut, dar totuși s-au folosit metode convenționale. Această nouă abordare a adus o revoluție în domeniul metodologiei de programare.
Programarea orientată pe obiecte (OOP) nu este altceva decât aceea care permite scrierea de programe cu ajutorul anumitor clase și obiecte în timp real. Putem spune că această abordare este foarte apropiată de lumea reală și de aplicațiile sale, deoarece starea și comportamentul acestor clase și obiecte sunt aproape aceleași cu obiectele din lumea reală.
Să intrăm mai adânc în conceptele generale ale OOP, care sunt prezentate mai jos:
Ce sunt clasa și obiectul?
Este conceptul de bază al OOP; un concept extins al structurii utilizate în C. Este un tip de date abstract și definit de utilizator. Este format din mai multe variabile și funcții. Scopul principal al clasei este de a stoca date și informații. Membrii unei clase definesc comportamentul clasei. O clasă este modelul obiectului, dar, de asemenea, putem spune că implementarea clasei este obiectul. Clasa nu este vizibilă pentru lume, dar obiectul este.



CPP






Class car> {> >int> car_id;> >char> colour[4];> >float> engine_no;> >double> distance;> > >void> distance_travelled();> >float> petrol_used();> >char> music_player();> >void> display();> }>

>

>

Aici, mașina de clasă are proprietăți car_id, culoare, motor_no și distanță. Seamănă cu mașina din lumea reală care are aceleași specificații, care poate fi declarată publică (vizibilă pentru toată lumea din afara clasei), protejată și privată (vizibilă pentru nimeni). De asemenea, există câteva metode precum distance_travelled(), petrol_used(), music_player() și display(). În codul de mai jos, mașina este o clasă și c1 este un obiect al mașinii.

CPP




#include> using> namespace> std;> > class> car {> public>:> >int> car_id;> >double> distance;> > >void> distance_travelled();> > >void> display(>int> a,>int> b)> >{> >cout <<>'car id is= '> << a <<>' distance travelled = '> << b + 5;> >}> };> > int> main()> {> >car c1;>// Declare c1 of type car> >c1.car_id = 321;> >c1.distance = 12;> >c1.display(321, 12);> > >return> 0;> }>

>

>

Abstracția datelor -
Abstracția se referă la actul de a reprezenta trăsături importante și speciale fără a include detaliile de fundal sau explicația despre acea trăsătură. Abstracția datelor simplifică proiectarea bazei de date.

    Nivel fizic:
    Descrie modul în care sunt stocate înregistrările, care sunt adesea ascunse utilizatorului. Poate fi descris cu sintagma, bloc de stocare.
    Nivel logic:
    Descrie datele stocate în baza de date și relațiile dintre date. Programatorii lucrează în general la acest nivel, deoarece sunt conștienți de funcțiile necesare pentru a menține relațiile dintre date.
    Nivel de vizualizare:
    Programele de aplicație ascund detalii despre tipurile de date și informații din motive de securitate. Acest nivel este implementat în general cu ajutorul GUI și sunt afișate detaliile care sunt destinate utilizatorului.

încapsulare -
Încapsularea este unul dintre conceptele fundamentale în programarea orientată pe obiecte (OOP). Descrie ideea de împachetare a datelor și metodele care funcționează asupra datelor într-o unitate, de exemplu, o clasă în Java. Acest concept este adesea folosit pentru a ascunde din exterior reprezentarea stării interne a unui obiect.
Moștenirea -
Moștenirea este capacitatea unei clase de a moșteni capabilitățile sau proprietățile unei alte clase, numită clasă părinte. Când scriem o clasă, moștenim proprietăți de la alte clase. Deci, atunci când creăm o clasă, nu trebuie să scriem toate proprietățile și funcțiile din nou și din nou, deoarece acestea pot fi moștenite de la o altă clasă care o posedă. Moștenirea permite utilizatorului să refolosească codul ori de câte ori este posibil și să reducă redundanța acestuia.

Java




import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >System.out.println(>'GfG!'>);> > >Dog dog =>new> Dog();> >dog.name =>'Bull dog'>;> >dog.color =>'Brown'>;> >dog.bark();> >dog.run();> > >Cat cat =>new> Cat();> >cat.name =>'Rag doll'>;> >cat.pattern =>'White and slight brownish'>;> >cat.meow();> >cat.run();> > >Animal animal =>new> Animal();> > >animal.name =>'My favourite pets'>;> > >animal.run();> >}> }> > class> Animal {> >String name;> >public> void> run()> >{> > >System.out.println(>'Animal is running!'>);> >}> }> > class> Dog>extends> Animal {> > /// the class dog is the child and animal is the parent> > >String color;> >public> void> bark()> >{> >System.out.println(name +>' Wooh ! Wooh !'> >+>'I am of colour '> + color);> >}> }> > class> Cat>extends> Animal {> > >String pattern;> > >public> void> meow()> >{> >System.out.println(name +>' Meow ! Meow !'> >+>'I am of colour '> + pattern);> >}> }>

>

>

C++




#include> #include> using> namespace> std;> > class> Animal {> public>:> >string name;> >void> run(){> >cout<<>'Animal is running!'>< } }; class Dog : public Animal { /// the class dog is the child and animal is the parent public: string color; void bark(){ cout<' Wooh ! Wooh !' <<'I am of colour '< } }; class Cat : public Animal { public: string pattern; void meow(){ cout<' Meow ! Meow !'<<'I am of colour '< } }; int main(){ cout<<'GFG'< Dog dog; dog.name = 'Bull dog'; dog.color = 'Brown'; dog.bark(); dog.run(); Cat cat; cat.name = 'Rag doll'; cat.pattern = 'White and slight brownish'; cat.meow(); cat.run(); Animal animal; animal.name = 'My favourite pets'; animal.run(); return 0; //code contributed by Sanket Gode. }>

>

instanceof în java

>

Ieșire

GfG! Bull dog Wooh ! Wooh !I am of colour Brown Animal is running! Rag doll Meow ! Meow !I am of colour White and slight brownish Animal is running! Animal is running!>

polimorfismul -
Polimorfismul este capacitatea datelor de a fi procesate în mai multe forme. Permite efectuarea aceleiași sarcini în diferite moduri. Constă în supraîncărcarea metodei și suprascrierea metodei, adică scrierea metodei o dată și efectuarea unui număr de sarcini folosind același nume de metodă.

CPP




#include> using> namespace> std;> > void> output(>float>);> void> output(>int>);> void> output(>int>,>float>);> > int> main()> {> >cout <<>' GfG! '>;> >int> a = 23;> >float> b = 2.3;> > >output(a);> >output(b);> >output(a, b);> > >return> 0;> }> > void> output(>int> var)> {>// same function name but different task> >cout <<>'Integer number: '> << var << endl;> }> > void> output(>float> var)> {>// same function name but different task> >cout <<>'Float number: '> << var << endl;> }> > void> output(>int> var1,>float> var2)> {>// same function name but different task> >cout <<>'Integer number: '> << var1;> >cout <<>' and float number:'> << var2;> }>

>

>

Câteva puncte importante de știut despre POO:

  1. OOP tratează datele ca pe un element critic.
  2. Accentul se pune pe date mai degrabă decât pe procedură.
  3. Descompunerea problemei în module mai simple.
  4. Nu permite fluxului liber de date în întregul sistem, adică fluxul de control localizat.
  5. Datele sunt protejate de funcțiile externe.

Avantajele POO –

  • Modelează foarte bine lumea reală.
  • Cu OOP, programele sunt ușor de înțeles și de întreținut.
  • OOP oferă reutilizarea codului. Clasele deja create pot fi reutilizate fără a fi nevoie să le scrieți din nou.
  • OOP facilitează dezvoltarea rapidă a programelor în care este posibilă dezvoltarea paralelă a cursurilor.
  • Cu OOP, programele sunt mai ușor de testat, gestionat și depanat.

Dezavantajele OOP –

  • Cu OOP, clasele tind uneori să fie excesiv de generalizate.
  • Relațiile dintre clase devin uneori superficiale.
  • Designul OOP este complicat și necesită cunoștințe adecvate. De asemenea, trebuie să faceți o planificare și proiectare adecvată pentru programarea OOP.
  • Pentru a programa cu POO, programatorul are nevoie de abilități adecvate, cum ar fi proiectarea, programarea și gândirea în termeni de obiecte și clase etc.