Вопросы с тегом «liskov-substitution»

По вопросам о принципе подстановки Лисков в объектно-ориентированном дизайне.

133
Это нарушение принципа подстановки Лискова?

Скажем, у нас есть список сущностей задач и ProjectTaskподтип. Задачи могут быть закрыты в любое время, кроме тех, ProjectTasksкоторые не могут быть закрыты, если они имеют статус Запущено. Пользовательский интерфейс должен гарантировать, что опция закрытия запуска ProjectTaskникогда не будет...

48
LSP vs OCP / Замена Лискова VS Open Закрыть

Я пытаюсь понять твердые принципы ООП и пришел к выводу, что у LSP и OCP есть некоторые сходства (если не сказать больше). принцип открытого / закрытого состояния гласит, что «программные объекты (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации»....

44
В чем разница между подклассом и подтипом?

Самый высокий рейтинг ответа на этот вопрос о принципе замещения Лискова изо всех сил старается различить термины подтип и подкласс . Это также указывает на то, что некоторые языки объединяют два, а другие нет. Для объектно-ориентированных языков, с которыми я больше всего знаком (Python, C ++),...

28
Существует ли язык или шаблон проектирования, который позволяет * удалять * поведение объекта или свойства в иерархии классов?

Общеизвестным недостатком традиционных иерархий классов является то, что они плохи, когда дело доходит до моделирования реального мира. В качестве примера пытаемся представить виды животных с помощью классов. При этом есть несколько проблем, но я никогда не видел решения, когда подкласс «теряет»...

27
Что может пойти не так, если нарушится принцип подстановки Лискова?

Я следил за этим высоко оцененным вопросом о возможном нарушении принципа подстановки Лискова. Я знаю, что такое принцип подстановки Лискова, но мне все еще неясно, что может пойти не так, если я, как разработчик, не задумываюсь над этим принципом при написании объектно-ориентированного...

20
Не нарушают ли частные случаи с запасными вариантами принцип подстановки Лискова?

Допустим, у меня есть интерфейс, FooInterfaceкоторый имеет следующую подпись: interface FooInterface { public function doSomething(SomethingInterface something); } И конкретный класс, ConcreteFooкоторый реализует этот интерфейс: class ConcreteFoo implements FooInterface { public function...

19
Как усиление предусловий и ослабление постусловий нарушают принцип подстановки Лискова?

Я читал, что принцип замещения Лискова нарушается, если: Предпосылки усиливаются, или Постусловия ослаблены Но я еще не до конца понял, как эти два пункта нарушают принцип подстановки Лискова. Может кто-нибудь, пожалуйста, объясните на примере. В частности, каким образом любое из вышеперечисленных...

18
Есть ли конкретное название для парадокса «Квадрат наследует от прямоугольника»?

Определенная ошибка ООП показана с классом Square, унаследованным от Rectangle, где логически Square является специализацией Rectangle и поэтому должен наследовать от него, но все рушится, когда вы пытаетесь изменить длину или ширину Square. Есть ли конкретный термин для описания того, что...

17
Применяется ли принцип подстановки Лискова к классам, реализующим интерфейс?

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

17
Государственный паттерн нарушает принцип подстановки Лискова?

Это изображение взято из применения доменного дизайна и шаблонов: с примерами в C # и .NET Это диаграмма классов для шаблона состояний, в котором в SalesOrderтечение срока службы может быть несколько состояний. Между разными состояниями разрешены только определенные переходы. Теперь OrderStateкласс...

14
Реальный мир - принцип замещения Лискова

Справочная информация: я разрабатываю систему обмена сообщениями. Эта структура позволит: отправка сообщений через сервисную шину подписка на очереди в шине сообщений подписка на темы в шине сообщений В настоящее время мы используем RabbitMQ, но я знаю, что мы перейдем на Microsoft Service Bus (в...

14
Как проверить принцип подстановки Лискова в иерархии наследования?

Вдохновленный этим ответом: Лиск принцип замещения требует , что Предпосылки не могут быть усилены в подтипе. Постусловия не могут быть ослаблены в подтипе. Инварианты супертипа должны быть сохранены в подтипе. Ограничение истории («правило истории»). Объекты считаются изменяемыми только через их...

13
Может ли проблема круг-эллипс быть решена путем изменения отношений?

Имея CircleпростиратьсяEllipse перерывам в Лиск Substition принципе , потому что она изменяет постусловие , а именно: вы можете установить X и Y независимо друг от друга , чтобы нарисовать эллипс, но X всегда должен быть равен Y для окружностей. Но разве проблема не в том, что круг является...

13
Стек, расширяющий LinkedList. Нарушение принципа подстановки Лискова?

Существует класс LinkedList с такими функциями, как add_first (), add_last (), add_after (), remove_first (), remove_last () и remove () Теперь есть класс Stack, который предоставляет такие функции, как push (), pop (), peek () или top (), и для реализации этих методов он расширяет методы класса...

11
Как указать предварительное условие (LSP) в интерфейсе в C #?

Допустим, у нас есть следующий интерфейс - interface IDatabase { string ConnectionString{get;set;} void ExecuteNoQuery(string sql); void ExecuteNoQuery(string[] sql); //Various other methods all requiring ConnectionString to be set } Предварительное условие состоит в том, что ConnectionString...

11
Является ли принцип подстановки Лискова несовместимым с интроспекцией или уткой?

Правильно ли я понимаю, что принцип подстановки Лискова не может соблюдаться в языках, где объекты могут сами себя проверять, как, например, в языках с утиной типизацией? Например, в Ruby, если класс Bнаследует от класса A, то для каждого объекта xиз A, x.classсобирается вернуться A, но если xэто...