powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / LSP принцип.
25 сообщений из 30, страница 1 из 2
LSP принцип.
    #38591687
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встретил такое понятие как LSP принцип:
откуда-то с интернетаНаследуемый объект может заменить родительское пред-условие на такое же или более слабое и родительское пост-условие на такое же или более сильное.

Как-то нагугленное по этой теме не дало мне четкого представления о том, что же это за принцип, что есть пост и предусловие.
...
Рейтинг: 0 / 0
LSP принцип.
    #38591696
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вроде, только вывод из самого принципа. У вас вопрос только по этому предложению, или принципу в целом?
...
Рейтинг: 0 / 0
LSP принцип.
    #38591740
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Может тут что полезное найдешь.
...
Рейтинг: 0 / 0
LSP принцип.
    #38591999
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

скорее по принципу в целом.

Я понял, что его смысл в том, что если заменить класс на его потомка - ничего поменяться не должно.

Честно говоря для меня это выглядит как будто надо запретить overriding к чертям и всё.

Но я так понимаю, что не всё так жётско на самом деле.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592000
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее так

авторЯ понял, что его смысл в том, что если заменить класс на его потомка - ничего поменяться не должно.
Я понял, что его смысл в том, что если заменить класс на его потомка - поведение поменяться не должно.

Вопрос в том что есть смена поведения, а что не есть.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592003
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Наследование не должно менять поведение предка. Оно должно его "расширять".
Принцип называется "принципом подстановки" потому что проверяется подтсановкой наследника на место предка. И использование наследника везде где используется предок, не должно менять существующую для предка логику.
Погуглите примеры нарушения и следование LSP. Например такой
http://www.codeproject.com/Articles/595160/Understand-Liskov-Substitution-Principle-LSP
Хотя задача квадрат\прямоугольник не самая простая.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592016
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Пример нарушения LSP
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Animal{
  void move(){
    run();
  }
}

class Bird extends Animal{
  @Override
  void move(){
    fly();
  }
}
...
Рейтинг: 0 / 0
LSP принцип.
    #38592023
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90,

Пример нарушения LSP
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Animal{
  void move(){
    run();
  }
}

class Bird extends Animal{
  @Override
  void move(){
    fly();
  }
}



на таком то уровне я понимаю конечно.

Тогда вернемся к вопросу о пред и постусловиях.

где они в вашем примере?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592028
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Тогда вернемся к вопросу о пред и постусловиях.
где они в вашем примере?
Это относиться к тому как классы используются в остальном коде.
Вот это прочитано и понятно?
http://en.wikipedia.org/wiki/Precondition
http://en.wikipedia.org/wiki/Postcondition
...
Рейтинг: 0 / 0
LSP принцип.
    #38592147
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90Вопрос в том что есть смена поведения, а что не есть.

если по отсюда
авторЕсли для каждого объекта o1 типа S существует объект o2 типа T, такой что любая программа P, определенная в терминах T, не изменяет своего поведения при подстановке объекта o1 вместо объекта o2, то тип S является подтипом T.

то говорится, что если не меняется - подтип,
а если меняется, то х.з.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592283
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90Тогда вернемся к вопросу о пред и постусловиях.
где они в вашем примере?
Это относиться к тому как классы используются в остальном коде.
Вот это прочитано и понятно?
http://en.wikipedia.org/wiki/Precondition
http://en.wikipedia.org/wiki/Postcondition

Я так понял:

метод вычисление факториала.

предусловие - аргумент метода должен быть не отрицателен.

постусловие - должен вернуть факториал от аргумента.


А как их усиливать и ослаблять - не понимаю
...
Рейтинг: 0 / 0
LSP принцип.
    #38592285
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,

авторНаследуемый объект может заменить родительское пред-условие на такое же или более слабое и родительское пост-условие на такое же или более сильное.

предку должно как минимум хватать предусловий родителя.

предок должен сделать как минимум то, что делает родитель, может что-то большее.

