Apstraktna klasa vs sučelje
Apstraktna klasa i sučelje dvije su objektno orijentirane konstrukcije koje se nalaze u mnogim objektno orijentiranim programskim jezicima poput Jave. Apstraktnu klasu možemo smatrati apstraktnom verzijom obične (konkretne) klase, dok se sučelje može smatrati sredstvom implementacije ugovora. Apstraktna klasa je klasa koja se ne može inicijalizirati, ali se može proširiti. Sučelje je tip koji moraju implementirati druge klase. U Javi, apstraktne klase se deklariraju pomoću ključne riječi Abstract, dok se ključna riječ interfejs koristi za definiranje sučelja.
Što je apstraktna klasa?
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, to je 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).
Što je sučelje?
Sučelje je apstraktni tip koji se koristi za specificiranje ugovora koji bi trebao biti implementiran od strane klasa, koje implementiraju to sučelje. Ključna riječ interfejs koristi se za definiranje sučelja, a ključna riječ Implements koristi se za implementaciju sučelja od strane klase (u programskom jeziku Java). Obično će sučelje sadržavati samo potpise metoda i deklaracije konstanti. Svako sučelje koje implementira određeno sučelje trebalo bi implementirati sve metode definirane u sučelju ili bi trebalo biti deklarirano kao apstraktna klasa. U Javi se tip reference objekta može definirati kao tip sučelja. Ali taj objekt mora ili biti null ili bi trebao sadržavati objekt klase koja implementira to određeno sučelje. Koristeći ključnu riječ Implements u Javi, možete implementirati više sučelja u jednu klasu.
Koja je razlika između apstraktne klase i sučelja?
Apstraktne klase obično predstavljaju apstraktni koncept ili entitet s djelomičnom ili nikakvom implementacijom. S druge strane, sučelje je apstraktni tip koji se koristi za određivanje ugovora koji treba implementirati po klasama. Apstraktne klase trebaju biti naslijeđene (ili proširene), dok sučelja trebaju biti implementirana. Apstraktne klase mogu sadržavati apstraktne metode, dok sučelje treba sadržavati samo apstraktne metode. Apstraktne klase mogu sadržavati bilo koje varijable, ali sučelja mogu definirati samo konstante. Klasa ne može naslijediti više od jedne apstraktne klase, ali može implementirati više sučelja. Sučelje ne može implementirati drugo sučelje. Međutim, sučelje može proširiti klasu.