2012-10-16 5 views
3

LSP заявляет, что классы должны быть заменяемы для их базовых классов, что означает, что производные и базовые классы должны быть семантически эквивалентными.Принцип замены Лискова также применим к классам, реализующим интерфейс?

Но применим ли LSP к классам, реализующим интерфейс? Другими словами, если метод интерфейса , реализованный классом, семантически отличается от того, что пользователь ожидает от него, будет ли это рассматриваться как нарушение LSP?

Спасибо

+1

Да, по крайней мере, в java. http://stackoverflow.com/questions/7072290/in-what-ways-are-subtypes-different-from-subclasses-in-usage –

+0

@Ray Tayek: Если бы это было признано нарушением на Java, то я предполагаю, что это также является нарушением в C#? В любом случае, вы говорите прямо противоположное тому, что говорит Finglas - теперь я немного смущен – user702769

+1

зависит от вашего определения http://en.wikipedia.org/wiki/Subtype_polymorphism –

ответ

1

Нет

Это относится только к подтипов. См. Wikipedia article для краткого изложения.

Если у вас есть class B, который наследует или расширяющий class A вы должны иметь возможность переключаться из class A с class B и все должно работать нормально. Интерфейсы часто используются в языках, которые не допускают множественного наследования, поэтому, когда оба объекта имеют общее поведение, то, как это фактически выполняет указанное поведение, отличается между собой, то есть вы не должны иметь возможность их взаимозаменяемости.

+0

1 - «Это относится только к подтипам». Это первый раз, когда я слышу термин «подтип». Итак, (по крайней мере, на C#) класс, реализующий интерфейс, не считается подтипом этого интерфейса? 2 - Почему (по словам Рэя Тайка) в Java это считается нарушением LSP? – user702769

+1

Это немного нечеткая терминология. Люди склонны использовать подтип/подкласс взаимозаменяемо. Я имел в виду отношения «есть». Вот как я вижу LSP, основанный на наследовании. Однако было бы интересно услышать другие точки зрения. Несмотря на это, LSP - это просто принцип. Не правило. Примените его там, где это необходимо. – Finglas

+0

намного больше, чем вам – user702769

1

Да. Интерфейсы имеют отношение «является [существительным]» подобно классам, за исключением того, что существительное не является конкретным типом, а скорее «вещью, которая является [прилагательной фразой]». Если прилагательная фраза «может быть безопасно спрошена, может ли она принимать предметы и может ли она принимать предметы или сообщать о том, что она не будет», то любой объект, который не может быть безопасно спрошен, может ли он принимать предметы или может ответьте да, но потом плохо себя чувствуйте, если на самом деле данный элемент, не будет законной реализацией интерфейса, описанного в нем.

 Смежные вопросы

  • Нет связанных вопросов^_^