|
|
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Встретил такое понятие как LSP принцип: откуда-то с интернетаНаследуемый объект может заменить родительское пред-условие на такое же или более слабое и родительское пост-условие на такое же или более сильное. Как-то нагугленное по этой теме не дало мне четкого представления о том, что же это за принцип, что есть пост и предусловие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 12:31 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Это вроде, только вывод из самого принципа. У вас вопрос только по этому предложению, или принципу в целом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 12:37 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, скорее по принципу в целом. Я понял, что его смысл в том, что если заменить класс на его потомка - ничего поменяться не должно. Честно говоря для меня это выглядит как будто надо запретить overriding к чертям и всё. Но я так понимаю, что не всё так жётско на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:37 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
точнее так авторЯ понял, что его смысл в том, что если заменить класс на его потомка - ничего поменяться не должно. Я понял, что его смысл в том, что если заменить класс на его потомка - поведение поменяться не должно. Вопрос в том что есть смена поведения, а что не есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:41 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90, Наследование не должно менять поведение предка. Оно должно его "расширять". Принцип называется "принципом подстановки" потому что проверяется подтсановкой наследника на место предка. И использование наследника везде где используется предок, не должно менять существующую для предка логику. Погуглите примеры нарушения и следование LSP. Например такой http://www.codeproject.com/Articles/595160/Understand-Liskov-Substitution-Principle-LSP Хотя задача квадрат\прямоугольник не самая простая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:44 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90, Пример нарушения LSP Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:51 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczredwhite90, Пример нарушения LSP Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. на таком то уровне я понимаю конечно. Тогда вернемся к вопросу о пред и постусловиях. где они в вашем примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:56 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90Тогда вернемся к вопросу о пред и постусловиях. где они в вашем примере? Это относиться к тому как классы используются в остальном коде. Вот это прочитано и понятно? http://en.wikipedia.org/wiki/Precondition http://en.wikipedia.org/wiki/Postcondition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 15:59 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90Вопрос в том что есть смена поведения, а что не есть. если по отсюда авторЕсли для каждого объекта o1 типа S существует объект o2 типа T, такой что любая программа P, определенная в терминах T, не изменяет своего поведения при подстановке объекта o1 вместо объекта o2, то тип S является подтипом T. то говорится, что если не меняется - подтип, а если меняется, то х.з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 17:20 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczredwhite90Тогда вернемся к вопросу о пред и постусловиях. где они в вашем примере? Это относиться к тому как классы используются в остальном коде. Вот это прочитано и понятно? http://en.wikipedia.org/wiki/Precondition http://en.wikipedia.org/wiki/Postcondition Я так понял: метод вычисление факториала. предусловие - аргумент метода должен быть не отрицателен. постусловие - должен вернуть факториал от аргумента. А как их усиливать и ослаблять - не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 19:03 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90, авторНаследуемый объект может заменить родительское пред-условие на такое же или более слабое и родительское пост-условие на такое же или более сильное. предку должно как минимум хватать предусловий родителя. предок должен сделать как минимум то, что делает родитель, может что-то большее. так что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 19:06 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. так не нарушается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 19:07 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90так не нарушается? В двойне. Положем предусловия. а) Объект может начать действие находясь на твердой поверхности б) Предпологаемый маршрут объекта должен проходить по твердой поверхности без крутых уклонов и разрывов. Постусловия в) Объект должен переместится в координаты x,y. Если мы заменяем бег полетом, то на первый взгляд все условия только ослабляются. Но увы добавляется условие г) для начала движения не должно быть препятствий мешающих взлететь (например низкий потолок). А это условие в свою очередь и является усилением предусловия а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 23:31 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90 Я так понял: метод вычисление факториала. предусловие - аргумент метода должен быть не отрицателен. постусловие - должен вернуть факториал от аргумента. А как их усиливать и ослаблять - не понимаю Предусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили. Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE. Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 09:35 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Чтобы совсем было понятно код должен выглядеть примерно так: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:31 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
пролетевший, во) теперь понял)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:33 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
пролетевшийredwhite90Я так понял: метод вычисление факториала. предусловие - аргумент метода должен быть не отрицателен. постусловие - должен вернуть факториал от аргумента. А как их усиливать и ослаблять - не понимаю Предусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили. Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE. Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят. хотя бррр... давайте математически: родитель предусловие принимает числа [0;100] постусловие возвращает числа [0; 10000] наследник предусловие принимает числа [-100;100] постусловие возвращает чисчла [0;55000] сравним предусловия: родитель [0;100] наследник [-100;100] сравним постусловия родитель [0; 10000] наследник [0;55000] Что в предусловии, что в постусловии мы расширили диапазон. Почему в одном случае это усиление(видимо в пост) а в другом это ослабление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:44 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90, см. выше. Принцип подразумевает: - что все что проходит мимо первого assert у родителя, должно проходить и у потомка; - что подрывается на втором у родителя, должно подрываться и у потомка. Если вы не ставите assert (хотя бы мысленно), то на LSP можно смело забить болт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:57 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, авторПринцип подразумевает: - что все что проходит мимо первого assert у родителя, должно проходить и у потомка; - что подрывается на втором у родителя, должно подрываться и у потомка. Я это понял. Но почему в одном случае это называется ослабление, а в другом усиление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:03 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90Я это понял. Но почему в одном случае это называется ослабление, а в другом усиление? Ослабление - это когда все кто проходил проходят и дальше и еще кто-то. Усиление - это когда все кто подрывался продолжают подрываться и еще кто-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:15 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Усиление - это когда все кто подрывался продолжают подрываться и еще кто-то. авторсравним постусловия родитель [0; 10000] наследник [0;55000] кто тут стал подрываться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:32 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
redwhite90, Гм. это ослабление. Его не должно быть - ибо тот кто работает с предком может не ожидать получение 10001. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:54 |
|
||
|
LSP принцип.
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, пролетевшийПредусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили. Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE. Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят. то есть это неправда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=181&tid=2127450]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 336ms |

| 0 / 0 |
