Junior — Middle
Можете ли да обясните принципа L от SOLID и неговото значение при проектирането на код?
sobes.tech AI
Отговор от AI
Принципът L от SOLID е Принципът на подмяна на Лисков (Liskov Substitution Principle, LSP). Той гласи, че обектите на подклас трябва да могат да бъдат взаимозаменяеми с тези на базовия клас без да нарушават коректността на програмата.
По-просто казано, ако класът B наследява от клас A, навсякъде, където се използва обект A, може да бъде заменен с обект B, и програмата трябва да работи правилно, без да променя поведението си.
Значение при проектирането:
- Осигурява правилно наследяване и полиморфизъм.
- Помага да се избегнат неочаквани грешки при разширяване на функционалността.
- Спомага за създаването на гъвкави и разширяеми архитектури.
Пример на C++:
class Bird {
public:
virtual void fly() {
// реализация на летене
}
};
class Sparrow : public Bird {
// синигерът може да лети, всичко е наред
};
class Ostrich : public Bird {
public:
void fly() override {
throw std::logic_error("Щраусът не може да лети");
}
};
Тук Ostrich нарушава принципа LSP, тъй като подкласът не поддържа поведението на базовия клас. По-добре е да се проектира йерархията по друг начин, например да се отдели интерфейс за летящи птици.