Skip to content

Apstraktne klase

Apstrakcija predstavlja proces izdvajanja zajedničkih karakteristika objekata i njihovo predstavljanje u obliku apstraktnih klasa. Apstraktna klasa predstavlja zajedničku nadklasu za sve konkretne klase koje imaju zajedničke karakteristike. Apstraktna klasa ne može imati instance, već se koristi za definisanje zajedničkih atributa i metoda koje će nasljeđivati konkretne klase.

Primjer: Trebamo realizovati klasu GeometrijskiObjekat u ravni. Postoje različite vrste geometrijskih objekata, kao što su trougao, kvadrat, krug. Geometrijski objekti imaju metode poput obima i površine koje se definišu na različite načine za različite objekte. Potrebno je obavezati podklase da implementiraju ove metode.

from abc import ABC, abstractmethod

class GeometrijskiObjekat(ABC):
    @abstractmethod
    def obim(self):
        pass

    @abstractmethod
    def povrsina(self):
        pass


class Krug(GeometrijskiObjekat):
    def __init__(self, r):
        self.r = r

    def obim(self):
        return 2 * self.r * 3.14

    def povrsina(self):
        return self.r * self.r * 3.14

    def __str__(self):
        return "Krug sa poluprečnikom {}".format(self.r)


class Kvadrat(GeometrijskiObjekat):
    def __init__(self, a):
        self.a = a

    def obim(self):
        return 4 * self.a

    def povrsina(self):
        return self.a * self.a

    def __str__(self):
        return "Kvadrat sa stranicom {}".format(self.a)

Apstraktne metode se definišu pomoću dekoratora @abstractmethod, a da bi se klasa označila kao apstraktna, potrebno je da nasljeđuje klasu ABC iz modula abc koji se uvozi na početku programa.