История изменений
Исправление tailgunner, (текущая версия) :
Расскажи, какой контракт здесь нарушается.
Вопрос упирается в вопрос «каков контракт QWidget»
Ты так уверенно говорил о нарушении, что я было подумал - ты знаешь этот контракт.
Если мы считаем контрактом документацию, то ничего, кроме сигнатуры и виртуальности, не определено.
Итак, этот контракт не нарушен...
Если мы говорим о поведении программ, то реальное поведение у QWidget есть, программу, которая его использует, составить можно и принцип будет нарушен.
...но ты можешь придумать такой контракт, который невозможно не нарушить. Окей. Ты из этого пришел к ненужности принципа Лисков?
В реальной жизни программы обычно проверяются не формальными доказательствами, а тестами, поэтому с практической точки зрения, если класс QWidget можно воплотить в экземпляр, то принцип Лисков здесь нарушен.
Нет. Если контракт - это тест, а тест успешно выполняется и на QWidget, и на его потомке, то контракт не нарушен.
Исходная версия tailgunner, :
Расскажи, какой контракт здесь нарушается.
Вопрос упирается в вопрос «каков контракт QWidget»
Ты так уверенно говорил о нарушении, что я было подумал - ты знаешь этот контракт.
Если мы считаем контрактом документацию, то ничего, кроме сигнатуры и виртуальности, не определено.
Итак, этот контракт не нарушен...
Если мы говорим о поведении программ, то реальное поведение у QWidget есть, программу, которая его использует, составить можно и принцип будет нарушен.
...но ты можешь придумать такой контракт, который невозможно не нарушить. Окей. Ты из этого пришел к ненужности принципа Лисков?
В реальной жизни программы обычно проверяются не формальными доказательствами, а тестами, поэтому с практической точки зрения, если класс QWidget можно воплотить в экземпляр, то принцип Лисков здесь нарушен.
Нет. Если контракт - это успешное выполнение теста, а тест успешно выполняется на QWidget и его потомке, то контракт не нарушен.