Clase oop. Programare orientată pe obiecte

Termenii "obiect" и "clasa" sunt cunoscute de toată lumea. Dar pentru informaticieni, acestea au propriile conotații. Acestea sunt concepte de bază în programarea orientată pe obiecte. Clasele reprezintă un tip de date definit de dezvoltator, caracterizat prin modul în care sunt transmise și stocate, profilul de utilizare și setul de acțiuni care pot fi efectuate cu acestea. Ele diferă prin faptul că pot fi implementate ca o interfață.

Ce este OOP (programarea orientată pe obiecte)

Dezvoltatorii experimentați sunt familiarizați cu COBOL și C. Aceste programe au fost scrise ca o secvență de instrucțiuni pas cu pas. Au folosit proceduri și funcții pentru a face programul modular. Această paradigmă s-a axat mai degrabă pe logică decât pe date și pe metode de combinare a acestora.

Cursuri de programare orientată pe obiecte

Limbajele moderne de programare Delphi, Java, C# și altele urmează abordarea orientată pe obiecte. Când Aceasta este importanța este dată datelor, mai degrabă decât simpla scriere de instrucțiuni pentru a efectua o sarcină. Un obiect este un lucru sau o idee pe care doriți să o modelați. Ar putea fi orice, cum ar fi un angajat, un cont bancar, o mașină, diverse obiecte de mobilier și așa mai departe.

Conceptul de programare orientată pe obiecte (OOP) este legat în mod inerent de următoarele criterii:

  • Abstracție.
  • Încapsulare.
  • Moștenirea.
  • Polimorfism.

Luați în considerare fiecare dintre acestea în detaliu.

Abstracție

Acest criteriu ne permite să ne concentrăm pe ceea ce face obiectul în sine, dar nu pe modul în care aceste acțiuni sunt implementate în programare. OOP implică faptul că abstractizarea este cunoașterea cât mai multor lucruri despre un obiect. Ajută la crearea de module independente care pot interacționa între ele în mai multe moduri.

Încercăm să ne concentrăm în mod selectiv doar pe lucrurile care sunt importante pentru noi (în viață) sau pentru modulul nostru (în programare). Modificarea unui modul independent nu afectează celelalte module. Singurul lucru trebuie să știm, - este ceea ce ne oferă. Persoana care utilizează modulul nu trebuie să se preocupe de modul în care este rezolvată problema, de ceea ce se întâmplă în fundal.

Constructorul clasei C

Obiectele de zi cu zi pe care le folosim au abstracțiuni aplicate la diferite niveluri. Un exemplu de programare orientată pe obiecte este utilizarea frânării într-o mașină. Acest sistem este abstract: un automobilist trebuie doar să apese pedala pentru ca vehiculul să decelerați și să vă opriți. Modificările aduse sistemului de accelerare nu au niciun efect asupra sistemului de frânare, deoarece acestea sunt independente. Șoferul nu trebuie să înțeleagă funcționarea internă a frânelor. Tot ce trebuie să facă este să calce pedala la timp. Frâna (atât frânele cu disc, cât și cele cu tambur) va fi acționată, iar mașina va decelera.

Încapsulare

Acest concept este strâns legat de abstractizare. Încapsularea este dezvăluirea rezolvarea problemelor, nu necesită o înțelegere deplină a subiectului de către utilizator. Leagă datele și comportamentul într-un ansamblu coerent și menține clientul sau utilizatorul modulului în necunoștință de cauză cu privire la reprezentarea internă în care este implementat comportamentul de abstractizare.

Sistem de programare orientat pe obiecte

Datele nu sunt disponibile în mod direct. Acestea sunt accesate prin intermediul unor funcții specifice. Ascunderea datelor interne ale unei entități protejează integritatea acesteia, împiedicând utilizatorii să pună datele interne ale unei componente într-o stare invalidă sau incompatibilă.

Moștenirea

