CalculatoareProgramare

OOP este ce? Principiile de bază ale programării orientate pe obiecte

De ce programarea orientată pe obiecte este preferată în majoritatea proiectelor? OOP oferă o modalitate eficientă de a face față complexității acestora. În loc să considere programul ca fiind o secvență de instrucțiuni executabile, îl reprezintă ca un grup de obiecte cu anumite proprietăți și efectuează anumite acțiuni cu ele. Acest lucru conduce la crearea de aplicații mai clare, mai fiabile și mai ușor de urmărit.

Principiile de bază ale programării orientate pe obiecte (OOP) s-au format deoarece limitările au fost găsite în abordările anterioare. Printre acestea - acces nelimitat la date și un număr mare de legături care impun restricții privind introducerea modificărilor. Conștientizarea și motivele acestora sunt importante pentru a înțelege ce este POR în programare și care sunt avantajele acestuia.

Limbi de procedură

C, Pascal, FORTRAN și limbile similare sunt procedural. Adică, fiecare dintre operatorii lor comandă calculatorului să facă ceva: să obțină datele, să adune numărul, să împartă cu șase, să afișeze rezultatul. Cererea de limbaj procedural este o listă de instrucțiuni. Dacă este mic, nu este necesar nici un alt principiu organizatoric (adesea numit o paradigmă). Programatorul creează o listă de instrucțiuni și computerul le execută.

Separarea în funcții

Când aplicațiile devin mai mari, lista se dovedește a fi greoaie. Puțini pot înțelege mai mult de câteva sute de instrucțiuni până când sunt grupați împreună. Din acest motiv, funcția a devenit o modalitate de a face aplicațiile mai ușor de înțeles pentru creatorii lor. În unele limbi, același concept poate fi numit un subprogram sau o procedură.

Aplicația este împărțită în funcții, fiecare având un scop clar și o interfață.

Ideea separării în proceduri poate fi extinsă prin gruparea acestora într-un obiect mai mare numit modul, dar principiul este similar: gruparea componentelor care execută liste de instrucțiuni.

Separarea în funcții și module este una dintre pietrele de temelie ale programării structurale, care, timp de mai multe decenii înainte de apariția OOP, a constituit o paradigmă preemptivă.

Probleme de programare structurală

Pe măsură ce aplicațiile au crescut, programarea structurală a început să întâmpine dificultăți. Proiectele au devenit prea complicate. Graficele s-au schimbat. Un număr mai mare de programatori au fost implicați. Complexitatea a crescut. Costurile au explodat, graficul s-a schimbat și a venit colapsul.

O analiză a cauzelor acestor eșecuri a arătat neajunsurile paradigmei procedurale. Indiferent de cât de bine este implementată o abordare structurată a programării, aplicațiile mari devin excesiv de complexe.

Care sunt cauzele acestor probleme asociate cu limbile de procedură? În primul rând, funcțiile au acces nelimitat la datele globale. În al doilea rând, procedurile și semnificațiile independente nu modelează lumea reală.

Dacă luăm în considerare aceste probleme în contextul unui program de inventariere, unul dintre cele mai importante elemente globale de date este agregatul unităților contabile. Funcții diferite le pot accesa pentru a introduce o nouă valoare, a le afișa, ao schimba și așa mai departe.

Acces nelimitat

Într-un program scris, de exemplu, în C, există două tipuri de date. Localurile sunt ascunse în interiorul funcției și alte proceduri nu sunt utilizate.

Atunci când două sau mai multe funcții necesită acces la aceleași date, atunci acestea din urmă trebuie să fie globale. Acestea, de exemplu, sunt informații despre elementele care trebuie luate în considerare. Datele globale pot fi accesate prin orice procedură.

Într-un program mare există multe funcții și multe elemente globale. Problema cu paradigma procedurală este că acest lucru duce la un număr și mai mare de posibile legături între ele.

Un număr atât de mare de compuși cauzează mai multe dificultăți. În primul rând, acest lucru complică înțelegerea structurii programului. În al doilea rând, este dificil să se facă schimbări. O modificare a unui element global de date poate necesita ajustarea tuturor funcțiilor care au acces la acesta.

De exemplu, în programul de contabilitate, cineva decide că codul elementului luat în considerare ar trebui să constea nu mai mult de 5 cifre și din 12. Aceasta va necesita modificarea tipului de date de la scurt la lung. Acum funcțiile legate de cod trebuie schimbate pentru a funcționa cu noul format.

Atunci când elementele se schimbă într-o aplicație mare, este dificil să se spună ce proceduri au acces la ele. Dar, chiar dacă acest lucru este clarificat, schimbarea acestora poate duce la o funcționare incorectă cu alte date globale. Totul este conectat cu orice altceva, astfel încât schimbarea într-un singur loc va fi în altul.

