Sobes.tech
Middle

Ինչու են անհրաժեշտ ինտերֆեյսները, եթե արդեն գոյություն ունեն աբստրակտ դասերը։

sobes.tech AI

Պատասխան AI-ից

  1. Բազմակի ժառանգություն. Կլասը կարող է իրականացնել մի քանի ինտերֆեյսներ, բայց ժառանգել միայն մեկ դասից (ներառյալ աբստրակտները):
    interface IDrivable {}
    interface IFlyable {}
    
    class Car : IDrivable {} // ժառանգում է միայն մեկ դասից (անվերացական)
    
    class FlyingCar : IDrivable, IFlyable {} // իրականացնում է մի քանի ինտերֆեյսներ
    
  2. Համաձայնագիր առանց իրականացման. Ինտերֆեյսները միայն սահմանում են համաձայնագիր (մեթոդներ, հատկություններ, իրադարձություններ, ինդեքսատորներ) առանց որևէ իրականացման: Աբստրակտ դասերը կարող են պարունակել մասնակի իրականացված ֆունկցիոնալություն և դաշտեր:
    interface IShape
    {
        double GetArea(); // Միայն հայտարարում
    }
    
    abstract class Shape
    {
        public abstract double GetArea(); // Հայտարարում
        public string Color { get; set; } // Իրականացման հատկություն
    
        public void DisplayColor()
        {
            Console.WriteLine($"Գույն: {Color}"); // Իրականացված մեթոդ
        }
    }
    
  3. Թույլ կապ (loose coupling). Ինտերֆեյսները խթանում են թույլ կապը կոմպոնենտների միջև, քանի որ կոդը կախված է համաձայնագրից, ոչ թե կոնկրետ դասի իրականացումից: Սա հեշտացնում է մեկ իրականացման փոխարինումը մյուսով:
  4. Դերերի բաժանում. Ինտերֆեյսները թույլ են տալիս հստակ սահմանել դերեր կամ հնարավորություններ, որոնք պետք է ունենա դասը, անկախ նրա հիմնական տիպից կամ ժառանգականությունից:
  5. Թեստավորում. Մոկեր և ստաբներ մոդուլային թեստավորման համար հաճախ ստեղծվում են ինտերֆեյսների հիման վրա, ոչ թե աբստրակտ դասերի, քանի որ դրանք կարող են ունենալ կախվածություններ կամ բարդ ներքին տրամաբանություն:

Ընդհանուր առմամբ՝ ինտերֆեյսները տրամադրում են ճկուն մեխանիզմ պայմանագրերի սահմանման և պոլիմորֆիզմի հասնելու համար՝ առանց ժառանգության սահմանափակումների միայն մեկ հիմնական դասից, մինչդեռ աբստրակտ դասերը նախատեսված են մասամբ իրականացման և հիմնական ֆունկցիոնալության տրամադրման համար, որը լրացվում է ժառանգական դասերով: