Middle
Na čo sú rozhrania, ak už existujú abstraktné triedy?
sobes.tech AI
Odpoveď od AI
- Viacnásobné dedičstvo. Trieda môže implementovať viacero rozhraní, ale dediť iba od jednej triedy (vrátane abstraktných).
interface IDrivable {} interface IFlyable {} class Car : IDrivable {} // Dedi iba od jednej triedy (objekt implicitne) class FlyingCar : IDrivable, IFlyable {} // Implementuje viacero rozhraní - Zmluva bez implementácie. Rozhrania definujú iba zmluvu (metódy, vlastnosti, udalosti, indexery) bez akéhokoľvek implementácie. Abstraktné triedy môžu obsahovať čiastočne implementovanú funkcionalitu a polia.
interface IShape { double GetArea(); // Iba deklarácia } abstract class Shape { public abstract double GetArea(); // Deklarácia public string Color { get; set; } // Implementácia vlastnosti public void DisplayColor() { Console.WriteLine($"Farba: {Color}"); // Implementovaná metóda } } - Uvoľnené viazanie (loose coupling). Rozhrania podporujú uvoľnené viazanie medzi komponentmi, pretože kód závisí od zmluvy, nie od konkrétnej implementácie triedy. To uľahčuje výmenu jednej implementácie za inú.
- Rozdelenie rolí. Rozhrania umožňujú definovať jasné role alebo schopnosti, ktoré musí mať trieda, bez ohľadu na jej hlavný typ alebo dedičnú hierarchiu.
- Testovanie. Mocky a stuby pre modulárne testovanie sa často vytvárajú na základe rozhraní, nie abstraktných tried, pretože môžu mať závislosti alebo zložitú vnútornú logiku.
Zhrnutie: rozhrania poskytujú flexibilný mechanizmus na definovanie zmlúv a dosiahnutie polymorfizmu bez obmedzení dedičnosti od jednej základnej triedy, zatiaľ čo abstraktné triedy sú určené na poskytovanie čiastočnej implementácie a základnej funkcionality, ktorú dopĺňajú odvodené triedy.