Sunteți pe pagina 1din 5

Programarea Orientată spre Obiecte, Limbajul Java, 2019-2020 CEITI

Tema1. Stiluri de organizare a codului unui program. Clase și Obiecte. Sintaxă și semantică.
Care sunt stilurile de programare?
Ca urmare a dezvoltării aplicațiilor software se impune o organizare cât mai eficientă a
codului sursă astfel încât acesta să fie mai ușor de întreținut și înțeles. Dea lungul timpului au
fost dezvoltate mai multe stiluri de programare :
a) Programarea nestructurată:
 Programe simple, mici ca dimensiune;
 Utilizat de programatori începători;
 Date și instrucțiunile se găsesc în programul principal, într-o unitate de compilare;
 Cu cât codul devine mai lung cu atât mai greu este de întreținut;
 Mult cod duplicat;
Exemple: Cobol, Assembler, C, Pascal, Fortran, Basic, QBasic, ș.a
b) Programarea procedurală :
 Se bazează pe noțiunea de subprogram (proceduri, funcții);
 Codul este mai bine organizat cu o funcționalitate mai bine precizată;
 Codul devine mai complicat însă poate fi reutilizat;
 Modificarea subprogramelor nu afectează restul programului;
Exemple: C, C++, Pascal, Fortran, Algol, ș.a
c) Programarea modulară :
 A apărut în urma creșterii dimensiunilor programelor, iar simpla organizare a
codului sub formă de proceduri nu mai era eficientă;
 Se bazează pe unități de compilare ce grupează subprograme ce permit rezolvarea
problemelor dintr-un anumit domeniu;
 Îmbunătățește lucrul cu reutilizarea codului;
Exemple: C++, Pascal,Modula2, Ada, ș.a
d) Programarea orientată spre obiecte :
 Tendință nouă de programare;
 Programele sunt organizate ca colecții de obiecte ce cooperează între ele;
 Modelează obiecte din lumea reală;
 Programele sunt mult mai complexe și ușor de întreținut și modificat;
 Simplifică lucrul în echipă la un program;
 Se bazează pe principiile POO: încapsulare, moștenire, polimorfism, abstractizare;
Exemple: C++, Simula, Smalltalk, Java, ș.a

Care sunt principiile POO?


Limbajul Java este un limbaj actual, de nivel înalt cu o popularitate imensă. Inițial a fost
numit OAK dezvoltat de compania JavaSoft, de către James Gosling, în cadrul firmei
SunMicrosystems, în 1995. Are la bază cele 4 principii ale Programării Orientate spre Obiecte:
Abstractizare - Reprezintă posibilitatea ca un program să ignore unele aspecte ale
informației pe care o manipulează, adică oferă posibilitatea concentrării
asupra esențialului, dintr-un anumit punct de vedere;
Moștenire - Oferă posibilitatea de a proiecta noi clase folosind clase deja existente;
- Clasa derivată moștenește variabilele și metodele clasei de bază;
- În Java o clasă nu poate extinde (moșteni) direct mai multe clase.

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


1
Programarea Orientată spre Obiecte, Limbajul Java, 2019-2020 CEITI
Polimorfism - Etimologic , cuvântul polimorfism provine din limba greacă, de la polys
(multe) și morphos (forme);
- În POO, prin polimorfism se înțelege posibilitatea ca, prin apelarea unei
funcții, să obținem efecte diferite, în fucție de contextul apelului. De
exemplu, pentru toate figurile geometrice putem calcula aria, însă
pentru fiecare din ele se calculează diferit;
Încapsulare - Reprezintă proprietatea obiectelor de ași ascunde o parte din date și
metode. Din exteriorul obiectului sunt accesibile (”vizibile”) numai
datele și metodele publice.

Programarea Orientată spre Obiecte se bazează pe 2 concepte primare: obiecte și clase.


Ce sunt obiectele?
Obiectul în programare este un modul de program ce îndeplinește următoarele cerințe
principale:
- întrunește date și are comportament;
- posedă proprietăți de moștenire, încapsulare şi polimorfism.
Obiectele sunt construite pe baza unor șabloane numite clase.

