170 likes | 309 Vues
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:
E N D
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) Class1ob1 = newClass1(); Class1ob2; ob1.varsta = 10; ob2 = ob1; ob2.afisare(); inta, 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, internein spatele unei interfete publice ce implementeaza operatii; • Proprietati comune ale obiectelor: • identitate ➔ fiecare obiect este unic în spaţiu şi timp; • stare (date sauvariabile) ➔ definită de valorile de atribute; • comportament (functii saumetode) ➔ definit prin operatiile ce se pot efectua asupra atributelor. • Nu este un tip primitiv (ca int, boolean …) ci unulreferinta, 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ă class nume_clasaextends nume_parinte { //STARE - ATRIBUTE // variabile de instanta tip v_1; . . . tip v_n; //COD – OPERATII // metode de instanta tip metoda_1(lista parametri) { //variabile locale corp_1 } . . . tip metoda_k(lista parametri) { corp_k } } //TERMINARE definitie de clasa • presupune descrierea precisă a formei şi a naturii acesteia. Pentru aceasta trebuie specificate datele (atributele) pe care le conţine şi codul (operaţiile) care va opera cu respectivele date. • numele clasei publice trebuie să fie acelaşi cu numele fişierului sursă java: public class numne_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
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; • 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 • 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 • http://www.oracle.com/technetwork/java/javase/documentation/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