Razlika između apstraktne klase i sučelja (s tablicom)

Razlika između apstraktne klase i sučelja (s tablicom)

Kao što svi znamo, apstrakcija se odnosi na unutarnju implementaciju značajke i isključivo prikazivanje praktičnosti korisnicima. tj. što radi (pokazuje, Međutim, sučelje nudi potpunu apstrakciju u Javi, što apstraktne kategorije ne mogu.

Apstraktna klasa vs sučelje

 Glavna razlika između apstraktne klase i sučelja je da će pridruženo sučelje proširiti samo drugo Java sučelje; pridružena apstraktna kategorija će razviti drugu Java kategoriju i implementirati više Java sučelja. Članovi Java sučelja prema zadanim su postavkama javni. Java apstraktna kategorija imat će članove kategorije kao što su osobno, zaštićeno itd.

Razlika između apstraktne klase i sučelja

Apstraktna klasa je klasa koja ima apstraktnu ključnu riječ u svojoj deklaraciji. Najmanje jedna apstraktna metoda, tj. metode bez tijela, treba biti prisutna u apstraktnim klasama. Može imati različite konkretne metode.

Možete koristiti apstraktne klase za generiranje nacrta za konkretne klase. Međutim, apstraktnu metodu mora implementirati klasa koja nasljeđuje.

Sučelje je nacrt za klasu koja se može koristiti za njezino stvaranje. Sučelje nema konkretne metode (metode koje imaju kod). Sve metode sučelja su apstraktne metode.

Nije moguće izraditi sučelje. Klase koje implementiraju sučelja, s druge strane, mogu se instancirati. Varijable instance nikada se ne koriste u sučeljima. Međutim, mogu se koristiti javne statičke konačne varijable (također poznate kao konstantne varijable klase).

Što je apstraktna klasa?

Apstraktna klasa je temeljni koncept u objektno orijentiranom programiranju (OOP) koji služi kao nacrt ili predložak za druge klase. To je klasa koja se ne može instancirati i namijenjena je za proširenje ili podklasu drugim klasama. Apstraktne klase definiraju zajedničke atribute i metode koje će više povezanih klasa dijeliti unutar hijerarhije nasljeđivanja.

Ključne karakteristike i značajke apstraktnih klasa uključuju:

  1. Ne može se instancirati: Apstraktna klasa ne može se koristiti za izravno stvaranje objekata ili instanci. Umjesto toga, pruža okvir za podklase za nasljeđivanje i implementaciju njegovih svojstava i metoda.
  2. Može sadržavati apstraktne metode: Apstraktne klase uključuju jednu ili više apstraktnih metoda. Deklaracije metoda bez ikakvih detalja implementacije. Podklase moraju osigurati konkretne implementacije za ove apstraktne metode.
  3. Može uključivati ​​konkretne metode: Apstraktne klase također mogu imati konkretne (potpuno implementirane) metode koje podklase mogu naslijediti. Ove metode mogu pružiti zajedničku funkcionalnost koju dijele sve podklase.
  4. Koristi se za ponovnu upotrebu koda: Apstraktne klase promiču mogućnost ponovne upotrebe koda i DRY (Don't Repeat Yourself) princip dopuštajući definiranje zajedničkog koda u jednoj apstraktnoj klasi i dijeljenje između povezanih podklasa.
  5. nasljedstvo: Podklase nasljeđuju atribute i metode definirane u apstraktnoj klasi. To omogućuje specijalizaciju i prilagodbu ponašanja uz zadržavanje zajedničke strukture.
  6. Apstraktne naspram konkretnih klasa: Apstraktne klase razlikuju se od konkretnih klasa koje se mogu izravno instancirati. Konkretne klase pružaju punu implementaciju za sve svoje metode.

U jezicima kao što su Java i C#, ključna riječ "abstract" definira apstraktne klase. Apstraktne klase vrijedni su alati za izgradnju hijerarhija povezanih klasa koje dijele zajedničke karakteristike i ponašanja, a istovremeno dopuštaju prilagodbu i specijalizaciju u izvedenim klasama.

Što je sučelje?

Sučelje je temeljni koncept u objektno orijentiranom programiranju (OOP) koji definira ugovor ili skup potpisa metode koje mora implementirati svaka klasa koja se pridržava sučelja. Sučelja pružaju način za postizanje višestrukog nasljeđivanja u jezicima koji ga ne podržavaju izravno, te promoviraju apstrakciju koda, modularnost i fleksibilnost.

Ključne značajke i karakteristike sučelja uključuju:

  1. Potpisi metode: Sučelje definira zbirku potpisa metode bez detalja implementacije. Ovi potpisi metoda predstavljaju skup ponašanja koje implementirajuće klase moraju pružiti.
  2. Ugovorna obveza: Kada klasa implementira sučelje, mora osigurati konkretne implementacije za sve metode definirane u tom sučelju. Ako to ne učinite, dolazi do pogreške pri kompilaciji.
  3. Višestruko nasljeđivanje: Za razliku od klasa koje podržavaju jedno nasljeđivanje (proširenje jedne klase), klasa može implementirati više sučelja. Ovo omogućuje klasi da naslijedi i pruži više skupova ponašanja.
  4. Apstrakcija i polimorfizam: Sučelja promoviraju apstrakciju odvajanjem "što" (potpisi metode) od "kako" (implementacija metode). Ova apstrakcija dopušta polimorfizam, gdje se objekti različitih klasa koji implementiraju isto sučelje mogu tretirati naizmjenično.
  5. Mogućnost ponovne upotrebe koda: Sučelja olakšavaju ponovnu upotrebu koda definiranjem zajedničkih ponašanja koja različite klase mogu implementirati. Time se promovira DRY (Don't Repeat Yourself) princip.
  6. Fleksibilnost: Sučelja omogućuju labavo spregnuti kod dopuštajući klasama da budu međusobno zamjenjive na temelju sučelja koje implementiraju. Ova fleksibilnost posebno je korisna u projektiranju modularnih i proširivih sustava.

Sučelja se naširoko koriste u jezicima kao što su Java, C# i TypeScript za definiranje i provedbu ugovora između klasa, osiguravajući da se pridržavaju određenog API-ja (Application Programming Interface) i dijele zajednička ponašanja, dok dopuštaju različite implementacije.

Tablica usporedbe između apstraktne klase i sučelja

 Parametri diferencijacijeSažetak klaseSučelje
InstanciranjeNe može se izravno instancirati.Ne može se instancirati izravno.
SvrhaSluži kao nacrt za druge klase i može pružiti obje deklaracije metoda sa ili bez implementacija.Ne može se instancirati izravno.
MetodeMože imati apstraktne (neimplementirane) metode, konkretne (implementirane) metode ili kombinaciju oba.Sadrži samo potpise metoda bez ikakvih implementacija; sve metode su implicitno apstraktne.
Višestruko nasljeđivanjePodržava pojedinačno nasljeđivanje; klasa može proširiti samo jednu apstraktnu klasu.Podržava višestruko nasljeđivanje; klasa može implementirati više sučelja.
KonstruktoriMože imati konstruktore koji se pozivaju kada se kreira instanca podklase.Ne može imati konstruktore jer se ne mogu izravno instancirati.
Mogućnost ponovne upotrebe kodaPromiče ponovnu upotrebu koda dopuštajući dijeljenje zajedničkog koda među povezanim klasama.Promiče mogućnost ponovne upotrebe koda definiranjem uobičajenih skupova ponašanja koje klase moraju implementirati.
FleksibilnostNudi ravnotežu između apstrakcije i pružanja zajedničke funkcionalnosti.Naglašava apstrakciju i specificiranje ugovora.
Koristite slučajeveKorisno za stvaranje hijerarhija povezanih klasa sa zajedničkim ponašanjem i atributima.Korisno za definiranje ugovora koji osiguravaju da implementirane klase pružaju specifično ponašanje.
Primjerabstract class Shape { abstract double area(); }interface Drawable { void draw(); }
scenarioKorisno kada želite osigurati zajedničku osnovnu klasu s nekim zadanim ponašanjem, ali ostaviti specifične metode koje će implementirati potklase.Korisno kada želite definirati ugovor ili zajednički skup ponašanja u više klasa bez diktiranja zajedničke osnovne klase.

Glavne razlike između Apstraktna klasa i sučelje

Sažetak razred:

  • Može imati i apstraktne (neimplementirane) i konkretne (implementirane) metode.
  • Podržava pojedinačno nasljeđivanje, što znači da klasa može proširiti samo jednu apstraktnu klasu.
  • Može imati konstruktore za inicijalizaciju stanja objekta.
  • Omogućuje stvaranje osnovne klase sa zadanim ponašanjem.
  • Pruža ravnotežu između apstrakcije i uobičajene funkcionalnosti.
  • Korisno pri stvaranju hijerarhija povezanih klasa sa zajedničkim atributima i ponašanjima.

Sučelje:

  • Sadrži samo potpise metoda bez ikakvih implementacija; sve metode su implicitno apstraktne.
  • Podržava višestruko nasljeđivanje, što znači da klasa može implementirati više sučelja.
  • Ne može imati konstruktore jer se sučelja ne mogu instancirati.
  • Definira ugovor koji specificira skup metoda koje implementirajuće klase moraju pružiti.
  • Naglašava apstrakciju i određivanje zajedničkog skupa ponašanja.
  • Korisno za definiranje ugovora i osiguravanje da se klase pridržavaju specifičnih API zahtjeva.

Zaključak

Apstraktna klasa vam omogućuje stvaranje funkcionalnosti koju potklase mogu implementirati ili nadjačati, dok vam sučelje omogućuje da navedete, ali ne i implementirate funkcionalnost. Iako klasa može proširiti samo jednu apstraktnu klasu, može implementirati nekoliko sučelja.

Upućivanje

  1. https://dl.acm.org/doi/abs/10.1145/1040305.1040314
  2. https://books.google.com/books?hl=en&lr=&id=8M3F_sSSvWkC&oi=fnd&pg=PR13&dq=+interface+java&ots=Qo15NiH18i&sig=Y6OESYd5a6G709ynnLGB4Ry97yU
točka 1
Jedan zahtjev?

Uložio sam mnogo truda u pisanje ovog posta na blogu kako bih vam pružio vrijednost. Bit će mi od velike pomoći ako razmislite o tome da to podijelite na društvenim medijima ili sa svojim prijateljima/obitelji. DIJELJENJE JE ♥️

Avatar Nidhija

O namaNidhi

Bok! Ja sam Nidhi.

Ovdje u EHL-u radi se o ukusnim, jednostavnim receptima za ležernu zabavu. Stoga dođite i pridružite mi se na plaži, opustite se i uživajte u hrani.

Ostavi odgovor

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena *