Sobes.tech
Middle

Əgər artıq abstrakt siniflər mövcuddursa, interfeyslər nə üçün lazımdır?

sobes.tech Süni İntellekt

AI-dan cavab

  1. Çoxlu irsiyyət. Bir sinf bir neçə interfeys tətbiq edə bilər, lakin yalnız bir sinfdən irsiyyət edə bilər (abstraktlar daxil olmaqla).
    interface IDrivable {}
    interface IFlyable {}
    
    class Car : IDrivable {} // Yalnız bir sinfdən irsiyyət edir (obyekt qeyri-müəyyən)
    
    class FlyingCar : IDrivable, IFlyable {} // Bir neçə interfeysi tətbiq edir
    
  2. İcra olunmayan müqavilə. Interfeyslər yalnız müqaviləni (metodlar, xüsusiyyətlər, hadisələr, indeksləyicilər) müəyyən edir və heç bir icra daxil etmir. Abstrakt sinflər qismən icra olunmuş funksionallıq və sahələr ehtiva edə bilər.
    interface IShape
    {
        double GetArea(); // Yalnız bəyanat
    }
    
    abstract class Shape
    {
        public abstract double GetArea(); // Bəyanat
        public string Color { get; set; } // Xüsusiyyətin tətbiqi
    
        public void DisplayColor()
        {
            Console.WriteLine($"Rəng: {Color}"); // Tətbiq olunmuş metod
        }
    }
    
  3. Lazımsız əlaqə (loose coupling). Interfeyslər komponentlər arasında lazımsız əlaqəni təşviq edir, çünki kod sinfin konkret tətbiqindən deyil, müqavilədən asılıdır. Bu, bir tətbiqin digərinin yerinə asanlıqla dəyişdirilməsinə imkan verir.
  4. Rolların bölünməsi. Interfeyslər sinfə aydın rollar və ya imkanlar təyin etməyə imkan verir, bu, onun əsas növü və ya irs hiyerarşisindən asılı deyil.
  5. Test. Mock və stub-lar modul testlər üçün çox vaxt interfeyslər əsasında yaradılır, çünki bunlar asılılıqlara və ya mürəkkəb daxili məntiqə malik ola bilər.

Xülasə: interfeyslər müqavilələrin müəyyənləşdirilməsi və polimorfizmin əldə edilməsi üçün çevik mexanizm təmin edir, yalnız bir əsas sinifdən irsiyyətin məhdudiyyətləri olmadan, abstrakt sinflər isə qismən tətbiq və əsas funksionallıq təmin etmək üçün nəzərdə tutulmuşdur və törəmə sinflər tərəfindən tamamlanır.