Transcript Mostenire

C7 – LPO: Clase si Obiecte
CUPRINS

Paradigme de programare

Programarea orientata pe obiect, avantaje si
principii

Clasa, obiectul, definitii, crare si utilizare

Incapsulare

Modelare OO

Compunere

Mostenire

Polimorfism
Obiective
După parcurgerea acestui curs ar trebuie sa puteţi:




intelege conceptul de paradigma orientata pe obiect
descrie avantajele si principiile POO
intelege si opera cu clase si obiecte
intelege modul de abordare a scrierii unei aplicatii
orientate pe obiect prin prisma caractersticilor POO
Paradigme de programare


von Neumann da o arhitectura hardware in care codul si
datele sunt stocate intr-o unica memorie interna de unde
sunt extrase si prelucrate in procesor.
paradigma defineste o strategie de abordare a organizarii
codului; metodele de proiectare legate de arhitectura von
Neuemann sunt legate strans de organizarea hardware a
acestei arhitecturi si pleca fie de la date, fie de la cod,
rezultand 2 paradigme:

orientata pe proces:



proiectarea pleacă de la cod (algoritm);
algoritmi + structuri de date = Program.
orientata de la obiect:


proiectarea pleacă de la date ;
obiecte + mesaje = Program
Avantaje POO









Simplifică înţelegerea aplicaţiei
Reduce complexitatea sarcinilor în subgrupuri mai uşor de
gestionat
Creează cod reutilizabil
Reduce complexitatea
Reduce timpul de dezvoltare
Codul se poate extinde (adapta)
Subsistemele sunt clar definite
Interacţiunile sunt clar definite
Implementarea este încapsulată (codul şi datele sunt grupate)
Principii ale POO




Încapsulare: păstrarea laolaltă a datelor împreună cu codul care le
manipulează; metodele publice pot proteja datele private.
Mostenire: partajarea între obiecte a funcþionalitãtii ºi a datelor
comune => ierarhii de clasificare ce usureazã gestionarea conceptelor.
Polimorfism: permite scrierea interfete generice pentru un grup de
actiuni înrudite => se reduce complexitatea;
Mesaje:





Aplicatia este formata din mai multe obiecte ce colaboreaza intre ele pentru
genera rezultatele dorite.
Colaborarea apare intre obiectele legate între ele ce comunică prin mesaje;
La nivel de obiect, fiecare operaţie are asociat un mesaj;
Obiectul, la primirea unui mesaj valid, apelează, automat, operaţia asociată.
In Java nu avem mesaje, metodele se apelează direct prin codul scris de
programator.
Clasa






clasa reprezintă un termen general asociat procesului de clasificare
o descriere a unei multimi de obiecte ce au aceleasi atribute (date),
operatii (metode sau cod) si legaturi;
un obiect particulat poartă denumirea de instantă.
datele sau valorile din atribute definesc starea (initiala sau curenta);
codul defineste functionalitatea (operatiile permise sau actiunile asupra
datelor);
un sablon pentru alocarea memoriei fiind, din punctul de vedere al
programatorului, un tip de data abstract pe baza cãruia se instantiazã
obiectele (new - operator de creare, insantiere)
Class1 ob1 = new Class1();
Class1 ob2;
ob1.varsta = 10;
ob2 = ob1;
ob2.afisare();
int a, b=2;
a = 1;
b = a;
printf(”%i”,a);
Obiectul

Definitia depinde de contextul în care se lucrează:







filozofic: o entitate ce se poate recunoaşte ca fiind distinctă de altele - are
identitate proprie
teoria tipurilor: o structură de date împreună cu funcţiile de prelucrare a lor
proiectarea oo: o abstractizare a unui obiect din lumea reală
Contine date (atribute) si cod (comportament) create pe baza unei clase;
Ascunde datele private, interne in spatele unei interfete publice ce
implementeaza operatii;
Proprietati comune ale obiectelor:
 identitate ➔ fiecare obiect este unic în spaţiu şi timp;
 stare (date sau variabile) ➔ definită de valorile de atribute;
 comportament (functii sau metode) ➔ definit prin operatiile ce
se pot efectua asupra atributelor.
Nu este un tip primitiv (ca int, boolean …) ci unul referinta, stocat pe
heap (adresa unei locatii din RAM). Continutul obiectului se acceseaza
printr-o referinta la obiect stocata într-o variabila numita variabila obiect.
Definiţia de clasă


presupune descrierea
class nume_clasa extends nume_parinte {
precisă a formei şi a
//STARE - ATRIBUTE
// variabile de instanta
naturii acesteia. Pentru
tip v_1;
aceasta trebuie
. . .
specificate datele
tip v_n;
(atributele) pe care le
//COD – OPERATII
// metode de instanta
conţine şi codul
(operaţiile) care va opera tip metoda_1(lista parametri) {
//variabile locale
cu respectivele date.
corp_1
numele clasei publice
}
. . .
trebuie să fie acelaşi cu
tip metoda_k(lista parametri) {
numele fişierului sursă
corp_k
java: public class
}
numne_clasa { ... } >>> } //TERMINARE definitie de clasa
nume_clasa.java file
Crearea obiectelor, utilizare



obiectele se creează cu operatorul new:
refOb = new nume_clasa();
refOb este o referinta (adresa unei locatii din RAM)
new face urmãtoarele:




