Sobes.tech
Junior — Middle

შეგიძლიათ მიაწოდოთ ლისკოვის ჩანაცვლების პრინციპის მაგალითი ობიექტზე ორიენტირებულ პროგრამირებაში?

sobes.tech AI

პასუხი AI-სგან

Liskov-ի փոխարինման սկզբունքը (Liskov Substitution Principle, LSP) ասում է, որ ենթակլասի օբյեկտները պետք է փոխարինելի լինեն հիմնական դասի օբյեկտների հետ՝ առանց ծրագրի ճիշտությունը խախտելու:

C#-ում օրինակ:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Թռչունը թռչում է");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Կաքավը թռչում է");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Օստրիչը չի կարող թռչել");
    }
}

void MakeBirdFly(Bird bird) {
    bird.Fly();
}

// Օգտագործում:
MakeBirdFly(new Sparrow()); // ճիշտ
MakeBirdFly(new Ostrich()); // խախտում է LSP-ը, քանի որ գցում է արտահայտություն

Այս օրինակով, Ostrich դասը խախտում է Լիսկովի փոխարինման սկզբունքը, քանի որ չի աջակցում հիմնական դասի Bird (մեթոդ Fly) վարքագիծը, գցելով արտահայտություն: LSP-ին համապատասխանելու համար անհրաժեշտ է փոխել դասերի ժառանգականությունը կամ բաժանել ինտերֆեյսները, որպեսզի ենթակլասները չպետք է իրականացնել չաջակցվող վարքագիծը։