Curs Java - Obiecte, metode si clase

39
1 Obiecte, metode, clase Conţin ut A g â ndi utiliz â nd obi ec t e : An a l o g ii Ob i ec t e şi c l a s e Comportament şi atribute o Atribute o Compo r t a m e nt o C rear e a unei c l ase Moşt e ni re , int erfe ţ e, pa c h e t e o Moşt e ni r e o C rear e a unei s t ruc t u r i de c l ase i e r arh i z a t e o C e î n sea m moştenire ? o Moştenire sin g ul a r ă şi m oşt e ni r e multiplă o I n t e rfe ţ e şi pac h e t e o E x emplu de cree a re a u n ei subclase Bre v i a r Conclu z i i Programarea orientată pe obiecte (OOP) este o idee nouă, în domeniul tehnicilor de programare. Comparativ cu vechile metode de programare OOP oferă un mod de organizare al programelor preluând modelul vieţii reale. În cadrul următoarelor două expuneri se va încerca furnizarea unui răspuns la următoarele întrebări: Ce sunt obiectele şi clasele şi cum sunt legate între ele Ce rol au cele două părţi importante ale unei clase sau obiect: atributele şi comportamentul Ce înseamnă moştenirea unei clase şi cum afectează aceasta modul de proiectare al programelor Ce semnificaţie au pachetele şi interfeţe

description

Conţinut• A gândi utilizând obiecte: Analogii• Obiecte şi clase• Comportament şi atributeo Atributeo Comportamento Crearea unei clase• Moştenire, interfeţe, pacheteo Moştenireo Crearea unei structuri de clase ierarhizateo Ce înseamnă moştenire ?o Moştenire singulară şi moştenire multiplăo Interfeţe şi pacheteo Exemplu de creeare a unei subclase• Breviar• Concluzii

Transcript of Curs Java - Obiecte, metode si clase

Obiecte, metode, claseConinut A gndi utiliznd obiecte: Analogii Obiecte i clase Comportament i atributeo Atributeo Comportamento Crearea unei clase Motenire, interfee, pacheteo Motenireo Crearea unei structuri de clase ierarhizateo Ce nseamn motenire ?o Motenire singular i motenire multiplo Interfee i pacheteo Exemplu de creeare a unei subclase Breviar ConcluziiProgramarea orientat pe obiecte (OOP) este o idee nou, n domeniul tehnicilor de programare. Comparativ cu vechile metode de programare OOP ofer un mod de organizare al programelor prelund modelul vieii reale.n cadrul urmtoarelor dou expuneri se va ncerca furnizarea unui rspuns la urmtoarele ntrebri: Ce sunt obiectele i clasele i cum sunt legate ntre eleCe rol au cele dou pri importante ale unei clase sau obiect: atributele i comportamentulCe nseamn motenirea unei clase i cum afecteaz aceasta modul de proiectare al programelor Ce semnificaie au pachetele i interfeeA gndi utiliznd obiectele: o analogiePentru a oferi o imagine asupra rolului obiectelor i programrii orientate pe obiecte vom considera dou analogii ntre aceasta i obiectele reale:

