Middle
Na co jsou rozhraní, pokud již existují abstraktní třídy?
sobes.tech AI
Odpověď od AI
- Vícenáslednictví. Třída může implementovat více rozhraní, ale dědit pouze od jedné třídy (včetně abstraktních).
interface IDrivable {} interface IFlyable {} class Car : IDrivable {} // Dědí pouze od jedné třídy (implicitně od object) class FlyingCar : IDrivable, IFlyable {} // Implementuje více rozhraní - Smlouva bez implementace. Rozhraní definují pouze smlouvu (metody, vlastnosti, události, indexery) bez jakékoliv implementace. Abstraktní třídy mohou obsahovat částečně implementovanou funkcionalitu a pole.
interface IShape { double GetArea(); // Pouze deklarace } abstract class Shape { public abstract double GetArea(); // Deklarace public string Color { get; set; } // Implementace vlastnosti public void DisplayColor() { Console.WriteLine($"Barva: {Color}"); // Implementovaná metoda } } - Volné spojení (loose coupling). Rozhraní podporují volné spojení mezi komponentami, protože kód závisí na smlouvě, nikoliv na konkrétní implementaci třídy. To usnadňuje výměnu jedné implementace za jinou.
- Rozdělení rolí. Rozhraní umožňují definovat jasné role nebo schopnosti, které musí třída mít, bez ohledu na její hlavní typ nebo hierarchii dědičnosti.
- Testování. Mocky a stuby pro jednotkové testy jsou často vytvářeny na základě rozhraní, nikoliv abstraktních tříd, protože ty mohou mít závislosti nebo složitou interní logiku.
Shrnuto: rozhraní poskytují flexibilní mechanismus pro definování smluv a dosažení polymorfismu bez omezení dědičnosti od jedné základní třídy, zatímco abstraktní třídy jsou určeny k poskytování částečné implementace a základní funkcionality, kterou doplňují odvozené třídy.