Apstraktna klasa naspram konkretne klase
Većina popularnih modernih objektno orijentiranih programskih jezika poput Jave i C temelji se na klasama. Oni postižu objektno orijentirane 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 ovisno o razini implementacije funkcionalnosti njihove metode. Konkretna klasa u potpunosti implementira sve svoje metode. Apstraktnu klasu možemo smatrati ograničenom verzijom obične (konkretne) klase, gdje može sadržavati djelomično implementirane metode. Obično se konkretne klase nazivaju (samo) klasama.
Što je Concrete Class?
Zadana klasa je konkretna klasa. Ključna riječ class koristi se za definiranje klasa (npr. u Javi). I obično se jednostavno nazivaju klasama (bez pridjeva konkretni). Konkretne klase prikazuju konceptualni prikaz objekata stvarnog svijeta. Klase imaju svojstva koja se nazivaju atributi. Atributi su implementirani kao globalne varijable i varijable instance. Metode u klasama predstavljaju ili definiraju ponašanje tih klasa. Metode i atributi klasa nazivaju se članovima klase. Tipično, enkapsulacija se postiže postavljanjem atributa privatnim, dok se stvaraju javne metode koje se mogu koristiti za pristup tim atributima. Objekt je instanca klase. Nasljeđivanje omogućuje korisniku da proširi klase (zvane podklase) iz drugih klasa (zvane super klase). Polimorfizam omogućuje programeru da zamijeni objekt klase umjesto objekta njegove super klase. Tipično, imenice koje se nalaze u definiciji problema izravno postaju klase u programu. I slično, glagoli postaju metode. Javni, privatni i zaštićeni tipični su modifikatori pristupa koji se koriste za klase.
Što je apstraktna klasa?
Apstraktne klase se deklariraju pomoću ključne riječi Abstract (npr. u Javi,). Tipično, apstraktne klase, poznate i kao apstraktne osnovne klase (ABC), ne mogu se instancirati (instanca te klase ne može se kreirati). Dakle, apstraktne klase imaju smisla samo ako programski jezik podržava nasljeđivanje (mogućnost stvaranja podklasa iz proširenja klase). Apstraktne klase obično predstavljaju apstraktni koncept ili entitet s djelomičnom ili nikakvom implementacijom. Stoga, apstraktne klase djeluju kao nadređene klase iz kojih su izvedene podređene klase tako da podređena klasa dijeli nepotpune značajke nadređene klase i može se dodati funkcionalnost da ih dovrši.
Apstraktne klase mogu sadržavati apstraktne metode. Podklase koje proširuju apstraktnu klasu mogu implementirati ove (naslijeđene) apstraktne metode. Ako klasa dijete implementira sve takve apstraktne metode, ona postaje konkretna klasa. Ali ako ne, klasa dijete također postaje apstraktna klasa. Sve to znači da, kada programer nominira klasu kao sažetak, on govori da će klasa biti nepotpuna i da će imati elemente koje trebaju dovršiti naslijeđene podklase. Ovo je lijep način za stvaranje ugovora između dva programera, koji pojednostavljuje zadatke u razvoju softvera. Programer koji piše kod za nasljeđivanje mora točno slijediti definicije metode (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 ne mogu se instancirati. Stoga se apstraktne klase moraju proširiti kako bi postale 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, ta klasa također postaje apstraktna klasa.