вторник, 13 мая 2014 г.

The Liskov Substitution Principle(LSP)

The Liskov Substitution Principle(LSP)

Давайте посмотрим почему то, что пишут в русских интернетах не правда:

«Пусть q(x) является свойством верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.» © wikipedia

Наследующий класс должен дополнять, а не замещать поведение базового класса. ©habrahabr

А теперь обратимся к оригинальной статье Барбары Лисков:

“If S is a declared subtype of T, objects of type S should behave as objects of type T are expected to behave, if they are treated as objects of type T” 
© Barbara Liskov 

Что на советском языке звучит как:
Если S дикларирован подтипом типа T, объекты типа S должны вести себя ожидаемо если они рассматриваются как объекты типа T.
Обратите внимание что LSP это об ожидаемом поведение объектов. Вы следуете LSP если получаете ожидаемое поведение объектов.

Как мы видим, тут нет ни слова про то что класс не должен замещать, он вполне может это делать. И тут нет магии из Вики, которую с первого прочтения не понять. Вся суть принципа сводиться к тому, что бы программа продолжала корректно работать и выдавала ожидаемый результат(хотя бы не взрывалась). Ну например у нас есть программа видеоплеер, мы подменяем класс отвечающий за отображение видео. Мы полностью заместили  метод рисования видео, но всё продолжает работать и мы по прежнему видим картинку. Мы заменили поведение класса, он теперь отображает другой формат, но всё работает корректно. Или в программе заменяем класс рисующий рюшечки, он рисует совершенно другие рюшечки, ничего при этом не расширяя, например меняем текстовое поле на выпадающий список вариантов.

И вообще ознакомьтесь с вот этим:
http://www.engr.mun.ca/~theo/Courses/sd/5895-downloads/sd-principles-3.ppt.pdf



Комментариев нет:

Отправить комментарий