S analizm jocul Lego. Acesta este format din elemente, ce dispun de posibilitatea de a se culpa ntre ele. (pe o faa a unui element Lego exist un pin de conectare, pe cealalt faa se afl un orificiu care permite conectarea cu alt element). Acest joc dispune de roi, motorae, cuplaje, role care permit prin intermediul conectrilor de subansamble realizarea unor castele, roboi, maini de curse sau absolute orice i poate imagina utilizatorul.Concluzionnd, fiecare element Lego este un mic subanasmblu care permite conectarea sa cu alt element, ntr-un mod predefinit, respectnd anumite reguli tehnologice. Acest lucru conduce la creearea unor obiecte masive. n mod similar lucreaz i OOP-ul: pune la un loc elemente mici pentru a creea un produs final masiv.Un alt exemplu. Unii dintre dumneavoastr ai mers la o firma de calculatoare i cu experiena de care dispunei i cu un pic de ajutor, eventual, ai cumprat componentele unui calculator: placa de baz, microprocesorul i radiatorul acestuia, placa video, placa de sunet, CDROM-ul, hard discul, tastatura, monitorul, sursa de alimentare, carcasa, etc. Le-ai asamblat i v-ai putut bucura, (dac nu au intervenit unele neplaceri legate de uruburi czute pe placa de baz sau conectoare puse invers datorit unor mufe mam care permiteau acest lucru sau datorit dumneavoastr care le-ai fcut s permit acest lucru), de un calculator nou nou i mai ales funcional.Cu siguran c tiai c pe placa de baz sunt o serie de componente i circuite, produse de diferite companii, a cror funcie nu sunt tocmai convins c o tiai. Dar acest lucru nu v-a mpiedicat s obinei un calculator funcional, chiar dac nu ai avut nici cea mai mic idee ce rol a avut condensatorul fr terminale de pe placa de baz (pe care poate nu l-ai smuls cnd ai montat placa pe carcas!!). Tot ceea ce ai urmrit a fost ca anumite conectoare i mufe s se potriveasc cu elementele de conectic ale celorlalte placi, pentru ca astfel succesul realizrii calculatorului s fie deplin. Pe de alt parte, placa de baz comunic cu procesorul, placa video, tastatrura, hard discul, CDROM-ul, fllopy, iar acestea comunic ntre ele.Programarea orientat pe obiecte lucreaz n mod similar: utilizatorul poate folosi o serie de componente, dezvoltate anterior (obiecte), fr a fi nevoie ca acesta s le reproiecteze soft, fiecare component avnd ns un rol specific n cadrul programului principal i fiecare component comunicnd cu celelalteObiecte i ClaseOOP este realizat ntr-un mod similar alctuirii lumii reale: este alctuit din mici obiecte extreme de diferite. Capacitatea de a combina obiectele este un aspect extrem de important n cadrul OOP. Aceast tehnic ofer numeroase concepte i metode pentru a creea i utiliza obiectele ntr-un mod ct mai flexibil, iar cea mai important modalitate se datoreaz existenei claselor.n clipa cnd construii un program, nu creeai obiecte. Definii clase de obiecte, unde prin clas nelegei o macro-structur care caracterizeaz mai multe obiecte ce au n comun anumite caracteristici. O clas nglobeaz toate caracteristicile unui set particular de obiecte. Spre exemplu clasa Arbore, cuprinde toi copacii care au aceleai caracteristici dominante (au frunze,

rdcini, tulpin, creeaz clorofil). Conceptul clas Arbore ofer un model abstract pentru aciuni de tip: a atinge frunza unui copac, a taia un copac, etc. Pe lng aceste aciuni care se pot defini n raport cu un arbore definit conceptual, pot fi create o serie de elemente de tip membru, instane ale unei clase cum ar fi definirea unui brad, palmier, stejar, etc - care ns pstreaz caracteristicile unui arbore, chiar daca au alte atribute.

Clasa de tip Arbore i cteva instane ale acesteia.DefiniiePrin clas se nelege un prototip generic pentru un set de obiecte cu caracteristici similare.Un exemplu sau o instan a unei clase este un alt nume pentru obiectul actual. Dac se consider clasa o reprezentare general a unui obiect, exemplul este reprezentarea concret a clasei. Se pune ntrebarea: care este diferena dintre o reprezentare a unui obiect i obiectul n sine? Absolut niciuna. Obiectul este un termen general, dar att acesta ct i exemplu sunt reprezentri concrete ale unei clase. Aceti termeni n cadrul OOP sunt intrerchanjabili: un exemplu de arbore i un obiect arbore sunt acelai lucru.DefiniieUn exemplu (instan) este o reprezentare concret a unei clase. Exemplele i obiectele sunt unul i acelai lucru.S presupunem c dorii s realizai, n Java, un element destinat interfeei utilizator, care va purta numele de buton. O clas Buton definete caracteristicile butonului (eticheta acestuia, dimensiunile, aspectul) i modul n care acesta se comport. (Este nevoie de un click sau un

dublu click pentru activare? i va schimba sau nu culoarea cnd va fi activat? Ce trebuie s fac cnd este activat?) Odat cu definirea clasei Buton, se pot creea uor exemple ale acestui buton: butoane de toate dimensiunile i culorile, care dispun de aceleai caracteristici ale clasei buton, dar au forma, culoare, dimeniuni i comportament diferit, bazat pe particularizarea elementelor incluse n cadrul clasei mama. Creind o clas Buton, nu va mai fi nevoie s rescriei codul pentru fiecare buton individual pe care dorii s l utilizai n cadrul programului, ci vei importa clasa cu anumite atribute setate n modul particular ce corespunde cerinelor dumneavoastr.La scrierea unui program Java, programatorul creeaz i construiete un set de clase. La rularea programului, exemplele acestor clase sunt create i apoi distruse, acolo unde este nevoie. n concluzie, un programator Java va trebui s creeze un set care s acopere toate cerinele programului.Din fericire, nu suntei nevoii s pornii de la nceput cu creearea claselor Java: mediul Java, la instalare, dispune de un set standard de clase (numite biblioteci de clase) care implementeaz o serie de elemente de baz destinate programrii la nivel fundamental (clase care construiesc funcii matematice de baz, tablouri, iruri, etc.), precum i elemente de grafic, animaie, sunet i comunicaii. n multe cazuri, bibliotecile standard Java, furnizeaz destule clase, astfel nct programul Java va putea creea o singur clas care va apela clasele din cadrul bibliotecii. Pentru programe Java complicate, va fi nevoie s creeai un ntreg set de clase i s definii interaciunile dintre ele.Termen NouO bibliotec de clase are scopul de a putea fi folosit n mod repetat n cadrul diferitelor programe. Biblioteca standard Java conine numeroase clase destinate programrii fundamentale n Java.Comportare i atributeFiecare clas scris n Java are dou elemente de baz: atribute i comportament. Pentru a nelege aceste exemple, n continuare vor fi exemplificate cteva structuri de programe.AtributeAtributele sunt elemente individuale care difereniaz un obiect de altul, determinnd aspectul, starea i alte caliti ale respectivului obiect.S creem cteva exemple:

