Sunteți pe pagina 1din 12

Clase abstracte

profesor Dobrovolischii Olga


Programarea Orientată pe Obiecte
Abstractizare - reprezintă posibilitatea ca un program sa ignore unele aspecte ale
informației pe care o manipulează, adică oferă posibilitatea concentrării asupra
esențialului, dintr-un anumit punct de vedere.

Abstractizarea vă permite să vă
focusați pe ce face obiectul și nu
cum face acest lucru.
Exemplu de abstractizare(lumea reală)
1
1
RRee
pprr dduu
oogg ccee
rraa cc
mm oomm
eell
oorr ppllee
xxii
ttaa
ttee
aa

2
2
Ev
ită
du
bl
a re
a
co
d ul
u i
3
3


m ur
en ea
te ză
na lu
ță c r
și ul
Avantajele Abtractizării

în la
tre lu
țin cră
er ril
e ed
e
4
4

Cr
co eșt
nfi e
de sec
nț u r
ia ita
lit
a t t ea
ea ș
i
Tipuri de abstractizare

Abstractizarea datelor Abstracția de control


Procesul de creare a tipurilor de date complexe În software development în mare parte se
și de a dezvălui numai părțile utile ale tipului practică reutilizarea codului.Procesul de creare
de date pe care programatorii le pot folosi a unei definiții unitare a unei funcționalități și
Exemplu: Listele și ArrayList reduc reutilizarea acesteia ori de cîte ori este necesar
complexitatea și permit programatorului să reprezintă controlul abstracțiunilor.
utilizeze direct structura datelor în loc să le Exemplu:Utilizarea funcțiilor în Java
redefinească
Modalități prin care putem obține Abstractizarea

Sunt 2 posibilități de a obține abstractizarea în Java:

Utilizînd interfețele(100%)
Utilizînd clasele abstracte(1-100%)

Ce sunt clasele abstracte?


Definiție: O clasă abstractă este o clasă declarată cu modificatorul abstract.

Clasa abstractă nu poate fi instanțiată , dar poate avea subclase. Se folosește atunci cînd
dorim să stabilim o interfață comună pentru a putea crea funcționalitate diferită pentru
fiecare subtip și pentru a ști ce anume au clasele derivate în comun.
Deseori atunci cînd lucrăm cu clasele derivate apare problema că pentru superclasă nu
putem preciza implementarea unei metode pentru că clasele sale au nevoie de
implementarea specifică fiecăreia. În acest caz pot fi utilizate clasele abstracte.

Java are clase abstracte predefinite. Una din aceste clase este clasa Number, ce se află
în pachetul java.lang.
Această clasă abstractă descrie un număr la general , dar într-o aplicație avem nevoie de
un număr de un anumit tip(întreg, real. etc). Fiecare tip de număr are caracteristicile sale
însă toate exprimă valori numerice, fiecare în felul său.

Clasa abstractă Number servește ca superclasă pentru toate clasele concrete Byte,
Double, Float, Integer, Short și Long, denumite și clase Wrapper sau
clase înfășurătoare.
Obiecte de tip Number nu putem instanția , însă putem instanția obiecte de tip Double,
Float, Integer.
Cum declarăm o clasă abstractă?

Rețineți:
Clasa abstractă nu conține modificatorul final
Clasa abstractă conține metode abstracte, nu au implementare în clasa dată.
Clasa abstractă poate să nu aibă nici o metodă abstractă
Clasa abstractă nu poate fi instanțiată , în schimb poate avea orice număr de subclase
Orice clasă ce are măcar o metodă abstractă trebuie să fie și ea abstractă
O clasă nu poate fi concomitent finală și abstractă
Subclasa unei clase abstracte trebuie să conțină cod pentru toate metodele abstracte
declarate în superclasa abstractă, în caz contrar subclasa trebuie să fie și ea abstractă.
Clasa abstractă impune subclasele sale să implementeze metode comune și le permite să
implementeze și metode proprii.
Ce sunt metodele abstracte?
O metodă abstractă este o metodă fără implementare și poate fi doar în corpul unei clase
abstracte, conține obligatoriu cuvîntul rezervat abstract în semnătura acesteia.

Cum declarăm o metodă abstractă?

Rețineți:
Metodele abstracte conțin semnul “;” ce înlocuiește corpul metodei
O metodă declarată public poate fi abstractă
O metodă statică nu poate fi abstractă, pentru că nu poate fi rescrisă
Metodele abstracte nu pot fi private pentru că scopul acestora este de a fi implementate
într-o clasă copil
Exemplu:
Creați un program Java format din :
clasa abstractă Figura care va conține 2 metode publice abstracte fără parametri: double
Arie(), double Perimetru().
clasa Cerc ce va extinde clasa abstractă figura și va conține variabila privată raza,
constructorul clasei cu un parametru, metodele Arie() și Perimetru() implementate
Clasa Triunghi ce extinde clasa figura și conține variabila privată latura, constructorul
clasei cu un parametru , metodele din Figura implementate.
clasa TestFigura
abstract class Figura { class Cerc extends Figura { public class TestFigura {
public abstract double Arie(); private double raza;
public static void main(String[] args) {
public abstract double Perimetru(); public Cerc(int raza) { System.out.println("----------------");
} this.raza = raza; Cerc obCerc = new Cerc(3);
public double Arie() { System.out.println("Aria cercului =" + obCerc.Arie());
return Math.PI * raza * raza; System.out.println("Perimetrul Cercului=" +
public double Perimetru() { obCerc.Perimetru());
return 2 * Math.PI * raza;
} System.out.println("----------------");
class Triunghi extends Figura { Triunghi obTriunghi = new Triunghi(5);
private double latura; System.out.println("Aria triunghiului =" + obTriunghi.Arie());
System.out.println("Perimetrul triunghiului=" +
public Triunghi(double latura) { obTriunghi.Perimetru());
this.latura = latura;
} }

public double Arie() { }


return Math.sqrt(3) / 4 * latura *
latura;
}

public double Perimetru() {


return 3 * latura;
}
}
Exercițiu individual:
Avînd dată următoarea clasă abstractă:
abstract class Poligon{
void afisare(){
System.out.println(“Clasa Poligon”);}
abstract void Aria();
abstract void Perimetru();

2.Creati clasa Patrat care va extinde clasa Cerc si va conține:


-proprietatea de tip întreg laturi
-constructorul clasei ce va primi ca parametru valoarea pentru laturile patratului
-metoda afișare () supradefinită care va afișa numele clasei date
-implementarea metodei abstracte detalii() care va afișa un text explicativ de forma: Este
un patrat cu latura [laturi], unde laturi reprezintă valoarea laturilor patratului
-implementarea metodei perimetru() care va calcula și returna valoarea perimetrului.

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