Acesta este un mecanism de reutilizare a codului care poate ajuta la reducerea duplicării codului. Acest concept este o caracteristică puternică a limbajelor de programare orientate pe obiecte. Ajută la organizarea claselor într-o ierarhie, permițându-le să moștenească atributele și comportamentul de la componentele din amonte.

Exemplu de moștenire: un papagal este o pasăre, rubla rusească este un tip de monedă. Cu toate acestea, fraza "banca este un cont bancar" nu este adevărat. Această relație este evidentă atunci când se dorește să se descrie o entitate într-un anumit enunț de sarcină. Cu ajutorul moștenirii, este posibil să se definească o implementare generală a OOP și a comportamentului său, iar apoi clasele specializate să suprascrie sau să schimbe acești indicatori în ceva mai specific. Moștenirea nu funcționează invers. Sursa (aka părinte) nu va avea proprietățile clasei derivate (copil).

Este important de reținut că, atunci când se încearcă să se modeleze o soluție, nu merită să se adauge mai multe niveluri de moștenire. Încercați să identificați atributele și comportamentele comune ale obiectelor care sunt modelate. Alte coduri pot fi refactorizate pe baza definirii clasei părinte corespunzătoare. O implementare comună poate fi mutată în ea.

Polimorfism

Acest concept permite extinderea sistemelor informatice prin crearea de noi obiecte specializate. În același timp, aceasta permite ca versiunea actuală să interacționeze cu cea nouă fără a acorda atenție proprietăților specifice ale acesteia.

De exemplu, dacă sarcina constă în scrierea unui mesaj pe o bucată de hârtie, se poate folosi un stilou, un creion, un marker sau un stylus. Este suficient ca instrumentul să încapă în mână și să aibă capacitatea de a lăsa o urmă atunci când intră în contact cu hârtia. Se pare că anumite acțiuni umane fac inscripția pe foaie, iar instrumentul folosit pentru a face acest lucru nu este atât de important pentru a transmite informația.

Un alt exemplu de polimorfism în programarea orientată pe obiecte este un avion și o navetă spațială, care pot fi numite obiecte zburătoare. Cum anume se mișcă ele în spațiu? Desigur, există o mare diferență în modul în care funcționează. Adică, modul în care se mișcă nu este același. Cu toate acestea, din punctul de vedere al privitorului, ambele obiecte zboară.

Punerea în aplicare a OOP

Moștenirea este o modalitate de a realiza polimorfismul, unde comportamentul definit într-o clasă moștenită poate fi înlocuit prin scrierea unei implementări personalizate a metodei. Acest lucru se numește suprapunere (polimorfism la compilare).

Există o altă formă de polimorfism numită supraîncărcare, în care moștenirea nu este luată în considerare. Numele metodei va fi același, dar argumentele din metodă sunt diferite.

Caracteristicile conceptelor "clasa" и "obiect"

Pentru a începe cu programarea orientată pe obiecte, trebuie să înțelegem ce este o clasă OOP și un obiect. Este important să înțelegem diferența dintre cele două. Clasa este un plan pentru crearea de. Define atributele și comportamentul. Asta arată ca un desen ingineresc al unei case. Obiectul este o instanță a clasei. Aceasta este diferența dintre cele două. Exemplul de mai jos arată cum se declară o clasă "TForml" și variabila "Formular" la limbaj de programare Delphi:

typeTForml =clasa(TForm)Buttonl: TButton;procedura ButtonlClick(Expeditor: TObject);sfârșitul;varForml: TForml;

Dacă dorim să modelăm, de exemplu, o mașină în programul nostru, trebuie să definiți-o atribute: model, combustibil, marcă, culoare, comportamentul său, precum și așa-numitele metode: pornirea, frânarea, accelerarea și așa mai departe. Este ușor de observat că valorile de mai sus nu sunt caracteristice doar pentru o marcă sau un model vehicul.