Modelarea în lumea reală

Cea de a doua și mai importantă problemă a paradigmei procedurale este că localizarea datelor și a funcțiilor sale individuale nu modelează lucrurile în lumea reală. Aici avem de-a face cu obiecte precum oameni și mașini. Nu arată ca date sau funcții. Obiectele reale complexe au atribute și comportament.

atribute

Exemple de atribute (numite uneori caracteristici) pentru oameni sunt culoarea ochilor și titlul postului, pentru mașini - puterea și numărul de uși. După cum sa dovedit, atributele în lumea reală sunt echivalente cu datele din program. Ele au semnificații specifice, cum ar fi albastru (culoarea ochilor) sau patru (numărul de uși).

comportament

Comportamentul este ceea ce obiectele din lumea reală produc ca răspuns la un fel de impact. Dacă cereți autorităților să-și ridice salariile, răspunsul este "da" sau "nu". Dacă apăsați frâna, mașina se oprește. Pronunția și oprirea sunt exemple de comportament. Comportamentul este ca o procedură: este chemată să facă ceva și o face. Astfel, numai datele și funcțiile nu modelează eficient obiectele din lumea reală.

adresare

Obiectul din OOP este reprezentat ca o colecție de date și funcții. Numai procedurile care sunt numite funcții membre în C ++ vă permit să obțineți valorile sale. Datele sunt ascunse și protejate de schimbare. Valorile și funcțiile sunt încapsulate într-o singură unitate. Encapsularea și ascunderea sunt termenii principali în descrierea limbilor OO.

Dacă doriți să modificați datele, știți exact ce funcții interacționează cu ele. Nicio altă procedură nu le poate accesa. Acest lucru simplifică scrierea, depanarea și menținerea programului.

O aplicație, de regulă, constă din mai multe obiecte care interacționează unul cu celălalt, invocând funcții membre.

Astăzi, cel mai utilizat limbaj al OOP (programare orientată pe obiecte) este C ++ (plus-plus). Java nu are anumite funcții, cum ar fi pointeri, șabloane și moștenire multiplă, ceea ce o face mai puțin puternică și versatilă decât C ++. C # nu a atins încă popularitatea C + +.

Trebuie remarcat faptul că așa-numitele funcții ale membrilor în C ++ sunt numite metode în alte limbi OO, cum ar fi Smalltalk. Elementele de date se numesc atribute. Apelarea unei metode obiect trimite un mesaj la aceasta.

analogie

Puteți trimite obiecte către departamentele companiei. În majoritatea organizațiilor, angajații nu lucrează într-o zi cu cadre, data viitoare când plătesc salariile și apoi petrec o săptămână pentru a face afaceri cu amănuntul. Fiecare departament are propriul personal cu responsabilități clar desemnate. Există, de asemenea, date proprii: salariile, cifrele de vânzări, înregistrările angajaților etc. Oamenii din departamente lucrează cu informațiile lor. Separarea companiei, astfel, facilitează controlul asupra activităților sale și menține integritatea datelor. Contabilitatea este responsabilă pentru salarizare. Dacă trebuie să cunoașteți suma totală a salariilor plătite în sucursala din sud, în iulie, nu este nevoie să rumați în arhivă. Este suficient să trimiteți o notă persoanei responsabile, să așteptați ca această persoană să aibă acces la date și să trimită un răspuns cu informațiile necesare. Acest lucru asigură respectarea reglementărilor și absența interferențelor din exterior. În același mod, obiectul din OOP oferă organizarea aplicației.

Trebuie reamintit faptul că orientarea către obiecte nu privește detaliile programului. Cele mai multe instrucțiuni C ++ corespund operatorilor de limbă procedurală, cum ar fi C. Într-adevăr, funcțiile membrilor în C ++ sunt foarte asemănătoare cu funcțiile din C. Doar un context mai larg va permite să se stabilească dacă instrucțiunea este procedurală sau orientată pe obiecte.

Obiect în OOP: definiție

Când analizăm problema programării într-o limbă OO, în loc de întrebări despre separarea ei în funcții separate, apare problema separării în obiecte. OOP de gândire face mult mai ușor pentru a dezvolta aplicații. Acest lucru se datorează similitudinii software-ului și obiectelor reale.

Ce lucruri devin obiecte în PLO? Mai jos sunt categoriile tipice.

Obiectul fizic din OOP este:

  • Transportul în modele de flux;
  • Elemente electrice în programele de proiectare a circuitelor;
  • Țările din modelul economiei;
  • Avioane în sistemul de control al traficului aerian.

