4
3.3 Java - limbaj orientat obiect Java este un limbaj orientat obiect. El a fost prezentat astfel de către creatorii lui şi nu poate exista nici un dubiu în această privinţă. Cu diferenţe, adăugiri dar, moştenind principalele caracteristici ale unui astfel de limbaj, Java este o dovadă a actualităţii POO. 3.3.1 Definirea unei clase O nouă clasă poate fi definită ajutându-ne de cuvântul rezervat “class”. class NumeClasa { //membrii clasei } Membrii clasei pot fi date membre sau/şi funcţii membre. Datele membre se declară ca orice variabilă normală : int dataMembra; Funcţiile membre sunt definite astfel : tip nume_functie (tip argumente) { //declaratie } Există câteva caracteristici cu privire la clase Java pe care le voi aminti aici. În primul rând, spre deosebire de alte limbaje în Java acesta este singurul mod de a defini noi tipuri (class Nume Class). Apoi, funcţiile membre nu pot fi definite decât în interiorul clasei de care ţin şi nu în exterior aşa cum este posibil în C/C++. Nu în ultimul rând, trebuie amintit faptul că numele fişierului ce conţine 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 operaţie asupra unui obiect este de ajuns să declarăm obiectul ca apaţinând clasei respective şi apoi să-i atăşăm metoda respectivă :

Java_pici

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.