Sobes.tech
Middle

Na čo sú rozhrania, ak už existujú abstraktné triedy?

sobes.tech AI

Odpoveď od AI

  1. 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í
    
  2. 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
        }
    }
    
  3. 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ú.
  4. 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.
  5. 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.