Documente Academic
Documente Profesional
Documente Cultură
UNITATEA DE ÎNVĂŢARE 2
Cuprins
OBIECTIVELE UNITĂŢII DE ÎNVĂŢARE 2 ............................................................................... 3
2.1. Programarea orientată pe obiecte ............................................................................. 3
Întrebări ........................................................................................................................ 4
2.2. Obiectul ...................................................................................................................... 4
Întrebări ........................................................................................................................ 8
2.4. Încapsularea ............................................................................................................... 8
Întrebări ...................................................................................................................... 11
2.6. Polimorfismul ........................................................................................................... 12
2
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Programarea orientată pe obiecte (OOP – Object Oriented Programming) este tehnica cea mai
utilizată începând cu începutul anilor ’90, când paradigmele sale principale au fost adoptate şi
dezvoltate şi de cele mai utilizate limbaje ale perioadei respective: C++, Pascal, Basic, Ada,
Java, etc. Conceptele de bază ale OOP au fost totuși dezvoltate încă din anii ’60, odată cu
proiectarea limbajului Simula67.
Programarea orientată pe obiect (Programare Orientată Obiectual) este unul din cei mai
importanţi paşi făcuţi în evoluţia limbajelor de programare spre o mai puternică
abstractizare în implementarea programelor. Ea a apărut din necesitatea exprimării problemei
într-un mod mai natural fiinţei umane. Astfel unităţile care alcătuiesc un program se apropie
mai mult de modul nostru de a gândi decât modul de lucru al calculatorului.
Până la apariţia programării orientate pe obiect programele erau implementate în limbaje de
programare procedurale (C, Pascal) sau în limbaje care nici măcar nu ofereau o modalitate
de grupare a instrucţiunilor în unităţi logice (funcţii, proceduri) cum este cazul limbajului de
asamblare (assembler). Altfel spus o problemă preluată din natură trebuia fragmentată în
repetate rânduri astfel încât să se identifice elementele distincte, implementabile într-un
limbaj de programare. O mare problemă a programării procedurale era separarea datelor de
unităţile care prelucrau datele (subrutinele), ceea ce făcea foarte dificilă extinderea şi
întreţinerea unui program. Astfel s-a pus problema ca aceste două entităţi (date şi subrutine)
să fie grupate într-un anumit mod, astfel încât subrutinele să "ştie" în permanenţă ce date
prelucrează şi, mai mult decât atât, ele să formeze un modul, adică o unitate care separă
implementarea de interfaţă, ceea ce implică posibilitatea refolosirii codului.
3
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Întrebări
2.2. Obiectul
4
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
fenomene, etc. Obiectele comunică între ele prin intermediul mesajelor: obiectul care
transmite mesajul este emiţător, iar obiectul care recepţionează mesajul este receptor.
Trăim într-o lume de obiecte şi evenimente1. “Dimineaţa apăsaţi soneria ceasului
deşteptător, deschideţi frigiderul şi destupaţi o sticlă de suc de portocale. Ceva mai târziu,
deschideţi portiera maşinii, învârtiţi cheia în contact, porniţi motorul şi apoi apăsaţi pedala
de acceleraţie. Rareori vă întrebaţi cum funcţionează ceasul deşteptător, cum răceşte
frigiderul alimentele sau cum se transformă în mod miraculos benzina în cai putere. Nimic
nu vi se pare mai natural sau mai transparent decât relaţia dintre obiecte şi evenimentele pe
care le generaţi atunci când interacţionaţi cu ele. Un program scris pentru a fi rulat sub o
Interfaţă Grafică Utilizator (Graphical User Interface - GUI), cum este mediul Microsoft
Windows trebuie să fie la fel de firesc şi de natural în utilizare”.
1
Mark Steven Heyman, Bazele Visual Basic 4 - Editura Teora 1997, pagina 25
5
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Exemple de obiecte
Să considerăm de exemplu obiectul student Georgescu Petre, descris prin atributele: CNP:
(1700213100400); Nume (Georgescu); Prenume (Petre); Facultatea (CIG); Anul (2); Grupa
(600). Georgescu Petre are existenţă şi identitate proprii şi este distinct de alţi studenţi.
Comportamentul lui Georgescu Petre este definit prin acţiunile/operaţiile pe care acesta le
execută în anumite circumstanţe, descrise de regulă prin verbe: a învăţa, a merge la şcoală, a
scrie, etc. În mod asemănător, pot fi considerate obiecte şi studenţii Ionescu, Pavelescu, etc.
Întrebări
2.3. Clasa
Clasa reprezintă un tip de date obţinut prin abstractizarea unor obiecte similare. O clasă este
schiţa (modelul) unui obiect. Clasa spune maşinii virtuale cum să construiască un obiect de
tipul respectiv.
6
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
denumire;
atribute (date);
metode (operaţii).
Atributele şi metodele se mai numesc şi membri clasei. Atributele vor servi drept depozite
pentru datele concrete deţinute de obiectele clasei, iar metodele vor fi partajate de toate
instanţele clasei.
Atunci când proiectăm o clasă ne gândim la obiectele care vor fi create din clasa respectivă.
Identificăm ce ştiu obiectele despre ele însele şi ce vor face. Practic când proiectăm o clasă ne
gândim la informaţiile (datele) pe care un obiect trebuie să le deţină despre el însuşi, dar vom
proiecta şi metodele care operează asupra datelor respective. Astfel:
Membri Clasa 1 Clasa 2 Clasa 3 Conţine
Nume
Ştie
Atribute
Face
Metode
Tipurile de clase
Pot exista două tipuri de clase:
clase instanţiabile sau concrete: clasele care au instanţieri directe (contract, factură,
etc.; triunghi, cerc, etc.; femeie, bărbat);
7
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Întrebări
2.4. Încapsularea
Încapsularea reprezintă capacitatea obiectelor (claselor) de a conţine la un loc atât date, cât
şi operaţii/metode, dintre care numai o parte sunt vizibile din exterior.
Încapsularea asigură faptul că starea internă a obiectelor nu poate fi cunoscută sau schimbă
în mod direct (ci doar prin metode şi proprietăţi puse la dispoziţie de obiectul respectiv); doar
metodele şi proprietăţile proprii ale obiectului pot accesa starea acestuia şi îi pot induce un
anumit comportament. Fiecare tip de obiect expune o interfaţă pentru celelalte obiecte care
specifică modul cum acele obiecte pot interacţiona cu el.
8
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Principiul încapsulării impune ca toate atributele de instanţă ale unei clase să fie invizibile
din exteriorul acesteia, accesarea lor fiind posibilă numai prin intermediul unei metode
dedicate sau proprietăţi care formează interfaţa clasei.
Avantajele încapsulării
Întrebări
9
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
2.5. Moştenirea
Moştenirea procesul prin care atributele şi operaţiile unei clase (clasă de bază, superclasă)
sunt preluate automat de o altă clasă (clasă derivată sau subclasă). Orice clasă derivată va fi
de tipul (is a) clasei de bază. Prin moştenire se pot exprima relaţii deosebite între clase:
clasificări, ierarhizări, generalizări, specializări.
10
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Întrebări
11
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
2.6. Polimorfismul
Întrebări
12
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
2
Prelucrare după: Kathy SIERRA, Bert BATES – Atac la Java, Editura Teora, Bucureşti, 2006, pag. 170-175
13
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
- la această clasă vor fi legate cele şase clase pentru fiecare animal din listă.
(4) Analizăm dacă o subclasă din cele 6 are nevoie de comportamente specifice (cu alte
cuvinte dacă pentru anumite subclase trebuie să rescriem anumite metode).
- Practic putem constată de exemplu că leul şi hipopotamul mănâncă diferit.
De asemenea câinele şi pisica fac zgomot în mod diferit. Ca atare decidem
că vor rescrie metodele faceZgomot() şi manaca().
(5) Identificăm alte posibilităţi de folosire a abstractizării, căutând două sau mai multe
subclase care ar putea avea un comportament comun.
- Practic constatăm anumite asemănări de comportament între câine şi lup şi
între leu, tigru şi pisică. Ţinând seama şi de clasificarea pe regnuri, genuri şi
familii, vom obţine următorul arbore de moştenire:
14
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
Întrebări
1. Care sunt principalii paşi necesari pentru construirea unui arbore de moştenire?
2. Cum se proiectează superclasa?
3. Cum identificăm metodele care se vor rescrie?
4. Ce raţionamente folosim pentru a identifica noi posibilităţi de abstractizare?
2.2. Obiectul
2.3. Clasa
2.4. Încapsularea
2.5. Moştenirea
15
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
2.6. Polimorfismul
1. Care sunt principalii paşi necesari pentru construirea unui arbore de moştenire? – pagina 12:
Etape şi raţionamente pentru proiectarea unui arbore de moştenire
2. Cum se proiectează superclasa? – pagina 13: Proiectarea arborelui de moştenire pentru un
simulator de animale
3. Cum identificăm metodele care se vor rescrie? – prin analizarea metodelor tuturor obiectelor
vizate și identificarea metodelor comune
4. Ce raţionamente folosim pentru a identifica noi posibilităţi de abstractizare? - Identificăm
alte posibilităţi de folosire a abstractizării, căutând două sau mai multe subclase care ar putea avea un
comportament comun
Concluzii
Programarea orientată pe obiecte (OOP – Object Oriented Programming) este tehnica cea mai
utilizată începând cu începutul anilor ’90, când paradigmele sale principale au fost adoptate şi
dezvoltate şi de cele mai utilizate limbaje ale perioadei respective: C++, Pascal, Basic, Ada,
Java, etc. Conceptele de bază ale programării orientate obiect sunt: obiect, abstractizare, clasă,
încapsulare, moştenire, polimorfism şi persistenţă.
Obiectul este o entitate cu identitate proprie, caracterizată prin stare şi comportament. Obiectul
modelează o entitate din lumea reală sau imaginară, definită de un set propriu şi unicde
proprietăţi. Obiectele reprezintă tot ceea ce ne înconjoară:lucruri, fiinţe, procese, fenomene, etc.
Clasa reprezintă un tip de date obţinut prin abstractizarea unor obiecte similare. O clasă este
schiţa (modelul) unui obiect. Clasa spune maşinii virtuale cum să construiască un obiect de tipul
respectiv.
Încapsularea reprezintă capacitatea obiectelor (claselor) de a conţine la un loc atât date, câtşi
operaţii/metode, dintre care numai o parte sunt vizibile din exterior. Încapsularea asigură faptul
că starea internă a obiectelor nu poate fi cunoscută sau schimbă în mod direct (ci doar prin
metode şi proprietăţi puse la dispoziţie de obiectul respectiv); doarmetodele şi proprietăţile
proprii ale obiectului pot accesa starea acestuia şi îi pot induce un anumit comportament.
Moştenirea procesul prin care atributele şi operaţiile unei clase (clasă de bază, superclasă) sunt
preluate automat de o altă clasă (clasă derivată sau subclasă). Orice clasă derivată va fi de tipul (is a)
clasei de bază. Prin moştenire se pot exprima relaţii deosebite între clase: clasificări, ierarhizări,
generalizări, specializări.
16
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU
Unitatea de învăţare 2 PARADIGMELE PROGRAMĂRII ORIENTATE PE OBIECTE
17
Limbaje de programare
© Departamentul Informatică de Gestiune, Conferenţiar universitar dr. Veronica POPESCU & Profesor universitar dr. Gheorghe POPESCU