C 7 LPO Clase si Obiecte CUPRINS n
C 7 – LPO: Clase si Obiecte CUPRINS n Paradigme de programare n Programarea orientata pe obiect, avantaje si principii n Clasa, obiectul, definitii, crare si utilizare n Incapsulare n Modelare OO n Compunere n Mostenire n Polimorfism
Obiective După parcurgerea acestui curs ar trebuie sa puteţi: n n 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 n n 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: n orientata pe proces: n n n proiectarea pleacă de la cod (algoritm); algoritmi + structuri de date = Program. orientata de la obiect: n n proiectarea pleacă de la date ; obiecte + mesaje = Program
Avantaje POO n n n n n 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 n n Î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: n n n 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 n n n 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) Class 1 ob 1 = new Class 1(); Class 1 ob 2; ob 1. varsta = 10; ob 2 = ob 1; ob 2. afisare(); int a, b=2; a = 1; b = a; printf(”%i”, a);
Obiectul n Definitia depinde de contextul în care se lucrează: n n n n 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: n identitate ➔ fiecare obiect este unic în spaţiu şi timp; n stare (date sau variabile) ➔ definită de valorile de atribute; n 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ă n n presupune descrierea class nume_clasa extends nume_parinte precisă a formei şi a { //STARE - ATRIBUTE naturii acesteia. Pentru // variabile de instanta aceasta trebuie tip v_1; specificate datele. . . (atributele) pe care le tip v_n; //COD – OPERATII conţine şi codul (operaţiile) care va opera // metode de instanta tip metoda_1(lista parametri) { cu respectivele date. //variabile locale numele clasei publice corp_1 } trebuie să fie acelaşi cu. . . numele fişierului sursă tip metoda_k(lista parametri) { java: public class corp_k numne_clasa {. . . } >>> } } //TERMINARE definitie de clasa nume_clasa. java file
Crearea obiectelor, utilizare n n n obiectele se creează cu operatorul new: ref. Ob = new nume_clasa(); ref. Ob este o referinta (adresa unei locatii din RAM) new face urmãtoarele: n n 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 : ref. Ob. v 1 sau ref. Ob. metoda_1().
Incapsularea si ascunderea datelor n n n Una dintre caracteristicile fundamentale 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: n nu pot fi realizate modificari ilegale 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 n n 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: n compunere n mostenire
Compunerea n n n 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 Class 2 { Class 1 un. Atribut; //atributul lui Class 2 > obiect Class 1. . . } Class 2 ob 2 = new Class 2(); //instantiere ob 2. un. Atribut = new Class 1(); //instantiere ob 1
Mostenire 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; n 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; n are la bazã partajarea functionalitãtiilor comune; n dã o interfatã unicã unor comportamente distincte; n creşte claritatea proiectului şi productivitatea, deoarece noi clase pot fi create pe baza unora existente. public class Dreptunghi extends Forma {. . . } } n
Polimorfism n n n n 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 n n n 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/javase/documen tation/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
- Slides: 17