@@SurenKhorenyan У вас там два разных метода, с разными названиями (для кота и льва) и их вызов в сторонней ф-ии. Это проблема никак не связана с принципом Барбары Лисков, это просто какая-то сторонняя проблема в коде которая могла возникнут по десятку причин (ошибка проектирования интерфейса, проблема отсутствия адаптеров, нарушение связанности слоёв абстракции и пр.). Принцип Барбары Лисков гласит, что не стоит изменять функционал наследника так, чтобы его использование вместо родителя приводило к ошибкам или не очевидному поведению. Пример: у вас есть класс Person с методом moveForward(), который перемещает персонажа на клетку вперёд. Потом вы создаёте наследника StandingNPC extends Person и у него переопределяете метод moveForward() так что он никак не перемещает персонажа. Вот это и есть нарушение принципа Барбары
@@mzaytsev Спасибо, это хороший пример! Я не догадался привести такой пример, в будущем учту. Надеюсь, зрителю будет понятна сама идея и в том виде, что я показал
@@SurenKhorenyan На всякий случай отпишу лучше ещё тут вторую ошибку. Принцип разделения интерфейсов он не в выделении общего наследника и превращении его в интерфейс (это не верное понимание интерфейса), а в выделении множества интерфейсов на каждую характеристику будущего класса. Класс - это всегда некоторая сущность (даже если класс абстрактный) Интерфейс - это характеристика (в вашем примере это было бы два интерфейса, что-то вроде SmsSendible, EmailSendible) и уже имплементация каждого интерфейса в классах PDA, Smartphone и пр. Однако на этом примере сложно понять в чём плюс этого подхода, его легче рассмотреть на примере когда возникает проблема необходимости множественного наследования, аля Horse extends Animal, Vehicle
Думаю, на деле функция включения лампочки будет реализована конкретно под лампочку, а не под все световые приборы. Хотя мб в рамках одного производителя и под все)
Всё зависит от ситуации. Лампочка же тоже бывает разная. Или представьте у вас дома один выключатель для лампочки, а другой для вентиляции. Выключатели же одинаковые. Так и в коде может быть пересечение. Но в частных случаях, конечно, может быть по-разному
Хмм, а что именно было непонятно? Неужели "вообще ничего непонятно"? Про какой принцип было непонятно? Догадываюсь, что если вы совсем не знаете про классы, то сложно понять всё, что было про наследование. Может быть понятие интерфейсов не очень понятно. А ещё?
@@АндрейСусарев-ю3л ничего страшного! Я рад объяснить, вы только скажите, что именно непонятно. Соглашусь, если вы только-только начинаете, может быть не всё понятно. Но когда вы будете сталкиваться с подобными проблемами, уже будете узнавать в них знакомые паттерны и легче находить решение