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.
conținut
Principii de bază programarea orientată pe obiecte (OOP) Acestea au fost formate deoarece limitările au fost descoperite în abordările anterioare. Printre acestea - acces nelimitat la date și un număr mare de linkuri care impun restricții privind introducerea modificărilor. Conștientizarea și motivele lor 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 numerele, să împartă cu șase, să afișeze rezultatul. Cererea de limba 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ă listele de instrucțiuni.
Separarea în funcții și module este una dintre pietrele de temelie ale programării structurale, care, cu câteva decenii înainte de apariția OOP, a reprezentat o paradigmă preemptivă.
Probleme de programare structurată
Pe masura ce aplicatiile au crescut, programare structurată începând 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 sa mutat mai departe, iar colapsul a venit.
O analiză a cauzelor acestor eșecuri a evidențiat 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 valoare nouă, ao 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 trebuie să aibă 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, face dificilă modificarea. 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 subiectului nu ar trebui să fie format din 5 cifre, ci mai degrabă din 12. Acest lucru va necesita modificări tip de date de la scurt la lung. Acum funcțiile legate de cod trebuie modificate 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 legat de orice altceva, deci o schimbare î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. Ele nu arată ca date sau funcții. Obiectele reale complexe au atribute și comportament.
atribute
Exemple de atribute (denumite 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 din 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. Doar procedurile 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.
Aplicația, ca regulă, constă în mai multe obiecte care interacționează unul cu celălalt, numind funcțiile membrilor.
Astăzi, cea mai frecventă limbă a OOP (programare orientată obiect) 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, următorul pe salarii, iar apoi o săptămână care face comerțul 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 salariaț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 payslips. 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 asigură organizarea aplicației.
Trebuie amintit 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 similare cu funcțiile din C. Doar un context mai larg va permite să se stabilească dacă instrucțiunea este procedurală sau orientată pe obiect.
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 de 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:
- transport în modele de flux;
- elemente electrice în programele de proiectare a circuitelor;
- țări în modelul economiei;
- aeronave în sistemul de control al traficului aerian.
Elemente ale mediului de computere 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:
- carte contabilă;
- 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: ei 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 sunt încorporate tipuri de date. tip 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.
Clasa î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 din 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 scaune, iar camioanele au spațiu pentru transportul încărcăturilor grele.
În mod similar, clasa de bază poate deveni părintele mai multor subclase derivate care pot fi definite astfel încât să-și împartă caracteristicile cu adăugarea propriilor lor. 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 produce și propriile lor operațiuni. Î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. Acesta 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 randamentului din investiția inițială.
Crearea de noi tipuri de date
Obiectele sunt convenabile pentru crearea de noi tipuri de date. Să presupunem că un program utilizează valori bidimensionale (de exemplu, coordonatele sau de latitudine și longitudine), și au o dorință de a-și exprima acțiunea aritmetică asupra lor:
poziția1 = poziția + originea,
unde poziția1, poziția și origine - 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
Operatori = (egal) și + (plus) utilizate în aritmetică pozițional de mai sus nu acționează precum un built-in tipuri, cum ar fi int. Poziția obiectelor, etc. nu sunt predefinite, dar sunt programate. Cum știu acești operatori cum să le gestioneze? Răspunsul este că pentru ele puteți defini noi modele de comportament. Aceste operațiuni vor fi funcții membre ale clasei 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.
- Programarea orientată pe obiecte
- Modulare de programare
- Programare structurată
- Limbaj de programare Java
- Lista limbajelor de programare. Limbi de programare de nivel scăzut și înalt
- Cum de a învăța programarea de la zero în limbi de programare populare
- Ce este Ruby? Limba de programare "Ruby"
- Programarea de la zero: de unde să încep? Cum să începeți să învățați programarea de la zero în…
- Informatica. Bazele de algoritmizare și programare
- Encapsularea este ceea ce? Încapsulare în programare
- Programarea jocurilor: programe, caracteristici ale creației și recomandări
- Ce este Pascal. Programarea în Pascal
- Evaluarea limbajelor de programare 2016
- Istoria dezvoltării limbajelor de programare: pe scurt despre tot
- Scripting limbi de programare: sarcini, caracteristici și beneficii
- Folosind indexOf (jаvascript) atunci când lucrați cu matrice și șiruri de caractere
- Procedura de programare este ceea ce?
- Programarea neliniare este una din componentele programării matematice
- Cel mai ușor limbaj de programare pentru începători
- Ce este sistemul de programare
- Clasificarea limbajelor de programare după niveluri