Ce sunt clasele?
O clasă este o structură ce încapsulează date şi funcționalitate.
O clasă în POO întrunește toate obiectele de una şi aceeași natură. Descriu caracteristicele
obiectelor şi ceea ce știu acestea să facă. Obiectele care aparțin uneia şi aceleiași clase au
una şi aceeași structură şi comportament.
O clasă este un tip abstract de date definit de programator. Atunci când definim o clasă nouă
creem un nou tip de date. În clasă sunt descrise câmpurile de date şi metode sub formă de
funcții membre.
Cum se definesc clasele?
O clasă se definește conform sintaxei:
[public][abstract][final] class nume_clasa
[extends nume_super_clasă]
[implements Interfata1,Interfata2,...,InterfataN]
{//inceput bloc clasa
//atribute
//metode
//blocuri de cod
//alte clase
}//sfirsit bloc clasa
Prima parte din declarația unei clase o constituie modificatorii de acces care sunt opționali.
După numele clasei putem specifica, dacă este cazul, faptul că respectiva clasă este subclasă a
unei alte clase cu numele nume_super_clasă, sau/şi că implementează una sau mai multe
interfeţe ale căror nume trebuie separate prin virgulă.
Spre deosebire de alte limbaje POO, Java permite doar moştenirea simplă, ceea ce înseamnă că
o clasă are o singură superclasă însă poate avea mai multe subclase.
Corpul unei clase este cuprins între{} şi are ca conţinut:
- declararea şi iniţializarea variabilelor de instanţă şi de clasă;
- declararea şi implementarea constructorilor;
opreavictoria86@gmail.com © MUSTEAȚĂ Victoria
2
Programarea Orientată spre Obiecte, Limbajul Java, 2019-2020 CEITI
- declararea şi implementarea metodelor de instanţă şi de clasă;
- declararea unor clase interne.

Care sunt modificatorii de acces pentru clase?


Modificator Semnificație

public Implicit o clasă poate fi folosită doar de clasele aflate în acelaşi pachet cu clasa
respectivă, o clasă declarată public poate fi folosită din orice altă clasă
indiferent de pachetul în care se află.

abstract O clasă declarată abstractă nu poate fi instaţiată, este folosită doar pentru a crea
un model comun pentru o serie de subclase (tema Clase şi metode abstracte).

final O clasă declarată final nu poate avea subclase.

Care este scopul obiectelor?


Odată creat obiectul poate fi folosit pentru a: afla informații despre obiect, schimba starea
obiectului, executa unele acțiuni.
Obiectul accesează metodele şi datele clasei sale prin intermediul operatorului ,, .’’ folosind
sintaxa:
numeObiect.variabilă;
numeObiect.numeMetoda();
Exemple :
elev1.nume=”Ion”; elev1.bursa();
elev1.virsta=20; elev1.setNume(“Ion”);
Cum declarăm variabilele ?
În Java orice clasă conţine 2 tipuri de elemente : atribute (variabilele) şi metode.
Variabilele unei clase se declară înaintea metodelor, (deşi nu este impus de compilator acest
lucru) şi sunt vizibile în toate metodele respectivei clase.
Variabilele declarate în cadrul unei metode sunt locale metodei respectivei.
O variabilă de declară respectînd sintaxa :
[modificatori] tip_variabila nume_variabila [=valoareInitiala];
Modificatorii pot fi :
1) modificatori de acces :
Specificator Clasa Subclasa Pachet Oriunde
private x
protected x x* x
public x x x x
implicit x x
*
x - dacă subclasa se află în acelaşi pachet cu clasa.

2) unul din cuvintele rezervate :


 static – indică că variabila este variabilă de clasă şi nu de instanță;
De exemplu :

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


3
Programarea Orientată spre Obiecte, Limbajul Java, 2019-2020 CEITI
static int varClasa; int varInstanta;
 final – indică faptul că valoarea variabile nu poate fi modificată, declararea
constantelor;
exemplu : final double PI = 3.14;
 transient – folosit pentru a specifica dacă variabila membră participă la serializarea (
detalii tema ,,Serializarea obiectelor’’)
 volatile – folosit pentru a semnala compilatorului să nu execute anumite optimizări
asupra membrilor unei clase.
De exemplu:
class Exemplu {
double x; //variabila vizibila in clasa data si pachetul din care face parte
clasa
protected static int n; //vizibila in clasa data si in subclasele acelasi
//pachet cu clasa data
public String s=”abc”; // variabila s de tip string va fi vizibila oriunde
final int MAX=1000; // constanta de tip intreg
}

