You are on page 1of 8

Conceptele programarii orientate obiect

1. Caracterizarea obiectului
2. Starea obiectului
3. Identificarea obiectului
4. Clasa, instanta
5. Starile unui obiect
6. Proprietatea de incapsulare;Ascunderea informatiei
7. Exemplu: Stiva deintregi

1. Caracterizarea obiectului

Obiectul stocheaza informatie si executa anumite sarcini la cerere. Un obiect este


format din date (atribute) si metode (operatii).
Obiect=Date+Cod
Metodele de fapt sunt rutine care lucreaza cu datele obiectului. Siacum sa consideram
obiectul Om. Un om poate fi caracterizat de nume, dedata nasterii, de inaltime, adresa.
Sunt si alte caracteristici ale omului,dar pentru a rezolva problema noastra e de ajuns
sa le consideram doarpe acestea. Acum discutam cateva metode prin care se manifesta
obiectul nostru. De exemplu oamenii se muta din cand in cand. Odata cu mutarea seva
schimba si adresa omului. Omul poate sa creasca in inaltime pana lao anumita varsta.
Deci obiectul om poate fi caracterizat prin:
Date: nume, data nasterii, inaltime, adresa
Metode: se_muta( adresa noua ), creste( inaltime_noua )

Pana acum am descris o abstractizare a omului, care va fi un tip nou. Acum sa


consideram un exemplu concret, adica un obiect de tip om.

Un alt exemplu. Vom incerca sa caracterizam ferestrele de pe ecran. Unobiect de tip


fereastra poate fi caracterizat prin urmatoarele date simetode:
Date:
x0,y0: coordonatele coltului stanga-sus, intregi
latime, inaltime: intregi
Metode:
afisare()
ascundere()
stergere()

2. Starea obiectului

Este formata din valorile actuale ale datelor. Dupa apelul anumitor metode (ale celor
care modifica campurile de date) starea obiectului se poatemodifica. Doua obiecte se
afla in aceeasi stare daca valorile campurilorde date coincid.
Exemplu:
Om Om("Ioan",32) si

3. Identificarea obiectului

Doua obiecte pot fi in aceeasi stare, dar ele nu pot fi identice, deoarece adresa lor in
memorie difera. Obiectele sunt identificate prin referinte. Doua referinte pot referi
acelasi obiect.
Exemple:
String s1 ="Un sir de caractere";
String s2 = s1;

// Doua referinte la un singur obiect


Om o1 = new Om("Pop Ioan",1960,182,"Tg-Mures");
Om o2 = o1;

Obiectul "Un sir de caractere" exista intr-un singur exemplar si avemdoua referinte s1
si s2 prin care obiectul poate fi accesat.

4. Clasa, instanta

Clasa unui obiect este un tip de data pe baza caruia se pot crea instante din clasa
respectiva. Aceste instante sunt obiecte.
Daca doua obiecte sunt in aceaasi stare atunci la aceaasi cerere reactioneaza la fel.
Cererile se realizeaza prin trimiterea anumitor mesaje obiectului. Mesajele au forma
urmatoare:
referinta_obiect.nume_metoda()

Pentru fiecare obiect se aloca memorie pentru datele obiectului, darmetodele sunt
utilizeaza in comun de catre diferite instante.
Un obiect poate sa ceara de la un alt obiect realizarea unei sarcini.Mesajele sunt de
fapt apeluri de metode publice ale claselor. Metodelepublice sunt metode accesibile de
catre celelalte obiecte. Un obiect poatesa contina si metode private, metode care nu
sunt accesibile din afara.In cazul clasei Fereastra metodele afiseaza() si sterge() trebuie
sa fiemetode publice, iar daca am dori desenarea unui chenar in jurul ferestreiaceasta
am putea-o defini ca o metoda privata.
Obiectele comunica prin mesaje si rolurile sunt distribuite in modulurmator:

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

5. Starile unui obiect

Ca si variabile, obiectele au un ciclu de viata. Se nasc, sunt initializate, dupa care pot fi
inactive sau pot fi activate si dupa aceea mor. Numelemetodei care initializeaza
obiectul difera de la un mediu de programarela altul:
C++, Java: constructor,o metoda cu numele clasei cu o lista de parametri si fara
tipreturnat. Constructorul are sarcina de a aloca memorie pentru campurilede date si de
a le initializa acestea.
Turbo Pascal: Init()
Delphi: Create()

Un constructor de tip Java pentru o fereastra ar avea forma:

Fereastra( int Fx, int Fy, int FLatime, int FInaltime )


{
x0 = Fx; y0 = Fy;
Latime = FLatime; Inaltime = FInaltime;
}
Caracteristicile metodei constructor:
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()

6. Proprietateade incapsulare. Ascunderea informatiei

Incapsularea inseamna ca datele se definesc impreuna cu codul care actioneaza asupra


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

7. Exemplu
Sa se scrie o aplicatie care defineste o clasa stiva si instantieaza obiecte din aceasta
clasa.
Diagrama de obiecte:

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;
}
}

You might also like