Sunteți pe pagina 1din 21

Obiecte, metode, clase

Coninut

A gndi utiliznd obiecte: Analogii


Obiecte i clase
Comportament i atribute
o Atribute
o Comportament
o Crearea unei clase
Motenire, interfee, pachete
o Motenire
o Crearea unei structuri de clase ierarhizate
o Ce nseamn motenire ?
o Motenire singular i motenire multipl
o Interfee i pachete
o Exemplu de creeare a unei subclase
Breviar
Concluzii

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
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 ele


Ce rol au cele dou pri importante ale unei clase sau obiect: atributele i
comportamentul
Ce nseamn motenirea unei clase i cum afecteaz aceasta modul de proiectare al
programelor
Ce semnificaie au pachetele i interfee

A gndi utiliznd obiectele: o analogie


Pentru 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 celelalte

Obiecte i Clase
OOP 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.


Definiie
Prin 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.
Definiie
Un 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 Nou
O 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 atribute
Fiecare 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.

Atribute
Atributele 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 obiectului
Atribut i
comportament

Bec
Aprins

Da
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,


Tip: sport, standard, dragster
Marc: Honda, BMW, Bultaco

maro

Ca 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.
Definiie
Variabilele 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.

Comportament
Un 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
Decelerare

Pentru 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 nou
Metodele 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 clase


Pentru 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 Nou
O 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.
Atenie
Parantezele

utilizate dup numele acestei metode indic faptul c aceasta nu ntoarce nici o

startMotor() -

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 Motorcicleta
void 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:


motociclet, respectiv starea motorului pornit sau oprit.

"

marca i culoarea obiectului

Clasa Java dispune acum de 3 variabile i dou metode


javac Motorcicleta.java

La rularea clasei Motocicleta, programul Java va afia urmtoarea eroare:


In class Motorcicleta: void main(String argv[]) is not defined
Exception in thread "main": java.lang.UnknownError

Explicaia 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:
13:
14:
15:
16:}

m.Parametri();
System.out.println("--------");
System.out.println("Este pornit motorul...");
m.startEngine();

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 marca
Yamaha 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 metoda
Parametri().

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 Motocicleta
2:{
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 are
culoarea "
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:}

10

Motenire, interfee i pachete


Motenire
Motenirea 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 A

Clasa B

Clasa C

Clasa D

Clasa A este o superclasa pentru clasa B


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

Clasa E

Tablou ierarhic
Subclasele 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 nou
Motenirea 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.

11

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 nou
Subclasarea 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 clas
motenitoare clasa generic Object.

Crearea unei ierarhii de clase


Pentru 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.
i Motocicleta dispun de numeroase elemente comune, ambele fiind vehicule
acionate de un motor. Ambele dispun de transmisie, semnalizatoare, vitezometre. O soluie ar fi
Autoturisme

s deschidei clasa Motocicleta i s copiai informaiile necesare construciei noii clase


Autoturisme.
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.
este diferit de Vehicol deoarece are un motor, iar comportarea sa include
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.
VehicolCuMotor

pornirea

Obiect
Vehicol
VehicoCuTtraciuneUman

VehicolCuMotor

S 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.

VehicolCuMotor

VehicolCuDouaRoti

Scuter

Moped

VehicolCuPatruRoti

Motocicleta

Autoturism

Camion

Continund acum cu exemple de subclase sau incidene, putem aduga la clasa


VehicolCuDouaRoti 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 motenirea


Acest punct rspunde la ntrebarea legat de ce reprezint motenirea i cum se explic faptul c
o 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 nou
Supranscrierea 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 multipl


Tipul 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 pachete
Motenirea 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 Nou
O 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 Java
Toate 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 Subclase


Un 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 fonturile 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()
elemente:

se declar trei

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;

Observaie
Importarea 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 <APPLET> -ul va avea urmtoarea form:


<HTML>
<HEAD>
<TITLE>Appletul Hello Java Again</TITLE>
</HEAD>
<BODY>
<P>Nou applet Java va transmite:

<BR><APPLET CODE="HelloJavaAgain.class" WIDTH=300 HEIGHT=50>


</APPLET>
</BODY>
</HTML>

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:

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

clas: un model pentru obiecte, care conine variabile i metode care reprezint
atribute 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 dect
java.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.

Concluzii
1:

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.

S-ar putea să vă placă și