În abordarea orientată pe obiecte, încercăm să generalizăm obiectul nostru (mașina) spunând că cel pe care îl vom modela în programul nostru va avea un anumit număr de atribute și metode. Pot exista și alte atribute și caracteristici ale vehiculului, dar cele enumerate sunt suficiente pentru a înțelege cum funcționează o clasă în OOP.

Atunci când folosim aceste date, creăm o mașină cu parametri specifici. Prin programarea aceluiași obiect (mașină) putem lua caracteristici diferite, așa cum se arată în tabelul de mai jos:

Obiect 1Subiect 2
model: VAZ 2107model: VAZ 2109
combustibil: benzinăCombustibil: Diesel
culoare: roșuculoare: verde
Metoda de pornire a motorului: Start ()Metoda de pornire a motorului: Start ()
Metoda de frânare: Break ()Metoda de frânare: frână ()
Metoda de accelerare: Accelerare ()Metoda de accelerare: Accelerare ()

Astfel, programarea orientată pe obiecte ne permite să modelăm cu ușurință comportamentul unui sistem complex din lumea reală. Cu OOP, datele și funcțiile (atribute și metode) sunt combinate într-un obiect. Acest lucru previne necesitatea oricăror date partajate sau globale cu OOP. Această abordare este principala diferență între abordarea orientată pe obiecte și cea procedurală.

Ce este o clasă în OOP?

Clasele OOP constau din elemente de diferite tipuri:

  1. Câmpuri de date: stochează starea clasei folosind variabile și structuri.
  2. Metode: subrutine pentru manipularea datelor specificate.
  3. Unele limbaje permit un al treilea tip - proprietăți. Acesta este ceva între primele două.

Metode

Comportamentul unei clase sau al instanțelor sale este definit prin metode. Acestea sunt subrutine cu capacitatea de a manipula obiecte. Aceste operații pot schimba starea unui obiect sau pur și simplu pot oferi modalități de accesare a acestuia.

Există mai multe metode. Sprijinul acestora depinde de limbă. Unele sunt create și apelate de codul programatorului, altele (cele speciale, cum ar fi constructorii, destructorii și operatorii de conversie) sunt create și apelate de codul generat de compilator. Un limbaj poate permite unui programator să definească aceste metode speciale.

Interfață

Aceasta este definiția unui grup de acțiuni abstracte. Specifică ce comportament ar trebui să aibă un anumit obiect fără a preciza cum ar trebui implementat.

Obiectul poate avea mai multe roluri, iar utilizatorii au posibilitatea de a-l utiliza din perspective diferite. De exemplu, un obiect de tipul "uman" pot avea roluri:

  • Soldat (cu comportament) "împușcă inamicul").
  • soțul (cu comportament "îți iubești soția").
  • contribuabil (cu comportament "să plătească impozite") și așa mai departe.

Cu toate acestea, fiecare obiect își implementează comportamentul în mod diferit: Misha își plătește taxele la timp, Andrei întârzie, iar Pyotr nu o face deloc. Același lucru este valabil pentru fiecare obiect și alte roluri.

Ce este OOP

Astfel, se pune întrebarea de ce clasa de bază a tuturor obiectelor nu este o interfață. Motivul este că fiecare clasă ar trebui să implementeze un grup mic, dar foarte important de metode, ceea ce ar lua o cantitate inutilă de timp. Se pare că nu toate clasele au nevoie de o implementare specifică - cea implicită este suficientă în majoritatea cazurilor. Nu este necesară redefinirea niciunei metode, dar, dacă situația o cere, este posibil să se implementeze redefinirea acestora.

Un bun exemplu sunt butoanele de pe partea din față a televizorului. Se poate spune că acestea reprezintă interfața dintre utilizator și cablajul de pe cealaltă parte a incintei dispozitivului. O persoană apasă un buton de pornire pentru a porni și opri un aparat electric. În acest exemplu, un anumit televizor este o instanță, fiecare metodă este reprezentată de un buton, iar împreună constituie o interfață. În cadrul cele mai frecvente formă, este o specificație a unui grup de metode legate între ele, fără implementarea lor.

