История изменений
Исправление den73, (текущая версия) :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое перекрытый-виртуальный да
возврат 1
кнм
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть q -- да-нет = (: Экземпляр.М() == 0 :)
печать q
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния
2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20.
3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не значит, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что принцип Лисков не соответствует практике применения ООП.
Исправление den73, :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое виртуальный да
возврат 1
кнм
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть q -- да-нет = (: Экземпляр.М() == 0 :)
печать q
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния
2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20.
3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не значит, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что принцип Лисков не соответствует практике применения ООП.
Исправление den73, :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое виртуальный да
возврат 1
кнм
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть q -- да-нет = (: Экземпляр.М() == 0 :)
печать q
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния
2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20.
3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не знает, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что принцип Лисков не соответствует практике применения ООП.
Исправление den73, :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое виртуальный да
возврат 1
кнм
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть q -- да-нет = (: Экземпляр.М() == 0 :)
печать q
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния 2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20. 3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не знает, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что принцип Лисков не соответствует практике применения ООП.
Исправление den73, :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое виртуальный да
возврат 1
кнм
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть q -- да-нет = (: Экземпляр.М() == 0 :)
печать q
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния 2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20. 3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не знает, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что это не соответствует практике применения ООП.
Исходная версия den73, :
Вот именно «подстановка тела» и делает определение q(x) бесполезным.
На самом деле первоисточник вот Я неоднозначно написал, исправляюсь. В Яре нет ООП, но я напишу, как будто оно есть:
о.класс Родитель ()
метод М() -- целое виртуальный да
кнк
о.класс Ребёнок (Родитель)
метод М() -- целое перекрытый-виртуальный да
кнк
о.метод Родитель.М() -- целое виртуальный да
возврат 0
кнм
о.метод Ребёнок.М() -- целое виртуальный да
возврат 1
кнм
о.функ q(икс) // наше свойство
возврат икс.М()
кнф
выполнить-при-загрузке
пусть Экземпляр = н.Родитель; // или н.Ребёнок
пусть Выполняется-ли -- да-нет = (: q(Экземпляр) == 0 :)
печать Выполняется-ли
кнв
First, properties of an object's behavior in a particular program must be preserved: to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
Теорию про инварианты и констрейнты я не читал, но в статье рассмотрено три примера «правильного» создания подтипа:
1. Добавление методов без добавления состояния 2. Сужение типа, т.е. вместо стека рассматривается стек глубиной 20. 3. Виртуальный базовый класс, у которого нет собственного поведения.
Т.е., типичная ситуация, когда Widget превращается в WidgetWithFrame путём наследования, скорее всего, не соответствует принципу Лисков.
Я теперь уже не так уверен, потому что понял, что в Википедии принцип сформулирован вне соответствия с первоисточником. В первоисточнике понятие о q сужено. Но это не знает, что ты (автор класса) можешь выбирать q. Множество возможных q автоматически следует из выбранного языка программирования и определения базового класса.
И так скажем, на 95% я уверен, что это не соответствует практике применения ООП.