alocă spaţiu in RAM (pe heap) pentru noul obiect;
apelează o metodă specială numită constructor prin care se iniţializează obiectul;
întoarce o referinţă la noul obiect (ce trebuie stocata imediat intr-o variabila
referinta la obiect)
Manipularea obiectelor si a continutului acestora se poate face doar prin
referinte. Operatorul "punct" conecteazã obiectele cu membrii (variabilele de
instanta si metodele) prin una din formele de scriere : refOb.v1 sau
refOb.metoda_1().
Incapsularea si ascunderea
datelor





Una dintre caracteristicile fundamentale ale POO (Programare Orientata pe
Obiect)
Combina datele si codul ce prelucreaza datele intr-o singura constructie de
limbaj (clasa)
Impreuna cu ascunderea datelor asigura mentenabilitatea, flexibilitatea si
extensibilitatea codului. Aceasta se implementeaza prin controlul vizibiltatii
membrilor utilizand specificatorii de acces: public, private si protected
Se implementeaza prin accesul exclusiv la datele izolate (private) numai
prin intermediul unei interfete din metode publice (public)
Ascunderea implementarii dupa interfata are avantajele:



nu pot fi realizate modificari ilegale ale datelor, deoarece accesul direct la ele
este restricionat
gruparea datelor şi a operatiilor ce se pot realiza cu ele permit depistarea
uşoara a eventualelor probleme
modificarile interne ale clasei nu se reflecta şi în afara ei (daca se pastreaza
aceeaşi interfata), ca urmare restul programului nu trebuie modificat
Modelare OO




Termenul de modelare a obiectelor se foloseste pentru a descrie
procedura de cautare a obiectelor prin care sa descriem problema de
rezolvat
Rezultatul modelarii este modelul de obiecte in care toate datele sunt
stocate sub forma de atribute in obiecte si unde singura modalitate de
modificare a atributelor este prin utilizarea operatiilor
Atributele pot fi uneori obiecte iar dependenţele între obiecte apar prin
modul în care aceste legături, relaţii, asocieriilor se formează pentru a ne
soluţiona problema
Modelarea orientată pe obiect este despre găsirea obiectelor şi a
dependenţelor între acestea. Dependentele ce se pot forma sunt de doua
categorii:
 compunere
 mostenire
Compunerea





apare atunci cand obiectele pot conţine referinţe la alte obiecte;
comportamentul se poate modifica în timpul execuţiei, descrie starea
obiectelor;
defineşte o relaţie “has-a” între obiecte.
comportamentul obiectului complex este definit prin comportamentul părţilor
componente, distincte şi aflate în interacţiune.
in procesul de descompunere al unui obiect complex în obiecte mai simple,
acestea, deseori, vor putea fi reutilizate în alte aplicaţii
public class Class2 {
Class1 unAtribut; //atributul lui Class2 > obiect Class1
...
}
Class2 ob2 = new Class2();//instantiere ob2
ob2.unAtribut = new Class1();//instantiere ob1
parinte
superclasa
clasa de baza
stramos
Element mai general
Forma
Mostenire
-------------Cerc
Triunghi
copil Dreptunghi
subclasa
descendent
Element mai specific
prin moştenire, noua clasă preia toate caracteristicile clasei moştenite, la
care mai poate adăuga unele noi; noua clasă o extinde pe cea moştenită,
fiind o specializare a acesteia;

defineste o relatie “is-a” între clase; comportament este fixat în momentul
compilării, descrie date si functionalitate comunã între clase organizate
intr-o ierarhie parinte-copil sau tip-subtip in care se evită repetarea
scrierii codului;

are la bazã partajarea functionalitãtiilor comune;

dã o interfatã unicã unor comportamente distincte;

creşte claritatea proiectului şi productivitatea, deoarece noi clase pot fi
create pe baza unora existente.
public class Dreptunghi extends Forma {
...
}
}

Polimorfism







vine din Greaca, inseamna ”forme multiple”
comportamentul unor clase intr-o ierarhie de mostenire
depinde de tipul obiectului;
desi numele metodelor raman aceeasi in ierarhie, codul din
spatele metodelor se adapteaza la obiectul particulat din
care face parte;
orice obiect Java aflat intr-o relatie ”is-a” este polimorfic;
tipul unei variabile referinta la obiect determina codul
metodelor care se apeleaza;
o variabila referinta poate referi orice obiect de acelasi tip cu
referinta sau orice subtip al tipului;
apelul polimorfic functioneaza doar pentru metodele de
instanta suprascrise (nu pentru variabile sau metode statice)
Rezumat





paradigma orientata pe obiect este condusa de date
clasa este un sablon iar obiectul o instanta a clasei
un cod orientat pe obiect scris corect trebuie sa
implementeze ascunderea datelor
in procesul de proiectare al aplicatiei apar legaruri
intre clase si obiecte
implementarea acestori legaturi duc la relatii statice
sau dinamice ce se numestc compunere, mostenire
si polimorfism
Intrebari
1.
2.
3.
4.
5.
6.
Enumerati 4 avantaje ale POO.
Care sunt principiile POO?
Ce este clasa si cum se defineste?
Ce este obiectul, cum se acceseaza membrii?
Ce este comunerea, exemplificati?
Ce este mostenirea, exemplificati?
Bibliografie
1.
2.
3.
4.
5.
6.
http://www.oracle.com/technetwork/java/javase/documenta
tion/index.html
http://docs.oracle.com/javase/6/docs/
Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0
la expert, Polirom, 2003, ISBN: 973-681-201-4.
Herber Schild, Java 2 - The Complete Reference, Fourth
Edition, Osborne, 2001, ISBN: 0-07-213084-9.
Deitel H.M., Deitel P. J., Java - How to programm, Fith
Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7.
http://www.east.utcluj.ro/mb/mep/antal/downloads.html