Constructor

Acest criteriu este responsabil pentru pregătirea unui obiect pentru acțiune, de exemplu pentru stabilirea valorilor inițiale pentru toate datele și elementele sale. Deși joacă un rol special, constructorul este doar o altă funcție care poate fi utilizată pentru a transmite informații printr-o listă de argumente. Acestea pot fi folosite pentru a o inițializa. Numele funcției constructorului și al clasei sunt aceleași.

Următorul exemplu explică conceptul de constructor de clasă în C++ (un limbaj de programare comun):

#includefolosindnamespace std;clasaLinia{public:voidsetLength(dublu len );dublugetLength(void);Linia();// declarația constructoruluiprivat:dublu lungime;};// Definirea funcțiilor, inclusiv a constructoruluiLinia::Linia(void){cout <<"obiect creat"<< endl;}void Linia::setLength(dublu len ){lungime = len;}dublu Linia::getLength(void){return lungime;}//Corpul programuluiintprincipal(){linie linie linie;// lungimea linieilinia.setLength(6.0);cout <<"Lungimea liniei : "<< linia.getLength()<<endl;return0;}

Atunci când codul de mai sus este compilat și executat, acesta dă următorul rezultat:

Obiectul a fost creat

Lungimea liniei: 6

Destructor

Aceasta este o funcție de clasă specială care distruge un obiect imediat ce domeniul de aplicare expiră. Destructorul este apelat automat de compilator atunci când obiectul părăsește domeniul de aplicare.

Sintaxa pentru destructor este aceeași ca și pentru constructor, dar numele clasei este folosit cu tilde în acest caz "~" ca prefix.

Următorul exemplu C++ explică conceptul de destructor:

#includefolosindnamespace std;clasaLinia{public:voidsetLength(dublu len );dublugetLength(void);Linia();// declarația constructorului~Linia();// declarația de distrugereprivat:dublu lungime;}// Definirea funcțiilor, inclusiv a constructoruluiLinia::Linia(void){cout <<"Obiectul este creat"<< endl;}Linia::~Linia(void){cout <<"Obiectul este șters"<< endl;}void Linia::setLength(dublu len ){lungime = len;}dublu Linia::getLength(void){return lungime;}//Corpul programuluiintprincipal(){Linie linie linie;//Lungimea linieilinia.setLength(6.0);cout <<"Lungimea liniei : "<< linia.getLength()<<endl;return0;}

Atunci când codul de mai sus este compilat și executat, acesta va da următorul rezultat:

Obiectul este creat

Lungimea liniei: 6

Obiect șters

Care sunt avantajele claselor

Beneficiile organizației software Clasele de obiecte sunt împărțite în trei categorii:

  • Dezvoltare rapidă.
  • Întreținere ușoară.
  • Reutilizarea codului și a designului.
Concepte de bază ale programării orientate pe obiecte

Clasele și OOP promovează în general dezvoltarea rapidă deoarece reduc decalajul semantic dintre cod și utilizatori. Apreciat de mulți programatori. Cu acest sistem, analiștii pot comunica atât cu dezvoltatorii, cât și cu utilizatorii folosind același vocabular, vorbind despre conturi, clienți, conturi și așa mai departe.

Clasele de obiecte ajută adesea la accelerarea dezvoltării, deoarece majoritatea mediilor orientate pe obiecte au facilități puternice de depanare și testare. Instanțele de clasă pot fi testate în timpul execuției pentru a se asigura că sistemul funcționează corect. În plus, în loc de a căuta descărcări de memorie ale kernelului, majoritatea mediilor orientate pe obiecte interpretează capacitățile de depanare ale. Ca urmare, dezvoltatorii pot analiza exact în ce parte a programului a apărut o eroare și pot vedea ce metode, argumente și valori au fost folosite.

Articole pe această temă