Описание тега liskov-substitution-principle

По вопросам о принципе подстановки Лискова (LSP) в объектно-ориентированном дизайне, разработанном Барбарой Лисков и собранном Робертом К. Мартином как один из принципов SOLID.
2 ответа

Метод toString объекта и принцип подстановки Лискова

Каждый класс, прямо или косвенно, наследует от Object учебный класс. Object Класс, среди прочих, имеет важный метод, чаще всего переопределяемый: toString, Вопрос в том, не приведет ли переопределение этого метода к нарушению принципа подстановки Ли…
18 ноя '18 в 13:34
3 ответа

Разница между принципом замещения Лискова и принципом сегрегации интерфейса

Есть ли принципиальное различие между принципом замены Лискова (LSP) и принципом разделения интерфейса (ISP)? В конечном счете, оба ручаются за разработку интерфейса с общими функциями и вводят новый интерфейс, когда у вас есть специальное назначени…
1 ответ

Объявление Specific::method(): должно быть совместимо с General::method(). PHP не прав насчет LSP?

Я полагаю, что "... должно быть совместимо с..." для обеспечения соблюдения принципа замены Лискова. Но я не уверен, что это то, что говорит LSP? У меня есть такой код: class General { public static function create(): General { return new static; } …
16 апр '18 в 14:33
36 ответов

Что является примером принципа подстановки Лискова?

Я слышал, что принцип замещения Лискова (LSP) является фундаментальным принципом объектно-ориентированного проектирования. Что это такое и каковы некоторые примеры его использования?
1 ответ

Почему нарушения LSP в PHP иногда фатальные, а иногда и предупреждения?

Это нарушение LSP вызывает фатальную ошибку: abstract class AbstractService { } abstract class AbstractFactory { abstract function make(AbstractService $s); } class ConcreteService extends AbstractService { } class ConcreteFactory extends AbstractFa…
17 июн '16 в 19:56
8 ответов

Почему массив реализует IList?

Смотрите определение класса System.Array public abstract class Array : IList, ... Теоретически, я должен быть в состоянии написать этот бит и быть счастливым int[] list = new int[] {}; IList iList = (IList)list; Я также должен иметь возможность вызы…
1 ответ

В PHP указывает ли тип аргумента в методе подкласса, где родительский метод принимает любой разрыв типа LSP?

Если у моего интерфейса есть метод: doSomething($param); И мой класс, реализующий этот интерфейс, указывает тип аргумента следующим образом: doSomething(int $param) {} Это нарушает LSP?
1 ответ

Расширение очереди классов в стек классов нарушает принцип Лискова?

Если у меня есть класс Queue class Queue { pop () { return 'Last value of Array' } } ... и класс Stack class Stack extends Queue { @Override pop () { return 'First value of Array' } } Это нарушение принципа замены Лискова? Зачем?
1 ответ

Чем принцип подстановки Лискова отличается от нормального наследования?

Пытаюсь понять принцип подстановки Лискова. но я не могу определить, чем принцип подстановки Лисков отличается от нормального наследования. Ниже приведен код о нормальном наследовании. Что мне делать с приведенным ниже кодом, чтобы сказать, что мой …
2 ответа

Сохранение экземпляра дочернего класса в переменной родительского типа и использование дочерних функций через родительскую переменную?

У меня есть два класса: Bird и Eagle. Орел унаследован от птицы. Теперь я могу использовать класс Bird для хранения экземпляра типа орла. Однако, когда я пытаюсь вызвать функцию орла, используя переменнуюa Я получаю сообщение об ошибке ошибка: "клас…
2 ответа

Обобщение UML без полиморфизма

Возможно ли иметь отношение обобщения между двумя классами, в котором подкласс добавляет новые операции, не относящиеся к суперклассу (не переопределяя, не перегружая)? Это не нарушение LSP? Мне не нужен полиморфизм, просто повторное использование к…
1 ответ

Принцип подстановки Лискова VS Принцип разделения интерфейса

У меня проблемы с пониманием этих двух принципов. Это немного давно читаемый вопрос, так что наберитесь терпения. Предположим, что у нас есть класс abstract class Shape { abstract void onDraw(); } и интерфейс interface SideCountable { int getSidesCo…
0 ответов

, Как IntelliJ может поддерживать некоторые функции, которые компилятор TypeScript не поддерживает?

Подобно literal typeРеализация рефакторинга и goto возвращает разные результаты между Vscode и IntelliJ. Использует ли IntelliJ LSP для связи с tsc или просто реализует другой tsc?
2 ответа

Как смоделировать более ограниченную версию класса с общим кодом?

Мне нужно создать новый класс. Некоторые из его функций уже находятся в другом классе, и с точки зрения предметной области имеет смысл унаследовать от него. Проблема в том, что есть метод, который должен быть более ограничен по типу параметра, поско…
1 ответ

Нарушает ли этот пример машинописного текста принцип подстановки Лискова?

У меня такой код: type T = { foo: string } var t: T = { foo: 'foo' } interface S { foo: string } var s: S = t Итак, мы знаем, что T < S. Как насчет этого? t = s Итак S < T тоже верно. Мы можем подразумевать, что S == T. Теперь представим U: ty…
05 окт '19 в 22:34
1 ответ

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

Мне сложно понять принцип замещения Лискова, и мне было интересно, нарушает ли следующий код принцип замещения Лискова? public class Task { String status = "Ready"; // One of "Ready", "Started", and "Closed" public void setStatus(String newStatus) {…
1 ответ

Является ли это допустимым примером инвариантности классов с использованием утверждений php 7?

Я пытаюсь лучше понять инвариантность классов, используемую принципом Лискова. Я знаю, что некоторые языки, такие как D, имеют встроенную поддержку инварианта, но, используя утверждения в PHP, я пробовал комбинировать магические методы и утверждать:…
0 ответов

Как мне обобщить DI в asp.net core 3.0

У меня есть подключаемая служба, которая реализует: ILegacySqlLoginService<T> where T : LegacySqlUserBaseClass Моя реализация LegacySqlLoginService<SqlUser> и он реализует интерфейс и SqlUser расширяет абстрактный базовый класс. Однако, …
0 ответов

AbstractFactory и принцип подстановки Лискова

Я работал над дизайном, который должен описывать поток данных. Структура потока всегда одна и та же, но каждый шаг в потоке имеет уникальную реализацию для каждого "типа". Как только мы выберем определенный "тип", он будет таким же для остальной час…
0 ответов

Расширение VSCode : Переименование символов в CSS

Я использую renameProvider: true, чтобы открыть символы переименования, но когда я изменяю свойства с помощью '-' в файле CSS, только половина атрибутов может быть выбрана в поле переименования.