Obiectul "Un sir de caractere" exista intr-un singur exemplar
si avemdoua referinte s1 si s2 prin care obiectul poate fi accesat.
client: cel care cere realizarea unei sarcini
( cel care trimitemesajul )
server: cel care executa sarcina (cel care receptioneaza
mesajul)
Acelasi obiect poate fi odata client, iar dupa aceea server. Existatotusi
obiecte tipice client cum ar fi obiectele de tip control si obiectetipice
server, obiecte de tip baza de date. In literatura de specialitateputem sa
intalnim si denumirile:
ACTOR: care cere numai
AGENT: care cere si executa
Mesajele au rolul de a activa obiecte si realizeaza schimb de informatieintre
obiecte. Raspunsul la un anumit mesaj se obtine prin valoareareturnata
de catre metoda sau prin parametrii transmisi ca referint
Pentru fiecare clasa utilizata in aplicatia noastra se creaza un obiectde
tip Class(java.lang.Class) care tine evidenta obiectelor instantiate
din clasele respective. Un obiect poate sa spuna din ce clasa este instantiata.
Exemplu:
String s="Un sir de caractere";
Class c=s.getClass(); //getClass()
- Returneazaun obiect de tip Class
System.out.println( c.getName()); //getName() - Returneaza
un obiectde tip String
Un constructor de tip Java pentru o fereastra ar avea
forma:
Fereastra( int Fx, int Fy, int FLatime, int FInaltime )Caracteristicile metodei constructor:
{
x0 = Fx; y0 = Fy;
Latime = FLatime; Inaltime = FInaltime;
}
- poarta numele clasei
- nu returneaza nici un tip de date
- poate avea o lista de parametri
- o clasa poate avea mai multi constructori
De multe ori la distrugerea obiectelor avem nevoie de dezalocarea resurselor alocate pentru obiect. In C++ dezalocarile sunt facute de catre o metoda speciala numita si destructor. In Java dezalocarea memoriei (alocata cu new) se face de catre Garbage Colector dupa ce nu mai exista nici o referinta a respectivul obiect. Exista insa si metode native pentru care alocarea memoriei nu s-a facut cu metoda new si in afara de memorie exista si alte resurse alocabile obiectelor: fisiere, conexiuni retea. Pentru dezalocarea acestor resurse Java pune la dispozitie metoda finalize, mostenita din clasa Object si care are urmatoarea signatura:
protected void finalize() throws Throwable{}
Aceasta metoda este apelata de runtime system inainte ca memoria alocata obiectului respectiv sa fie dezalocata de Garbage Colector. Colectorul de gunoi de ruleaza pe un fir de executie demon si nu se stie de dinainte cand va fi planificat pentru executie. Se stie ca metoda finalize se apeleaza inainte ca zona de memorie sa fie reutilizata.
Clasa System insa are o metoda gc() care forteaza executia Garbage Collector si se foloseste impreuna cu runFinalization(). Aceasta metoda forteaza executia metodelor finalize() a obiectelor care nu mai sunt referintiate, dar inca n-au fost finalizate. Cu ajutorul unei alte metode runFinalizerOnExit() putem seta flag-ul care indica masinii virtuale daca sa execute sau nu metodele finalize la exit, adica la terminarea executiei masinii virtuale.
public static void gc()
public static void runFinalization()
public static void runFinalizerOnExit()
Ascunderea informatiei inseamna ca obiectul isi ascunde problemele interne.Datele din interiorul obiectelor sunt accesibile doar prin metode publice.Astfel cei neautorizati nu pot patrunde in interiorul obiectului.
Diagrama de clase:
Sursa Java:
public class TControl{
public
TControl(){
TStiva s1, s2;
int i;
s1 = new TStiva( 10 );
s2 = new TStiva( );
for( i=0; i<10; i++)
s1.push( i );
while( ! s1.empty() )
System.out.println( Integer.toString( s1.pop()));
for( i=10;i<15;i++){
s2.push( i );
System.out.println( Integer.toString( s2.top()));
}
}
public
static void main(String args[] ){
TControl contro = new TControl();
}
}
class TStiva{
int
st[];
int
sp;
int
dim;
public
TStiva( int pdim){
dim = pdim;
st = new int[ dim ];
sp = -1;
}
public
TStiva( ){
dim = 100;
st = new int[ dim ];
sp = -1;
}
public
void push( inte ){
sp++;
st[ sp ] = e;
}
public
int pop(){
sp--;
return st[ sp+1 ];
}
public
int top(){
return st[ sp ];
}
public
boolean empty(){
return sp==-1;
}
}