Apstraktna klasa vs Konkretna klasa
Većina popularnih modernih objektno orijentisanih programskih jezika kao što su Java i C zasnovani su na klasama. Oni postižu objektno orijentisane koncepte kao što su enkapsulacija, nasljeđivanje i polimorfizam korištenjem klasa. Klase su apstraktni prikaz objekata stvarnog svijeta. Klase mogu biti konkretne ili apstraktne u zavisnosti od nivoa implementacije funkcionalnosti njihove metode. Konkretna klasa u potpunosti implementira sve svoje metode. Apstraktna klasa se može smatrati ograničenom verzijom regularne (konkretne) klase, gdje može sadržavati djelomično implementirane metode. Obično se konkretne klase nazivaju (samo) klase.
Šta je klasa betona?
Podrazumevana klasa je konkretna klasa. Ključna riječ class se koristi za definiranje klasa (npr. u Javi). I obično se jednostavno nazivaju klasama (bez pridjeva konkretni). Konkretne klase opisuju konceptualni prikaz objekata stvarnog svijeta. Klase imaju svojstva koja se nazivaju atributi. Atributi se implementiraju kao globalne varijable i varijable instance. Metode u klasama predstavljaju ili definiraju ponašanje ovih klasa. Metode i atributi klasa nazivaju se članovima klase. Obično se enkapsulacija postiže tako što se atributi čine privatnim, dok se kreiraju javne metode koje se mogu koristiti za pristup tim atributima. Objekt je instanca klase. Nasljeđivanje omogućava korisniku da proširi klase (zvane podklase) iz drugih klasa (zvane super klase). Polimorfizam omogućava programeru da zameni objekat klase umesto objekta njegove super klase. Tipično, imenice koje se nalaze u definiciji problema direktno postaju klase u programu. I slično, glagoli postaju metode. Javni, privatni i zaštićeni su tipični modifikatori pristupa koji se koriste za klase.
Šta je apstraktna klasa?
Apstraktne klase se deklarišu pomoću ključne riječi Abstract (npr. u Javi,). Tipično, apstraktne klase, poznate i kao apstraktne osnovne klase (ABC), ne mogu biti instancirane (instanca te klase se ne može kreirati). Dakle, apstraktne klase imaju smisla samo ako programski jezik podržava nasljeđivanje (sposobnost kreiranja podklasa iz proširenja klase). Apstraktne klase obično predstavljaju apstraktni koncept ili entitet sa delimičnom ili bez implementacije. Stoga se apstraktne klase ponašaju kao nadređene klase iz kojih su izvedene podređene klase tako da će podređena klasa dijeliti nepotpune karakteristike roditeljske klase i funkcionalnost se može dodati da ih dovrši.
Apstraktne klase mogu sadržavati apstraktne metode. Potklase koje proširuju apstraktnu klasu mogu implementirati ove (naslijeđene) apstraktne metode. Ako podređena klasa implementira sve takve apstraktne metode, ona postaje konkretna klasa. Ali ako to ne učini, podređena klasa takođe postaje apstraktna klasa. Sve ovo znači da, kada programer nominuje klasu kao apstraktnu, ona kaže da će klasa biti nekompletna i da će imati elemente koje treba da dopune nasledne podklase. Ovo je lijep način za kreiranje ugovora između dva programera, što pojednostavljuje zadatke u razvoju softvera. Programer, koji piše kod za nasljeđivanje, mora tačno pratiti definicije metoda (ali naravno može imati vlastitu implementaciju).
Koja je razlika između apstraktne klase i konkretne klase?
Apstraktne klase obično imaju djelomičnu ili nikakvu implementaciju. S druge strane, konkretne klase uvijek imaju punu implementaciju svog ponašanja. Za razliku od konkretnih klasa, apstraktne klase se ne mogu instancirati. Stoga se apstraktne klase moraju proširiti kako bi bile korisne. Apstraktne klase mogu sadržavati apstraktne metode, ali konkretne klase ne mogu. Kada se apstraktna klasa proširi, sve metode (i apstraktne i konkretne) se nasljeđuju. Naslijeđena klasa može implementirati bilo koju ili sve metode. Ako sve apstraktne metode nisu implementirane, tada i ta klasa postaje apstraktna klasa.