1) Fie o clas ipotetic ce va purta numele de Bec. Aceast clas va dispune de urmtoarele atribute:Numele obiectuluiBec

Atribut icomportamentAprinsDa

Nu

Intensitate luminoas ( mrime numeric)

Dimensiune (mrime numeric)

2) Fie o clas pe care o numim Motocicleta. Aceast clas va avea urmtoarele atribute cu urmtoarele valori tipice:

Culoare: rou, verde, argintiu, maro Tip: sport, standard, dragster Marc: Honda, BMW, BultacoCa atribut al unui obiect pot fi incluse i informaii referitoare la starea acestuia: dac motorul este pornit sau nu sau treapta de vitez selectat la momentul curent.Atributele sunt definite n cadrul claselor ca variabile. Numele i tipul acestor variabile sunt definite n cadrul clasei, fiecare obiect avnd propriile valori ale atributelor definite prin intermediul variabilelor. Deoarece fiecare exemplu al unei clase dispune de valori diferite ale atributelor caracteristice clasei, variabilele poart numele de variabilele exemplului sau variabilile instanei.DefiniieVariabilele unui exemplu definesc atributele obiectului. Tipul i numele variabilelor sunt definite n interiorul unei clase, dar valorile lor sunt setate i modificate n cadrul obiectului.Variabilele exemplelor pot fi setate iniial, la creearea obiectului i pot rmne constante toat viaa obiectului sau se pot modifica odat cu rularea programului. Modificnd valoarea unei variabile se modific i atributul obiectului.

n afara variabilelor exemplului, sunt variabilele clasei, care sunt aceleai pentru ntreaga clas i pentru toate exemplele. Spre deosebire de variabilele exemplelor, variabilele clasei sunt memorate n cadrul clasei.ComportamentUn comportament al unei clase determin modul n care un exemplu al acelei clase reacioneaz. Spre exemplu cum reacioneaz respectivul obiect dac o alt clas sau obiect i "cere" s fac ceva sau dac starea intern a clasei se modific. Comportamentul este simgurul mod prin care un obiect poate s fac ceva pentru sine, prin sine sau pentru alt clas. Spre exemplu, revenind la cazul clasei Motocicleta, acesta poate avea urmtorul comportament: Pornirea motorului Start Motor Oprirea motorului Stop Motor Accelerare Schimbarea vitezelor DecelerarePentru a defini un comportament, vor trebui definite metodele, un set de declaraii Java care definesc un anumit task. Metodele se comport exact ca nite funcii dar sunt definite i accesibile numai n cadrul clasei. Java nu dispune de metode definite n afara unei clase.Term nouMetodele sunt funcii definite n interiorul unei clase, care opereaz cu exemple ale acelei clase.Metodele pot fi folosite pentru a opera n cadrul structurii unui singur obiect, dar totodat i pentru a oferi facilitile de comunicare ale obiectelor unul cu altul. O clas sau un obiect poate chema metodele din cadrul altei clase sau obiect pentru a schimba mediul sau pentru a verifica schimbarea strii respectivului obiect.Se pot identifica metode specifice unei clase, respective metode de exemplu: dac metodele de clas opereaz n cadrul clasei, metodele de exemplu opereaz n cadrul exemplelor unui obiect.Crearea unei clasePentru exemplificarea aspectelor prezentate anterior se va construl o clas Motocicleta, pentru ca apoi s poat fi urmrit modul n care apar i sunt dezvoltate atributele i comportamentul, respectiv metodele definite n cadrul unei clase Java.Utiliznd un editor de text va fi creat codul surs Java prin introducerea urmtoarelor declaraii (Atenie Java este un mediu CaseSensitive caracterele mari, respective caracterele mici sunt interpretate diferit):

