LSP (подстановка Лискова): проблема: у вас есть переопределенный неиспользуемый / пустой метод в дочернем элементе, другими словами, ваш дочерний элемент расширяет поведение и ему это не нужно: например:
/// LSP против ISP
class Animal {
func fly() {
// TODO: flying logic
}
func eat() {
// TODO: eating logic
}
}
class Cat: Animal {
override func fly() {
//Hi I'm a cat I cant fly,
///here is the Breaking of LSP, I have a different behavior
}
}
ISP (разделение интерфейса): у вас уже есть интерфейс со многими обязанностями, и разработчику не нужны все эти вещи, поэтому вам нужно разбить эти методы и перегруппировать ихв реляционное поведение
//this is bad, why, cause it have two different responsibilities
protocol Animal {
func fly()
func eat()
}
//to it write
protocol Flyable {
func fly()
}
protocol Feedable {
func eat()
}