Cum declarăm metodele ?


O metodă se declară respectând sintaxa:
[modificatori] tipReturnat numeMetoda ([lista_argumente])
[throws tipExceptie1, tipExceptie2,...]{
// corpul metodei
}
Modificatorii pot fi
1) un specificator de acces: public, protected, private;
2) unul din cuvintele rezervate :
 static – metoda este de clasă şi nu de instanţă.
De exemplu: void metodaInstanta(); static void metodaClasa();
 abstract – indică că o metodă este abstractă , nu are implementare şi obligatoriu
face parte dintr-o clasă abstractă. (tema Clase şi metode abstracte)
 final – indică că metoda nu mai poate fi supradefinită în subclasele clasei în care
ea este definită ca fiind finală. Se foloseşte atunci cînd nu dorim ca metoda să fie
modificată în subclasele clasei date;
 native – în cazul în care avem un pachet important de funcţii scrise în alt limbaj de
programare (C,C++,asamblare) acestea pot fi refolosite din programele Java.
Tehnologia care permite acest lucru se numeşte JNI (Java Native Interface) şi
permite asocierea dintre metode Java declarate native şi metode native scrise în
limbajele de programare menţionate;
 synchronized – este folosit în cazul în care se lucrează cu mai multe fire de
execuţie.
Care este tipul returnat de o metodă?
O metodă poate sau nu să returneze o valoare la terminarea lor. Tipul returnat poate fi un tip
primitiv de date sau o referinţă la un obiect al unei clase. Atunci cînd o metodă nu returnează
nimic trebuie obligatoriu de specificat cuvîntul chee ,,void’’ ca fiind tipul returnat de aceasta.

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


4
Programarea Orientată spre Obiecte, Limbajul Java, 2019-2020 CEITI
De exemplu:
public void afisare(){System.out.println(“Rezultat “);}
Dacă o metodă trebuie să returneze o valoare , la terminarea funcției trebuie să apară
obligatoriu instrucțiunea return urmată de rezultat compatibil cu tipul metodei.
De exemplu:
int metoda(){ return 1; // corect }
int metoda(){ return 1.5; //eroare}
int metoda(){ return (int)1.5; }
Dacă valoarea returnată este o referință la un obiect al unei clase atunci clasa obiectului
returnat trebuie să coincidă sau să fie o subclasă a clasei specificate la declararea metodei.
De exemplu, fie clasa Poligon şi subclasa ei Patrat:
a) Poligon metoda1(){ b) Patrat metoda2(){
Poligon p=new Poligon(); Poligon p=new Poligon();
Patrat t=new Patrat(); Patrat t=new Patrat();
if (...) return p; else t; if (...) return p;//ilegal
} else t; }

Cum definim metode cu număr variabil de argumente?


În versiunile noi Java avem posibilitatea de a declara metode cu număr variabil de argumente:
[modificatori] tipReturnat numeMetoda (tip param1, tip parametru2, tip
... listaParametri) {
//corpul metodei
}
param1,param2 reprezintă parametri opționali pentru metodă.
listaParametri reprezintă un vector care stochează o listă variabilă de argumente de
acelaşi tip.
Acest tip de metode mai sunt numite metode var-arg, deoarece conţine o listă variabilă de
argumente. Un astfel de tip de metodă studiată este metoda main() care conţine parametrul
args care se declară mereu la sfîrşitul metodei.
Exemplu : Vom crea o metodă adunare() care va conţine o listă variabilă de valori şi va calcula
suma numerelor, şi metoda main() ce va conţine apelul metodei adunare() pentru diferiţi
parametri.
class ex {
public int adunare(int ... valori){
int s=0;
for (int i =0; i<valori.length;i++) s+=valori[i];
return s;
}
public static void main (String [] args){
ex ob1 = new ex();
System.out.println("Suma a 2 numere="+ob1.adunare(10,20));
System.out.println("Suma a 3 numere="+ob1.adunare(10,20,30));
System.out.println("Suma fara numere="+ob1.adunare());
}}

opreavictoria86@gmail.com © MUSTEAȚĂ Victoria


5

S-ar putea să vă placă și