Elemente ale mediului de lucru al utilizatorului:

  • meniu;
  • ferestre;
  • Grafic (linie, dreptunghi, cerc);
  • Tastatură, mouse, imprimantă, unități de disc.

persoane:

  • lucrătorilor;
  • studenți;
  • clienții;
  • vânzători.

informaţii:

  • Contabilitate;
  • O chestiune privată;
  • dicționar;
  • Tabelul de latitudini și lungimi ale așezărilor.

Legătura dintre obiectele din lumea reală și OOP a fost rezultatul unei combinații de funcții și date: au revoluționat programarea. Nu există o corespondență strânsă între acestea în limbile de procedură.

clasă

Obiectele din PLO sunt membri ai clasei. Ce înseamnă asta? Limbile de programare au tipuri de date încorporate . Tipul int, adică un întreg, este predefinit în C ++. Puteți declara orice număr de variabile int.

În mod similar, este definit un set de obiecte din aceeași clasă. Definește funcțiile și datele incluse în obiectele sale fără a le crea, la fel cum int nu creează variabile.

O clasă în OOP este o descriere a unui număr de obiecte similare. Prințul, Sting și Madonna sunt cântăreți. Nu există o singură persoană cu acest nume, dar oamenii pot fi numiți dacă au caracteristicile corespunzătoare. Obiectul OOP este o instanță a clasei.

moștenire

În viață, clasele sunt împărțite în subclase. De exemplu, animalele sunt împărțite în amfibieni, mamifere, păsări, insecte etc.

Principiul acestui tip de diviziune este acela că fiecare subclasă are caracteristici comune cu clasa de la care se produce. Toate mașinile au roți și un motor. Acestea sunt caracteristicile definitorii ale vehiculelor. În plus față de caracteristicile generale, fiecare subclasă are propriile caracteristici. Autobuzele au mai multe locuri, iar camioanele au spațiu pentru transportul mărfurilor grele.

În mod similar, clasa de bază poate deveni părintele mai multor subclase derivate care pot fi definite astfel încât să împărtășească caracteristicile sale cu adăugarea propriei lor subclase. Moștenirea este similară cu o funcție care simplifică programul procedural. Dacă mai multe părți ale codului fac aproape același lucru, puteți extrage elementele comune și le puteți pune într-o singură procedură. Trei secțiuni de aplicații pot apela o funcție pentru a efectua acțiuni comune, dar pot, de asemenea, să efectueze propriile operații. În mod similar, clasa de bază conține date comune grupului derivat. Ca și funcții, moștenirea reduce programul OO și clarifică interconectarea elementelor sale.

reciclare

După ce clasa este creată și depanată, ea poate fi transmisă altor programatori pentru reutilizare în propriile aplicații. Acest lucru este similar cu o bibliotecă de funcții care poate fi inclusă în diferite aplicații.

În PLO, moștenirea este o extensie a ideii utilizării multiple. Din clasa existentă, fără ao schimba, puteți crea o nouă cu adăugarea altor funcții. Ușurința reutilizării software-ului existent reprezintă un avantaj important al OOP. Se crede că acest lucru oferă o creștere a rentabilității investiției inițiale.

Crearea de noi tipuri de date

Obiectele sunt convenabile pentru crearea de noi tipuri de date. Să presupunem că programul folosește valori bidimensionale (de exemplu, coordonate sau latitudine și longitudine) și există dorința de a exprima acțiuni cu ele operații aritmetice:

Poziția1 = poziția + origine,

Unde poziția1, poziția și originea sunt perechi de valori numerice independente. Crearea unei clase care include aceste două valori și declararea variabilelor cu obiectele sale creează un nou tip de date.

Polimorfism, supraîncărcare

Operatorii = (egali) și + (plus) utilizați în aritmetica pozițională de mai sus nu acționează în același mod ca și cu tipurile încorporate, cum ar fi int. Poziția obiectelor și altele nu sunt predefinite, dar sunt programate. Cum știu acești operatori cum să le gestioneze? Răspunsul constă în faptul că puteți stabili noi modele de comportament pentru ei. Aceste operații sunt funcții membre ale clasei de poziție.

Utilizarea operatorilor sau a procedurilor, în funcție de ceea ce lucrează, se numește polimorfism. Atunci când un operator existent, cum ar fi + sau =, poate să lucreze cu un nou tip de date, se spune că este supraîncărcat. Supraîncărcarea în PLO este un fel de polimorfism. Este caracteristica sa importantă.

Cartea despre POR "programarea orientată pe obiecte pentru manechine" va permite tuturor să se familiarizeze mai mult cu acest subiect.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ro.unansea.com. Theme powered by WordPress.