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-ին համապատասխանելու համար անհրաժեշտ է փոխել դասերի ժառանգականությունը կամ բաժանել ինտերֆեյսները, որպեսզի ենթակլասները չպետք է իրականացնել չաջակցվող վարքագիծը։