class Motocicleta {}n acest moment a fost creeat o clas. Se observ srcia acetsei clase care nu dispune de nici o caracteristic, metod, comportament!S identificm ce atribute sunt necesare pentru definirea unor obiecte ale acestei clase, respective ulterior ale unor exemple ale obiectelor acestei clase:String marca; String culoare;boolean StareMotor = false;Primele dou atribute conin obiecte de tip String ( prin String se nelege un ir de caractere, iar String, scris cu litera S, este o parte a unei biblioteci standard Java). Cel de-al III-lea atribut este o variabil logic - boolean, care se refer la starea motorului: dac este pornit on sau oprit off; valoarea false indic faptul c motorul este oprit, n timp ce valoarea true indic faptul c motorul este pornit.Termen NouO variabil boolean este adevrat - true sau fals - false.S adugm acum o serie de metode sau comportamente ale clasei. Cea mai simpl i logic metod se refer la pornirea motorului. Acest lucru se realizeaz adugnd urmtoarele linii n cadrul programului:void startMotor() {if (StareMotor == true)System.out.println("Motorul era pornit.");else {StareMotor = true; System.out.println("Motorul este pornit.");}}Metoda startMotor()testeaz dac motorul este deja pornit i ,dac acest lucru este realizat afieaz un mesaj. Dac motorul nu este pornit, modific atributul StareMotor al clasei Motocilceta n starea true i afieaz un mesaj. Deoarece metoda startMotor() nu ntoarce nici o valoare, n cadrul definiiei metodei este inclus cuvntul cheie void.AtenieParantezele utilizate dup numele acestei metode -startMotor() - indic faptul c aceasta nu ntoarce nici o

variabil. Acestea au numai rol de identificator de metod.nainte de compilare s adugm o nou metod care s permit afiarea atributelor unui exemplu al clasei Motocicleta. Metoda Paramteri() listeaz valorile curente ale tuturor variabilelor unui obiect al unei clase Motorcicletavoid Parametri() {System.out.println("Aceasta motocicleta are culoarea "+ culoare + " si este marca" + marca);if (StareMotor == true)System.out.println("Motorul este pornit.");else System.out.println("Motorul este oprit.");}Metoda Parametri() afieaz pe ecran dou linii: marca i culoarea obiectului motociclet, respectiv starea motorului pornit sau oprit.Clasa Java dispune acum de 3 variabile i dou metodejavac Motorcicleta.javaLa rularea clasei Motocicleta, programul Java va afia urmtoarea eroare:In class Motorcicleta: void main(String argv[]) is not definedException in thread "main": java.lang.UnknownErrorExplicaia se datoreaz faptului c Java presupune c respective clas este o aplicaie, motiv pentru care caut metoda principal main(). Deoarece acest metoda nu a fost definit, n interiorul clasei, interpretorul Java a generat respective eroare.Pentru a utiliza aceast clas se construiete un applet sau o aplicaie sau se poate insera o metod main n cadrul respectivei clase. Apelnd la aceast ultim metod n cele ce urmeaz este un exemplu de metod main() ce va fi adugat la clasa Motorcicleta .Metoda main() pentru clasa Motorcicleta.java.1: public static void main (String args[]) {2: Motocicleta m = new Motocicleta ();3: m.marca = "Yamaha RZ350";4: m.culoare = "Galbena";5: System.out.println("Apel al parametrilor clasei...");6: m.Parametri();7: System.out.println("--------");8: System.out.println("Este pornit motorul...");9: m.startEngine();10: System.out.println("--------");11: System.out.println("Apel al parametrilor clasei...");

12: m.Parametri();13: System.out.println("--------");14: System.out.println("Este pornit motorul...");15: m.startEngine();16:}Cu ajutorul acestei metode main() clasa Motorcicleta este o aplicaie Java ce poate fi compilat i rulat fr erori.

n cele ce urmeaz este realizat o analiz amnunit a metodei main().Prima linie va avea o form identic pentru toate aplicaiile n care aceasta va fi folosit:main().Cea de-a doua linie , Motocicleta m = new Motocicleta ();, creaz un nou exemplu al clasei Motorcicleta i memoreaz o referin la aceasta n cadrul variabilei m. Dup cum se observ i aici, n cadrul unui program Java nu se lucreaz direct cu o clas , ci cu obiecte create pe baza acestor clase i apelul metodelor definite pe aceste obiecte.Liniile 3 i 4 seteaz variabilele exemplu pentru obiectul Motocicleta : mai precis marcaYamaha RZ350, iar culoarea Galbena.Liniile 5 i 6 apeleaz metoda Parametri() , definit n cadrul obiectului Motocicleta. Noul obiect Motocicleta m ofer atributele de care dispune pentru a fi listate prin intermediul metodei Parametri().Linia 9 apeleaz metoda startMotor() n cadrul obiectului Motocicleta pentru a porni motorul. StareMotor va fi de acum pornit - true.Linia 11 afieaz din nou valorile curente ale obiectului Motocicleta prin apelul la metodaParametri().

