Middle
Miért szükségesek az interfészek, ha már léteznek absztrakt osztályok?
sobes.tech MI
Válasz az MI-től
- Többszörös öröklés. Egy osztály több interfészt valósíthat meg, de csak egy osztályból örökölhet (beleértve az absztraktokat is).
interface IDrivable {} interface IFlyable {} class Car : IDrivable {} // Csak egy osztályból örököl (az object implicit) class FlyingCar : IDrivable, IFlyable {} // Több interfészt valósít meg - Megvalósítás nélküli szerződés. Az interfészek csak szerződést (metódusokat, tulajdonságokat, eseményeket, indexelőket) határoznak meg, semmilyen megvalósítással. Az absztrakt osztályok részben megvalósított funkciókat és mezőket tartalmazhatnak.
interface IShape { double GetArea(); // Csak deklaráció } abstract class Shape { public abstract double GetArea(); // Deklaráció public string Color { get; set; } // Tulajdonság megvalósítása public void DisplayColor() { Console.WriteLine($"Szín: {Color}"); // Megvalósított metódus } } - Laza csatolás (loose coupling). Az interfészek elősegítik a laza csatolást a komponensek között, mivel a kód a szerződésre, nem a konkrét osztálymegvalósításra támaszkodik. Ez megkönnyíti az egyik megvalósítás másikkal való helyettesítését.
- Szerepek szétválasztása. Az interfészek lehetővé teszik, hogy világos szerepeket vagy képességeket határozzunk meg, amelyekkel egy osztálynak rendelkeznie kell, függetlenül az alapvető típusától vagy öröklési hierarchiájától.
- Tesztelés. A mockokat és stubokat egységtesztekhez gyakran interfészek alapján hozzák létre, nem absztrakt osztályokból, mivel azok függőségekkel vagy összetett belső logikával rendelkezhetnek.
Összefoglalva: az interfészek rugalmas mechanizmust kínálnak a szerződések meghatározására és a polimorfizmus elérésére anélkül, hogy korlátoznák az öröklést egyetlen ősosztályból, míg az absztrakt osztályokat részleges megvalósítás és alapfunkcionalitás nyújtására tervezték, amelyeket a származtatott osztályok egészítenek ki.