Sunteți pe pagina 1din 5

5.

CLASE ABSTRACTE

Adesea este util s creem clase de baz care s impun ca, clasele
derivate din ele, s conin neaprat definiii de anumite metode.
Clasa de baz conine doar antete de metode urmate de caracterul
punct i virgul (;), iar aceste metode urmeaz s fie definite n clasele
derivate dintr-o astfel de clas de baz. Metodele menionate n acest fel ntr-o
clas de baz se numesc metode abstracte.
O clas abstract este o clas care are cel puin o metod membru
abstract.
Antetul unei metode abstracte este de forma
... tip nume (lista declaraiilor parametrilor formali)
Exemplu:
class punct
{
double x,y;
...
}
abstract class mpunct:punct
{
double masura;
...
public abstract double perimetru();
public abstract double arie ();
}

La definirea claselor abstracte cuvntul class va fi precedat de


cuvntul cheie abstract.
Clasa mpunct conine metodele abstracte perimetru i arie. Aceste
metode nu au sens pentru obiectele clasei mpunct care are ca date membru de
instan coordonatele x (abscis) i y (ordonat) motenite de la clasa punct i
masura care este dat proprie. De aceea, metodele perimetru i arie nu se pot
defini n clasa mpunct. n schimb, ele vor fi definite n clase derivate din clasa
mpunct. Clasa mpunct este o clas abstract, deoarece are dou metode
membru abstracte. Metodele abstracte se definesc prin suprascriere
(override) ca i cum ele ar fi metode virtuale.
Fie clasa patrat derivat din clasa mpunct. n clasa patrat, metodele
perimetru i arie se definesc n mod obinuit:

172

class patrat:mpunct
{
...
public override double perimetru()
{
return 4*masura;
}
public override double arie()
{
return masura*masura;
}
}

Nu se pot instania obiecte pentru clasele abstracte, deoarece ele nu


implementeaz metodele membru abstracte pe care le conin.
Deci o instaniere de forma:
mpunct mp = new mpunct(...);

este eronat. Se pot declara referine la clase abstracte la care s li se atribuie


referine la obiecte ale claselor derivate.
De exemplu, declaraia:
mpunct mp;

este corect, precum i atribuirea:


mp = new patrat(...);

sau mai direct


mpunct mp = new patrat(...);

Exerciii
5.1. S se defineasc o ierarhie de clase care are in vrful ei clasa punct
din care deriv clasa abstract mpunct care la rndul ei este o clas de
baz pentru clasele patrat i cerc.
Clasa mpunct are trei metode abstracte:
- perimetru;
- arie;
- retNume.
Proiectul aplicaiei va avea numele PatratCerc1.
Clasa punct are urmtoarele date membru de instan:
- x de tip double care definete absicisa punctului reprezentat de
obiectul curent;
- y de tip double care definete ordonata punctului reprezentat de
obiectul curent;
- valid de tip bool care are ca valoare true dac datele membru x i
y au valori definite prin constructor sau prin citirea lor de la
tastatur i false n caz contrar.
173

Clasa punct are o metod static numit citDouble care citete de la


tastatur un numr de tip double i returneaz valoarea acestuia.
Celelalte metode ale clasei punct sunt metode de instan. Astfel,
clasa are doi constructori: constructorul implicit i constructorul
care are parametri pentru a iniializa valorile datelor de instan x i y.
Constructorul implicit atribuie valoarea false datei membru valid, iar
cellalt constructor atribuie valoarea true aceleiai date membru.
Clasa punct are o metod de instan cu numele cit prin intermediul
creia se citesc valori pentru datele membru x i y. Totodat aceast
metod atribuie valoarea true datei membru valid.
n fine, o alt metod de instan a clasei punct este metoda ntitulat
afis. Aceasta afieaz valorile datelor membru x i y dac valid are
valoarea true. n caz contrar (valid are valoarea false), se afieaz
mesajul de eroare: Punct invalid.
Clasa abstract mpunct deriv din clasa punct. Ea are urmtoarele
date membru de instan proprii:
masura de tip double;
mvalid de tip bool;
Clasa mpunct are doi constructori:
- constructorul implicit care atribuie lui mvalid valoarea false;
- constructorul cu parametri pentru iniializarea datelor membru de
instan motenite de la clasa punct, precum i data membru de
instan proprie (masura). De asemenea, constructorul atribuie
valoarea true datei membru mvalid. Pentru iniializarea datelor
membru x, y i valid, constructorul apeleaz prin antetul su
constructorul clasei de baz punct care iniializeaz datele respective.
n afar de constructori, clasa mpunct conine i metodele cit i afis
pentru a citi de la tastatur valorile datelor de instan x, y i masura,
respectiv pentru a afia pe monitor datele respective.
Metoda cit atribuie datei membru mvalid valoarea true.
Metoda afis afieaz textul de eroare:
Obiect mpunct invalid
dac mvalid are valoarea false.
Clasa mpunct conine antetele metodelor abstracte: perimetru, arie
i retNume care se definesc n clasele patrat i cerc derivate din
aceast clas.
Clasa patrat are urmtoarele date membru de instan:
nume de tip string;
pvalid de tip bool.
174

V-240
Limbajul C# pentru nceptori
clasa String, ierarhii de clase, indexare, interfee, clase abstracte i
anonime, clasa Object
Liviu Negrescu, Lavinia Negrescu
1. CLASA STRING
1.1. Iniializarea obiectelor clasei String
1.2. Accesul la caracterele irurilor de caractere ataate obiectelor clasei String
1.3. Metode ale clasei String
1.3.1. Metode de instan
1.3.2. Metode statice
1.4. Proprietatea Length a clasei string
1.5. Cmpul static al clasei string
1.6. Conversii
1.7. Operatori
1.7.1. Suprancrcarea operatorilor relaionali
Rezumat
2. IERARHII DE CLASE
2.1. Clas de baz i clas derivat
2.2. Protecia protected
2.3. Relaia dintre constructorii claselor derivate i cei ai claselor de baz
2.4. Metode new
2.5. Utilizarea lui base pentru accesarea numelor ascunse
2.6. Metode virtuale
Rezumat
3. INDEXARE
Rezumat
4. INTERFEE
Rezumat
5. CLASE ABSTRACTE
Rezumat
6. VARIABILE DE TIPURI IMPLICITE
Rezumat
7. CLASE ANONIME
Rezumat

8. CLASA OBJECT
Rezumat