так что ли?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592288
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Animal{
  void move(){
    run();
  }
}

class Bird extends Animal{
  @Override
  void move(){
    fly();
    run();
  }
}



так не нарушается?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592418
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90так не нарушается?
В двойне.

Положем предусловия.
а) Объект может начать действие находясь на твердой поверхности
б) Предпологаемый маршрут объекта должен проходить по твердой поверхности без крутых уклонов и разрывов.

Постусловия
в) Объект должен переместится в координаты x,y.

Если мы заменяем бег полетом, то на первый взгляд все условия только ослабляются. Но увы добавляется условие
г) для начала движения не должно быть препятствий мешающих взлететь (например низкий потолок).

А это условие в свою очередь и является усилением предусловия а.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592581
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90
Я так понял:

метод вычисление факториала.

предусловие - аргумент метода должен быть не отрицателен.

постусловие - должен вернуть факториал от аргумента.


А как их усиливать и ослаблять - не понимаю

Предусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили.
Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE.
Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592707
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы совсем было понятно код должен выглядеть примерно так:
Код: java
1.
2.
3.
4.
5.
 void move() {
  assert предусловие;
  ...
  assert постусловие;
 }
...
Рейтинг: 0 / 0
LSP принцип.
    #38592708
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пролетевший,

во) теперь понял))
...
Рейтинг: 0 / 0
LSP принцип.
    #38592722
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пролетевшийredwhite90Я так понял:

метод вычисление факториала.

предусловие - аргумент метода должен быть не отрицателен.

постусловие - должен вернуть факториал от аргумента.


А как их усиливать и ослаблять - не понимаю

Предусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили.
Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE.
Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят.


хотя бррр...

давайте математически:

родитель
предусловие
принимает числа [0;100]
постусловие
возвращает числа [0; 10000]
наследник
предусловие
принимает числа [-100;100]
постусловие
возвращает чисчла [0;55000]


сравним предусловия:
родитель [0;100]
наследник [-100;100]
сравним постусловия
родитель [0; 10000]
наследник [0;55000]


Что в предусловии, что в постусловии мы расширили диапазон. Почему в одном случае это усиление(видимо в пост) а в другом это ослабление?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592745
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

см. выше.

Принцип подразумевает:
- что все что проходит мимо первого assert у родителя, должно проходить и у потомка;
- что подрывается на втором у родителя, должно подрываться и у потомка.

Если вы не ставите assert (хотя бы мысленно), то на LSP можно смело забить болт.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592751
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

авторПринцип подразумевает:
- что все что проходит мимо первого assert у родителя, должно проходить и у потомка;
- что подрывается на втором у родителя, должно подрываться и у потомка.

Я это понял. Но почему в одном случае это называется ослабление, а в другом усиление?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592770
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Я это понял. Но почему в одном случае это называется ослабление, а в другом усиление?

Ослабление - это когда все кто проходил проходят и дальше и еще кто-то.
Усиление - это когда все кто подрывался продолжают подрываться и еще кто-то.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592798
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев Усиление - это когда все кто подрывался продолжают подрываться и еще кто-то.

авторсравним постусловия
родитель [0; 10000]

наследник [0;55000]


кто тут стал подрываться?
...
Рейтинг: 0 / 0
LSP принцип.
    #38592833
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Гм. это ослабление. Его не должно быть - ибо тот кто работает с предком может не ожидать получение 10001.
...
Рейтинг: 0 / 0
LSP принцип.
    #38592852
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

пролетевшийПредусловие ослабляем: наследник может принимать отрицательные аргументы. Все операции которые вызывают метод с положительными аргументами ничего не заметили.
Постусловие: наш класс может возвращать результат не больше Integer.MAX_VALUE.
Наследник может сосчитать большие значения. Существуюшие клиенты опять таки ничего не заметят.

то есть это неправда?
...
Рейтинг: 0 / 0
LSP принцип.
    #38593204
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

по ходу я не только себя запутал)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / LSP принцип.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]