Linia 15 ncerc s porneasc din nou motorul, dar acesta fiind deja pornit, atributul furnizat de obiect duce la afiarea mesajului Motorul era deja pornit.Versiunea finala a programului Motorcicleta.java.1: class Motocicleta2:{3:4: String marca;5: String culoare;6: boolean StareMotor = false;7: void startMotor() {8: if (StareMotor == true)9: System.out.println("Motorul era pornit.");10: else {11: StareMotor = true;12: System.out.println("Motorul este pornit.");13: }14: }15:16: void Parametri() {17: System.out.println("Aceasta motocicleta areculoarea "18: + culoare + " si este marca" + marca);19: if (StareMotor == true)20: System.out.println("Motorul este pornit.");21: else System.out.println("Motorul este oprit.");22: }23:24: public static void main (String args[]) {25: Motocicleta m = new Motocicleta ();26: m.marca = "Yamaha RZ350";27: m.culoare = "Galbena";28: System.out.println("Apel al parametrilor clasei...");29: m.Parametri();30: System.out.println("--------");31: System.out.println("Este pornit motorul...");32: m.startEngine();33: System.out.println("--------");34: System.out.println("Apel al parametrilor clasei...");35: m.Parametri();36: System.out.println("--------");37: System.out.println("Este pornit motorul...");38: m.startEngine();39: }40:}

Motenire, interfee i pacheteMotenireMotenirea este un concept crucial n cadrul programrii pe obiecte. n esen la scrierea unei noi clase este nevoie numai de specificarea elementelor care difereniaz o clas de alt clas anterior format. n acest mod motenirea ofer accesul automat la informaiile existente n cadrul clasei motenite.Prin prisma motenirii, toate clasele create de un utilizator sunt aranjate ntr-o ordine ierarhic strict, relativ la clasele bibliotecilor folosite. Astfel fiecare clas are o superclas - clasa situat deasupra ei n cadul tabloului ierarhic, iar fiecare clas are una sau mai multe subclase (clase situate sub clasa curent n cadrul tabloului ierarhic). Clasele situate n zona inferioar sunt motenite de clasele din zona superioar.Clasa AClasa B

Clasa A este o superclasa pentru clasa BClasa B este subclasa a clasei AClasele C,D,E sunt subclase pentru clasa BClasa B este superclasa pentru clasele C,D,E

Clasa C Clasa D Clasa ETablou ierarhicSubclasele motenesc toate metodele i variabilele de la superclase, ceea ce implic faptul c acel comportament de care este nevoie n interiorul unei clase, nu va mai trebui definit din nou de utilizator, acesta fiind definit anterior n cadrul unei superclase. n felul acesta clasa astfel format devine o motenitoare a comportamentului claselor motenite.Term nouMotenirea este un concept al programrii orientate pe obiecte, prin care toate clasele sunt aranjate ntr-o ordine ierarhic strict. Fiecare clas ierarhic are o superclas, iar toate subclasele motenesc atributele i comportamentul superclaselor.n vrful ierarhiei Java se afl clasa Object; toate clasele motenesc aceast superclas. Object este cea mai general clas ierarhic, definind comportamentul motenit de toate clasele din Java. Fiecare clas aezat ierarhic inferior, motenete aceast clas, i adugnd informaii devine ct mai centrat pe un anumit scop.

Astfel ierarhizarea claselor poate ncepe cu un concept abstract aflat n vrful tabloului de ierarhizare. Pe msur ce se coboar n cadrul organigramei clasele nou realizate concretizeaz conceptual obiectuul ce se dorete a fi implementat.n cadrul programelor Java se dorete realizarea unor clase care motenesc toate elementele altor clase, elemente la care se adaug un plus de informaie. Spre exemplu, dac se dorete realizarea unei noi clase de tip Buton care s dispun de o etichet inclus n cadrul definiiei, se va prelua ca motenire clasa Buton, adugnd la noua clas (ButonNou??) acele elemente care particularizeaz noua clas relativ la clasa motenit. Acest mecanism de definire a unei noi clase prin diferenierea dintre clasa ce se dorete realizat i clasa motenit poart numele de subclasare.Subclasarea implic creearea unei noi clase din alte clase situate ierarhic superior. Utiliznd subclasarea se vor specifica numai diferenele dintre clasa ce se dorete a se forma i clasa motenit.Term nouSubclasarea este procesul de creeare a unei noi clase care motenete superclasele existente.n cazul n care clasa ce va fi format nu motenete nici o alt clas, va fi indicat drept clasmotenitoare clasa generic Object.Crearea unei ierarhii de clasePentru cazul creerii unor structuri largi de clase, n cadrul unor programe complexe, se poate impune ca i aceste clase s dispun de o ierarhizare proprie, care conduce la o organizare optimal a codului Java, dublat desigur de un efort conceptual ce va fi rspltit din plin la finalul programului:La dezvoltarea unei ierarhizri de clase, se poate separa informaia comun mai multor clase, construindu-se o superclas, dup care se poate folosi informaia coninut n superclas de cte ori este nevoie. Fiecare subclas preia informaia comun prin intermediul superclasei sale.Modificarea sau inserarea n zona superioar a unui comportament conduce la modificarea automat a comportamentului subclaselor fr a mai fi nevoie de recompilarea i modificarea celorlalte subclase, deoarece acestea preiau informaia din superclasa comun i nu copiaz o anumit zon care poate fi modificat.Continund exemplul cu construcia clasei Motorcicleta s presupunem c ai implementat un program care modeleaz toate caracteristicile unei motociclete. Dup aceast dorii s construii o nou clas Autoturisme.Autoturisme i Motocicleta dispun de numeroase elemente comune, ambele fiind vehicule acionate de un motor. Ambele dispun de transmisie, semnalizatoare, vitezometre. O soluie ar fi

