Middle
Зашто су потребни интерфејси ако већ постоје апстрактне класе?
sobes.tech АИ
Одговор од АИ
- Višestruko nasleđivanje. Klasa može implementirati više interfejsa, ali nasleđuje samo od jedne klase (uključujući apstraktne).
interface IDrivable {} interface IFlyable {} class Car : IDrivable {} // Nasleđuje samo od jedne klase (objekat implicitno) class FlyingCar : IDrivable, IFlyable {} // Implementira više interfejsa - Ugovor bez implementacije. Interfejsi definišu samo ugovor (metode, svojstva, događaje, indeksatore) bez bilo kakve implementacije. Apstraktne klase mogu sadržavati delimično implementiranu funkcionalnost i polja.
interface IShape { double GetArea(); // Samo deklaracija } abstract class Shape { public abstract double GetArea(); // Deklaracija public string Color { get; set; } // Implementacija svojstva public void DisplayColor() { Console.WriteLine($"Boja: {Color}"); // Implementirana metoda } } - Slaba povezanost (loose coupling). Interfejsi podstiču slabu povezanost između komponenti, jer kod zavisi od ugovora, a ne od konkretne implementacije klase. To olakšava zamenu jedne implementacije drugom.
- Razdvajanje uloga. Interfejsi omogućavaju definisanje jasnih uloga ili mogućnosti koje klasa mora posedovati, nezavisno od njenog osnovnog tipa ili hijerarhije nasleđivanja.
- Testiranje. Moke i stubovi za modularno testiranje često se kreiraju na osnovu interfejsa, a ne apstraktnih klasa, jer one mogu imati zavisnosti ili složenu internu logiku.
Sumarno: interfejsi pružaju fleksibilan mehanizam za definisanje ugovora i postizanje polimorfizma bez ograničenja nasleđivanja od jedne osnovne klase, dok su apstraktne klase namenjene za pružanje delimične implementacije i osnovne funkcionalnosti, koje će biti dopunjene u izvedenim klasama.