Sobes.tech
Middle

Эгер алгач абстракттуу класстар бар болсо, интерфейстер эмне үчүн керек?

sobes.tech AI

AIден жооп

  1. Көп мурас алуу. Класс бир нече интерфейстерди ишке ашыра алат, бирок бир гана класс (анын ичинде абстрактылардан) мурас алат.
    интерфейс IDrivable {}
    интерфейс IFlyable {}
    
    класс Car : IDrivable {} // Бир гана класс (объект көзгө көрүнбөйт)
    
    класс FlyingCar : IDrivable, IFlyable {} // Бир нече интерфейстерди ишке ашырат
    
  2. Ишке ашырылбаган контракт. Интерфейстерлер гана контрактты (методдор, мүлктөр, окуялар, индексаторлор) аныктайт, эч кандай ишке ашырылышы жок. Абстракттуу класстар жарым-жартылай ишке ашырылган функционал жана талаалар болушу мүмкүн.
    интерфейс IShape
    {
        double GetArea(); // Жай гана жарыялоо
    }
    
    абстракттуу класс Shape
    {
        public abstract double GetArea(); // Жарыялоо
        public string Color { get; set; } // Мүлктү ишке ашыруу
    
        public void DisplayColor()
        {
            Console.WriteLine($"Color: {Color}"); // Ишке ашырылган метод
        }
    }
    
  3. Алсыз байланыштыруу (loose coupling). Интерфейстер компоненттердин ортосунда алсыз байланышты камсыздайт, анткени код контрактка гана көз каранды, конкреттүү класс ишке ашыруусуна эмес. Бул бир ишке ашырылышын башкасына алмаштырууну жеңилдетет.
  4. Ролдорду бөлүү. Интерфейстер класс кандай ролдорду же мүмкүнчүлүктөрдү аткаруусу керектигин так аныктоого мүмкүндүк берет, ал анын негизги түрү же мурас иерархиясы менен байланышы жок.
  5. Тестирлөө. Мокинг жана модулдук тестирлөө үчүн стабы көбүнчө интерфейстерге негизделет, анткени абстракттуу класстарда көз карандылык же татаал ички логика болушу мүмкүн.

Жыйынтыктап айтканда: интерфейстер контракттарды аныктоо жана полиморфизмге жетүү үчүн ийкемдүү механизмди камсыздайт, ал эми абстракттуу класстар жарым-жартылай ишке ашырылган жана негизги функционалды камсыз кылуу үчүн арналган, ал эми ал эми туундуларда кеңейтилет.