s deschidei clasa Motocicleta i s copiai informaiile necesare construciei noii claseAutoturisme.O soluie mult mai bun este s introducei ambele clase ntr-o clas mult mai general. Poate nu se justific numai pentru 2 clase, dar dac vei fi nevoii s construii i alte clase cum ar fi Bicicleta, Scoter, Camion, i altele, care dispun de elemente reutilizabile importante, atunci efortul se dovedete a fi necesar.Un exemplu de clas general este clasa Vehicol. Un vehicol, n general etse definit a fi un mijloc de deplasare dintr-un loc n altul. n cadrul acestei clase se poate descrie comportamentul acestei clase de a permite deplasarea cuiva dintr-un punct a ntr-un punct b. Aceast clas motenete numai caracteristicile clasei Object.Sub Vehicol? Pot fi introduce dou noi clase: VehicolCuTractiuneUman i VehicolCuMotor.VehicolCuMotor este diferit de Vehicol deoarece are un motor, iar comportarea sa include pornirea i oprirea motorului, existena unui combustibil, schimbarea vitezelor. VehicolCuTractiuneUman dispune de un sistem de transmisie a micrii de la om la vehicol, de exemplu prin intermediul pedalelor.ObiectVehicolVehicoCuTtraciuneUman VehicolCuMotorS ncercm acum s particularizm o serie de subclase sau exemple ale clasei VehicolCuMotor. Din aceast clas pot fi derivate urmtoarele clase: Motocicleta, Autoturism, Camion i altele. Mai mult , poate fi divizat aceast clas n alte dou csubclase, care s poat ngloba mai multe atribute comune: VehicolCuDouaRoti i VehicolCuPatruRoti.VehicolCuMotorVehicolCuDouaRoti VehicolCuPatruRotiScuter Moped Motocicleta Autoturism Camion

Continund acum cu exemple de subclase sau incidene, putem aduga la clasaVehicolCuDouaRoti subclasele: Motocicleta, Scuter, Moped.Atributele referitoare la culoare sau marc vor putea fi integrate acum n cadrul clasei de vehicul, care derivat va forma alte instane ale respectivei clase.Ce aciune are motenireaAcest punct rspunde la ntrebarea legat de ce reprezint motenirea i cum se explic faptul co instan preia n mod automat variabilele i metodele unei clase situate ierarhic superior.La formarea unui exemplu sau instan a unei clase, efectiv vei particulariza variabilele instanei definite prin intermediul clasei curente, la rndul su definit n cadrul superclasei din care provine. Astfel toate clasele sunt combinate pentru a forma un model al obiectului curent, iar fiecare obiect preia informaiile specifice unei situaii concrete.Metodele opereaz n mod similar. Noile obiecte dispun de acces total la metodele claselor sau superclaselor utilizate dar definirea i utilizarea acestora se realizeaz prin apelul dinamic al acestora. ncercnd s oferim o definiie plastic prin supercalse i clase se creeaz limbajul propriu problemei, iar n cadrul construciei clasei curente etse folosit respectivul limbaj, fr a mai fi nevoie de explicarea termenilor (prin structuri program - desigur). La apelul unei metode a unui obiect particular, Java verific dac respectiva metod este definit n cadrul clasei curente, dup care, dac respectiva definiie nu a fost gsit, cutarea are loc ntr-una dintre clasele importate sau superclase componente.

Un caz particular este situaia n care definiia unei metode are accelai nume, numere, argumente ca i o metod definit ntr-o superclas. n acest caz este valabil prima definiie ntlnit plecnd de la obiectul curent spre vrf (spre superclasa 0 sau supercalsa Object). Aceast

modalitate poart numele de renscriere a metodei i poate fi realizat intenionat pentru a ascunde anumite aciuni ale metodei definite n cadrul superclasei.Term nouSupranscrierea este o metod de creeare a unei metode n cadrul unei sublase care are aceeai semntur ca i o metod din cadrul unei supercalse. Noua metod ascunde metoda definit n cadrul superclasei.

