My blog

posts

What abstract classes are

In articolul trecut am discutat putin despre ce sunt interfetele si cum ne sunt folositoare. Astazi vom vorbi despre clasele abstracte, care sunt un concept aproximativ asemanator. Ok, hai sa nu mai palavragim si sa trecem la subiect. 

Ce este o clasa abstracta?

O clasa abstracta este o clasa care nu poate fi instantiata, dar poate fi extinsa. Spre exemplu, daca avem clasa ElectricVehicle si o declaram ca fiind abstracta, nu vom putea avea niciodata o instanta de aceasta clasa, insa vom putea face alte clase sa o extinda si astfel sa capete functionalitatile ei. 

Spre deosebire de interfete, unde toate functiile trebuie sa fie declarate publice, clasele abstracte permit creare de functii protejate (protected) care pot fi accesate numai de clasele care extind clasa abstracta. 

Cum declar o clasa abstracta?

Pentru a declara o clasa abstracta este de ajuns sa pui in fata cuvantul abstract. Exact asa: 
abstract class ElectricVehicle{}
Ce alte beneficii ofera o clasa abstracta?

Ei bine, in interiorul unei clase abstracte putem declara mai multe tipuri de functii, printre care si functii abstracte. Ce sunt functiile abstracte? Acestea sunt functii care trebuie sa apara obligatoriu in orice clasa care extinde clasa abstracta. Hai sa dam un exemplu ca sa simplificam lucrurile. 

Sa presupunem ca avem o clasa abstracta ElectricVehicle in care avem doua functii claxoneaza si descuie, ultima fiind abstracta. De asemenea, vom avea si doua clase care extind ElectricVehicle, Tesla si Nissan. 
abstract class  ElectricVehicle{
  protected function horn(){
    return “bip”;
  }

  abstract protected function unlock();
}

class Tesla extends ElectricVehicle{
   protected function unlock(){
    return “Unlock with phone”;\
   }
}

class Nissan extends ElectricVehicle{
  proteted function unlock(){
   return “unlock with card”;
  }
}
Dupa cum observi, fiecare clasa extinsa are propria implementare pentru functia de doblocare a masinii, asta pentru ca acea functie este una abstracta si orice clasa extinsa din clasa ElectricVehicle trebuie sa o contina.

Dar ce s-a intamplat cu functia horn? Avand in vedere faptul ca aceasta nu este declarata ca fiind abstracta nu suntem nevoiti sa o scriem nicaieri, ea va putea fi accesata ca fiind parte din clasa ElectricVehicle, de oricare din clasele care au extins-o. 

Cand sa folosim clasele abstracte?
Clasele abstracte sunt o alegere buna atunci cand definesti detalii pentru subclasele care extind o clasa, insa nu vrei ca cea din urma sa fie instantiata niciodata (astfel oferindu-ti posibilitatea sa definesti partial clasa “mama”).

Concluzie

 Patru chestii importante cu care ar trebuii sa ramai din acest articol sunt: 
  1. Clasele abstracte sunt clase care nu pot fi instantiate
  2. Pentru a folosi o clasa abstracta trebuie sa creem o subclasa care sa o extinda pe aceasta
  3. Majoritatea limbajelor de programare nu permit multiple extinderi
  4. Odata declarata o functie abstracta, toate subclasele care extind clasa abstracta trebuie sa implementeze aceasta functie
Sper ca ti-a placut acest articol indeajuns incat sa imi lasi un comentariu mai jos. Daca nu ti-a placut, as fi mai mult decat recunoscator daca mi-ai oferi un sfat pentru a-mi imbunatati continutul de pe blog.

0 Comments

  • Be the first one who leaves a comment!

Add a comment