stalxed
Новичок
Не могу понять детали этого принципа.
Вкратце его описание таково: если клиент работает с интерфейсом базового класса, и ему "подсунуть" дочерний, он должен работать и с ним. Вольная трактовка конечно.
Но вот простой теоретический пример:
Будет ли это нарушением принципа подстановки Лискоу?
Ведь базовый класс коллекции:
1) не выдаёт эксепшенов, а дочерний выдаёт.
2) базовый класс добавляет в коллекцию любую запись, а дочерний только 1 типа.
Вкратце его описание таково: если клиент работает с интерфейсом базового класса, и ему "подсунуть" дочерний, он должен работать и с ним. Вольная трактовка конечно.
Но вот простой теоретический пример:
PHP:
class Record_Abstract
{}
class Record_One extends Record_Abstract
{}
class Collection_Abstract
{
/**
* Add record to collection.
*
* @param Record_Abstract $record
* @return Record_Abstract
*/
public function add(Record_Abstract $record)
{
//some code...
return $record;
}
}
class Collection_One extends Collection_Abstract
{
/**
* Add record to collection.
*
* @param Record_One $record
* @return Record_Abstract
* @throws Exception
*/
public function add(Record_Abstract $record)
{
if ( ! ($record instanceof Record_One))
throw new Exception();
return parent::add($record);
}
}
Ведь базовый класс коллекции:
1) не выдаёт эксепшенов, а дочерний выдаёт.
2) базовый класс добавляет в коллекцию любую запись, а дочерний только 1 типа.