2010-02-12 1 views
10

Говоря свободно, Лисков Замена Принцип утверждает, что производный класс может быть заменен вместо базового класса, не затрагивая пользователя. В случае, когда базовый класс является абстрактным классом, а это означает, что пользователь не использует экземпляр базового класса, применяются ли ограничения наследования Лискова к производному классу?Применяется ли принцип замены Лискова для подтипа, который унаследован от абстрактного класса?

ответ

5

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

1

Да потому, что абонент всегда может это сделать:

BaseAbstractClass instance = new DerivedClass(); 
0

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

Рассмотрите возможность создания объекта на заводе или переданного в качестве аргумента или путем инъекции зависимостей после создания каким-то репозиторием, который может быть сфокусирован на принятии решений о том, какие конкретные типы необходимы в различных обстоятельствах.

0

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

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