Upload
vitalik-balanici
View
215
Download
0
Embed Size (px)
DESCRIPTION
Java Limbaj Orientat pe obiect
Citation preview
3
3.3 Java - limbaj orientat obiect
Java este un limbaj orientat obiect. El a fost prezentat astfel de ctre creatorii lui i nu poate exista nici un dubiu n aceast privin. Cu diferene, adugiri dar, motenind principalele caracteristici ale unui astfel de limbaj, Java este o dovad a actualitii POO.
3.3.1 Definirea unei clase
O nou clas poate fi definit ajutndu-ne de cuvntul rezervat class.
class NumeClasa
{
//membrii clasei
}
Membrii clasei pot fi date membre sau/i funcii membre. Datele membre se declar ca orice variabil normal :
int dataMembra;
Funciile membre sunt definite astfel :
tip nume_functie (tip argumente)
{
//declaratie
}
Exist cteva caracteristici cu privire la clase Java pe care le voi aminti aici. n primul rnd, spre deosebire de alte limbaje n Java acesta este singurul mod de a defini noi tipuri (class Nume Class). Apoi, funciile membre nu pot fi definite dect n interiorul clasei de care in i nu n exterior aa cum este posibil n C/C++. Nu n ultimul rnd, trebuie amintit faptul c numele fiierului ce conine o anumit clasa Java trebuie s fie identic cu numele clasei.
n general, o clas este definit pentru a putea lucra cu obiectele ce fac parte din aceea clas. Un obiect poate fi declarat astfel :
Copii copilulMeu = new Copii( );
Pentru a provoca o operaie asupra unui obiect este de ajuns s declarm obiectul ca apainnd clasei respective i apoi s-i atm metoda respectiv :
int varsta = copilulMeu.Varsta( );
3.3.2 Controlul accesului
Java stabilete accesul la clase i membrii acesteia cu ajutorul a trei cuvinte rezervate : public, private i protected.
Dac un membru nu este marcat de nici unul din aceti specificatori este considerat implicit friendly. Domeniul friendly n Java este cel al pachetelor, adic orice dat declarat friendly este accesibil direct n cadrul aceluiai pachet (acelai fiier surs).
O clas public sau un membru public este accesibil tuturor claselor din toate pachetele (fiierele). Componentele private sunt accesibile numai membrelor clasei n care au fost definite. Componentele protected sunt accesibile n orice clas din pachetul crei aparine clasa n care este declarat. n acelai timp, componenta este accesibila n toate subclasele calsei date, chiar dac ele apain altor pachete.
3.3.3 Fr pointeri
Un pointer este o variabil ce conine adresa altei variabile. O caracteristic important a limbajului este lipsa pointerilor. Java nu are pointeri explicii, dar ofer n schimb referine. S vedem cum putem nlocui pointeri cu facilitile oferite de Java.
Considerm clasa Copii i s crem un obiect al acestei clase.
Copii copilului_meu = new Copii ( );
S mai definim un alt obiect astfel:
Copii copilul_sotiei_mele = copilul_meu;
n acest moment copilul_soiei_mele i copilul_meu refer acelai obiect din clasa Copii. Este ca i cum cei doi prini i numesc copilul n moduri diferite. Dac programul schimb atributele unuia din obiecte va fi schimbat i atributul celuilalt.
copilul_meu.varsta = 4;
copilul_sotiei_mele.varsta = 8;
// acum avem copilul_meu.varsta egal cu 8
Un exemplu de utilizare a referinelor este clasa de mai jos. Aceasta reprezint implementarea n Java a unei liste simplu nlnuit.
public class Lista
{
// referinte catre cap si coada
private static Lista m_cap = null;
private static Lista m_coada = null;
//referinte catre urmatorul element,
//respectiv catre obiectul stocat in lista
private Lista m_next;
private Copii m_obiect;
//adauga un element la lista
public static void Adauga(Copii copil)
{
//creeaza un nou element
Lista ll = new Lista();
//seteaza referintele
ll.m_obiect = copil;
ll.m_next = null;
//if (m_cap == null)
{
//acesta este singurul element al listei
m_cap = ll;
m_coada = ll;
}
else
{
//adauga la sfarsit
m_coada.m_next = ll;
m_coada = ll;
}
}
}
S urmrim construcia clasei. Dou date membre speciale, m_cap i m_coada, refer prima, respectiva ultima component din list. Cum aceast clas definete o singur list vom considera cele dou date ca fiind statice.
La rndul su, fiecare nod are dou referine : m_obiect, m_next. Primul refer obiectul clasei Copii iar cel de al doilea urmtorul element al listei.
Am vzut c putem crea noi obiecte fr a ne interesa s scpm de ele mai t=rziu, chiar dac devin inutile. Acest lucru este realizat automat de Java cu ajutorul unui sistem de garbage collection. Astfel un obiect Java poate fi ters n urmtoarele cazuri :
1) De cte ori este nevoie. Cnd memoria heap este aproape plin, programul se oprete i pornete garbage collection pentru a crea ct mai mult spaiu posibil.
2) De cte ori acest lucru este cerut. Programatorul poate fora garbage collection cu System.gc. Un astfel de exemplu este dat n clasa Nod prezentat n listing-ul WebOnWeb din Anexa 2
3) De cte ori se poate. Java caut in background, n mod continuu, obiectele ce ar putea fi eliminate. Aceast operaie este diferit de prima prin faptul c nu implic slbirea performanelor sistemului.
Prezena n Java a sistemului garbage collection este o explicaie a lipsei desctructorilor din interiorul unei clase.