Tuesday, October 04, 2022 14:13

Cuprins >> Programarea Orientată Pe Obiecte > Clase și metode abstracte

Clase și metode abstracte

Așa cum explicam în lecția precedentă, un mod de a realiza abstracția este cu ajutorul claselor și metodelor abstracte. Cuvântul cheie abstract poate fi utilizat atât pentru clase cât și pentru metode. O clasă abstractă este o clasă care oferă o implementare parțială. Aceasta înseamnă că sunt clase incomplete, ce nu pot fi folosite de sine stătător. Nu putem instanția clase abstracte folosind operatorul new. Clasele abstracte trebuie moștenite în clase copil, care să completeze implementarea lor parțială. Din acest motiv, clasele abstracte sunt uneori numite clase de bază abstracte (când nu toate metodele lor sunt de asemenea abstracte), sau clase de bază abstracte pure (când toate metodele declarate în interiorul lor sunt și ele declarate abstracte). Clasele abstracte pot conține atât metode abstracte, cât și metode normale, și pot fi declarate chiar și fără nicio metodă abstractă.

Metodele abstracte nu pot fi declarate în afara claselor abstracte. Dacă aveți nevoie ca o metodă să fie declarată abstractă, trebuie să declarați și clasa care o conține ca abstractă. De asemenea, metodele abstracte nu pot avea un corp. Corpul este furnizat în clasa care moștenește din clasa abstractă.

Deoarece cuvântul cheie sealed semnifică faptul că o clasă nu poate fi moștenită și deoarece clasele abstracte trebuie moștenite pentru a finaliza implementarea lor parțială, nu vi se permite să declarați clase abstracte ca sealed.

Iată un exemplu de clasă abstractă simplă:

Pentru a folosi clasa abstractă de mai sus, trebuie să moștenim din ea și să oferim o implementare pentru metoda abstractă:

Am declarat o altă clasă, Pisica, care moștenește clasa abstractă Animal, moștenind astfel metodele sale. Aici, observați că trebuie să suprascriem metoda Mananca(), ce a fost declarată abstractă și nu are un corp. Dacă nu suprascriem metoda abstractă, oferindu-i un corp, o implementare concretă, vom primi o eroare de compilare: Error CS0534 ‘Pisica’ does not implement inherited abstract member ‘Animal.Mananca()’ (Eroarea CS0534 „Pisica” nu implementează membrul abstract moștenit „Animal.Mananca()”). După ce declarăm o clasă care moștenește și completeaza implementarea clasei abstracte, o putem instanția și putem apela metodele din interiorul ei. Cu alte cuvinte, am putut specifica faptul că clasa Animal este incompletă, nu este pregătită pentru a fi instanțiată și doar succesorii săi pot avea instanțe.

Ca o concluzie, clasele abstracte sunt undeva la mijloc între clase și interfețe. Ele pot defini metode obișnuite și metode abstracte. Metodele obișnuite au o implementare, în timp ce metodele abstracte sunt goale (fără o implementare) și rămân a fi implementate ulterior de către clasele derivate. O clasă abstractă pură este foarte asemănătoare cu o interfață (descrisă în lecția următoare), singura diferență fiind faptul că o clasă poate implementa mai multe interfețe, dar poate moșteni o singură clasă (chiar dacă este abstractă). Inițial, interfețele nu erau necesare în contextul „moștenirii multiple”. Ele au trebuit să fie concepute ca un mijloc de a o înlocui în specificarea numeroaselor roluri ale unui obiect.

Tags: , , , , ,

Leave a Reply



Follow the white rabbit