Download doc - Java_pici

Transcript

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.