Motenire simpl i motenire multiplTipul de motenire permis de Java este motenirea simpl. Mai precis fiecare clas poate avea o singur superclas pe care s o moteneasc. Superclasele pot avea ns nenumrate subclase.n alte limbaje orientate pe obiecte, cum ar fi C++, clasele pot avea mai multe superclase, lucru care ofer o mulime de variabile i metode disponibile pentru respectiva clas, dar, totodat apare i riscul unor probleme sporite datorit definiiilor multiple. Acest tip de motenire poart numele de motenire multipl.Interfee i pacheteMotenirea simpla permis de Java, chiar dac ofer o claritate deosebit n ceea ce privete implementarea claselor, atunci cnd o anumit metod sau comportament trebuie s fie copiate n cadrul a diferite ramuri ale ierarhiei claselor se dovedete a impune o serie de limitri. Rezolvarea acestei probleme este posibil prin utilizarea unui nou concept interfeele. Acestea colecteaz numele metodelor ntr-un singur loc permind adugarea acestor metode ca un grup pentru clasele ce au nevoie de ele. Interfeele conin numai numele metodelor i eventual argumentele, fr a conine i definiiile.

Chiar dac o clas Java dispune de o singur superclas, aceasta poate implementa un numr orict de mare de interfee. O clas preia metode intermediul interfeei. Dac dou clase diferite implementeaz aceeai interfa, ceea ce nseamn c acestea rspund la aceleai metode, acest lucru nu nseamn c i rspunsul va fi identic.Termen NouO interfa este o colecie de nume de metode, fr definiii, ce pot fi adugate la clase pentru a furniza un comportament suplimentar neinclus n cadrul definiiei clasei sau in definiiile superclasei sau superclaselor anterioare.Pachetele constituie un mod de grupare a unor clase nrudite sau interfee ntr-o singur bibliotec sau colecie. Acestea constituie grupuri modulare de clase, disponibile acolo unde este nevoie de ele sau utilizate pentru a elimina conflictele poteniale dintre numele claselor din diferite grupuri.Principalele elemente caracteristice ale pachetelor sunt:Clasele bibliotecii Java sunt incluse n cadrul pachetului numit java. Aceste clase sunt disponibile n orice implementare JavaToate clasele Java sunt disponibile numai n java.lang (pachetul de baz din cadrul Kitului Java). Pentru a utiliza aceste clase i n alte implementri, va trebui ca respectivul pachet s fie importat sau referit explicit.Referirea la o clas din interiorul unui pachet se realizeaz prin numele pachetului separat de un punct (.) urmat de numele clasei. Spre exemplu folosirea clasei Color , coninute n pachetul awt (awt de la Abstract Windowing Toolkit), din cadrul pachetului java , se realizeaz prin urmtoarea specificare java.awt.Color.Crearea unei SubclaseUn exemplu de creeare a unei subclase va fi realizat utiliznd primul exemplu de applet Java realizat, cunoscutul HelloJava. Toate appletele sunt subclase ale clasei Applet (parte a pachetului java.applet).n cadrul exemplului urmtor va fi creeat un applet HelloJavaAgain, care va permite afiarea unui ir de caractere cu un font diferit i o culoare diferit. Declaraia urmtoare permite construcia unei clase, din superclasa Applet, subpachetul, applet, pachetul java, clas accesibil tuturor claselor din cadrul clasei utilizator care va fi creeat.public class HelloAgainApplet extends java.applet.Applet {}n acest mod a fost creeat o subclas numit HelloAgainApplet. Cuvntul cheie extends urmat de pachetul, clasa java.applet indic faptul c aceast clas este o subclas a

clasei Applet. Deoarece clasa este inclus n pachetul java.applet trebuie specificat numele respectivei clase n mod explicit.Referitor la cuvntul cheie public, pe lng accesibilitatea pe care o permite tuturor claselor ce intr n componena aplicaiei curente, acest cuvnt devine obligatoriu n cazul creerii de applete.Pentru creearea unei noi clase, aceasta va trebui s dispun de noi elemente (cum ar fi: atribute, metode), fa de superclasa pe care o motenete. Noile metode sau atribute vor fi inserate ntre acoladele care urmeaz declaraiei de clas.n cadrul acestei aplicaii va fi adugat o variabil de instan obiectul Font :Font f = new Font("TimesRoman", Font.BOLD, 36);Aceast nou variabil de instan este parte component a pachetului java.awt . Particularizarea obiectului Font n acest caz este fontul Times Roman , bold, cu nlimea de 36 de puncte. Aceast variabil de instan, mai precis aceast instan va implica ca toate font-urile utilizate n cadrul metodelor urmtoare s fie de tip f.Aa cum s-a descries, anterior, evoluia appletelor, o metod standard inclus n clasa applet este metoda paint() care permite afiarea propriu-zis a applet-ului pe ecran. Rescrierea metodei paint(), va indica applet-ului ce s deseneze pe ecran:public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red);g.drawString("Hello Java din nou!", 5, 40);}Se cuvin a fi realizate dou observaii n legtur cu metoda paint() :Prima observaie este ca metoda este declarat public. Chiar dac metoda din cadrul clasei applet este declarat iniial public, la renscriere aceasta va trebui declarat din nou public, n caz contrar aprnd o eroare de compilare.Cea de-a doua observaie se refer la argumentul metodei, reprezentat de o instan a clasei Graphics. Clasa Graphics ofer o platform independent pentru utilizarea fonturilor, culorilor, metodelor i comportamentelor pentru trasarea liniilor i diverselor forme.n cadrul metodei paint() se declar trei elemente: Fontul implicit utilizat de metod va fi oferit de variabila de instan f.Culoarea de desenare implicit va fi o instan a clasei Color, mai precis culoarea roie - red. Cel de-al treilea element este trimiterea spre afiarea pe ecran a irului de caractere"Hello Java din nou!" ncepnd cu poziia x = 5, respectiv y = 25.

Totodat se cuvine a remarca faptul c obiectele Graphics i Font aparin unui pachet care nu este inclus n cadrul pachetului implicit java.lang sau la clasa definit ca superclas (- java.applet.Applet -), n definiia clasei curente.Soluionarea acestei probleme se face prin indicarea ntregului pachet care conine clasele respective, fie prin indicarea claselor numai care vor fi importate din cadrul pachetului. Se reamintete c importarea unui pachet dureaz mult mai mult timp, ncrcnd memoria calculatorului cu elemente inutile, care nu vor fi utilizate n cadrul aplicaiei curente. Clasele ce vor trebui importate sunt Graphics, Font i Color, fcd parte din pachetul java.awt:import java.awt.Graphics; import java.awt.Font; import java.awt.Color;ObservaieImportarea unui pachet public se realizeaz prin utilizarea unui asterisk (*) n locul specificaiei de nume de clas. n exemplu anterior:import java.awt.*;n aceste condiii forma final a appletului HelloJavaAgain.java va avea urmtoarea structur:1:import java.awt.Graphics;2:import java.awt.Font;3:import java.awt.Color;4:5:public class HelloJavaAgain extends java.applet.Applet {6:7: Font f = new Font("TimesRoman",Font.BOLD,36);8:9: public void paint(Graphics g) {10: g.setFont(f);11: g.setColor(Color.red);12: g.drawString("Hello Java din nou!", 5, 40);13: }14:}Fiierul HTML care apeleaz -ul va avea urmtoarea form:

Appletul Hello Java Again

Nou applet Java va transmite:


Atenie att fiierul class, ct i fiierul HTML vor trebui localizai n cadrul aceluiai director. Salvai fiierul HTML cu numele HelloJavaAgain.html i ncrcai-l ntr-un browser compatibil Java. Rezultatul va fi urmtorul:

sau utiliznd appletviewer:

BreviarElementele de baz ale programrii orientate pe obiecte sunt enumerate n continuare:

clas: un model pentru obiecte, care conine variabile i metode care reprezintatribute i comportamente. Clasele motenesc variabile i metode de la alte clase.Metoda unei clase: Metod definit n cadrul unei clase. Aceasta opereaz n cadrul clasei, putnd fi apelat prin intermediul clasei sau prin intermediul unor instane.Variabilele unei clase: Acest tip de variabil aparine unei clase i tuturor instanelor acestei clase, fiind memorat n cadrul clasei.Instan: sau exemplu. Are aceeai semnificaie cu obiect. Fiecare obiect este o instan a unei clase.Metoda unei instane: O metod definit n cadrul unei clase, care opereaz cu instanele respectivei clase: Metoda unei instane este denumit, n mod usual, metod.Variabilele unei instane: O variabil care caracterizeaz o instan i a crei valoare este memorat n cadrul instanei.Interfa: O colecie de comportamente abstracte care pot fi implementate de ctre anumite clase.Obiect: O instan concret a unei clase. Mai mult obiecte care sunt instane ale aceleiai clase au acces la aceleai metode, cu observaia c dispun de diferite valori pentru variabilele de instan.Pachet: O colecie de clase i interfee. Clasele din cadrul altor pachete dectjava.lang trebuie specificate n mod explicit prin numele lor sau importate.Subclas: O clas situat inferior n cadrul ierarhiei ereditare, avnd ca printe o superclas. Creearea unei noi clase, poart numerele de subclasare.Superclas: O clas situat superior, n cadrul arborelui de motenire, oferind subclaselor motenitoare metodele sale, respective variabilele sale.Concluzii1: Metodele sunt de fapt funcii definite n interiorul unei clase. Cu toate acestea ele poart numele de metode i nu de funcii deoarece n cadrul limbajului Java, metodele acionaez numai n interiorul claselor, n timp ce funciile acioneaz n afara claselor.2:n cadrul programrii Java, se opereaz cu obiecte. Anumite attribute sau comportamente, fiind legate de caracterizarea global a unei categorii de obiecte, devin elemente constituiente ale clasei caracteristice. Pentru caracterizarea unei instane se vor specifica attribute, respective metode specifice.