История изменений
Исправление eao197, (текущая версия) :
Я привёл цитату 1987 года, в которой суть принципа Лисковой произнесена.
В том-то и дело, что нет.
В приведенной вами выше цитате:
«What is wanted here is something like the following substitution property: If for each object o_1 of type S there is an object o_2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o_1 is substituted for o_2, then S is a subtype of T.»
говорится, что нам хотелось бы иметь что-то вроде «substitution property», но что это за «property» и как оно может быть выражено (и может ли быть выражено вообще) не говорится. Т.е. это из категории «если бы у нас были такие приборы» ну или «за все хорошее против всего плохого».
Причем цитата не полная, в оригинале она выглядит так:
«What is wanted here is something like the following substitution property [6]: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T. (See also [2, 17] for other work in this area.)»
Т.е. говоря о «substitution property» идет отсылка к работе «Leavens, G. Subtyping and Generic Invocation: Semantics and Language Design. Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, forthcoming»
К сожалению, именно под таким названием эта работа не гуглится. Но зато есть работа того же Гари Ливенса LEAVENS G. 1989. Verifying object-oriented programs that use subtypes. Technical Report 439 (Feb.), MIT Laboratory for Computer Science. Ph.D. thesis., которая, полагаю, и является той самой работой, на которую и ссылалась Лисков (и эта диссертация Ливенса в 1987-ом еще была в режиме подготовки и под другим названием).
И как раз в работе Ливенса прямо в начале можно прочитать следующее:
Object-oriented programming languages, such as Smalltalk-80 [GR83], provide programmers with powerful tools. One of these tools is a generic invocation (or message passing) mechanism, which allows code to manipulate instances of different types. To reason about programs that use generic invocation, programmers often classify types by how instances of that type behave. If each instance of type S behaves like an instance of type T, then S is called a subtype of T. Programmers hope that if their code works correctly when it operates on instances of some type T, then their code will also work correctly on instances of subtypes of T. However, since they lack the formal tools to guide their classification of types and their reasoning, their reasoning lacks certainty.
Как раз вот этот «If each instance of type S behaves like an instance of type T» очень сильно напоминает «all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2».
А с учетом того, что Лисков ссылается на Ливенса еще вопрос, кто первым «substitution property» сформулировал.
Тогда как в работе от 1994-го года уже определены «формализованные» требования и сформулировано два определения для subtyping-а: одно на базе т.к. constraints, второе на базе extension maps. Причем эти определения оказали не полностью эквивалентны друг другу и одно определение допускает наличие подтипов с одними свойствами, а второе – с другими.
Так что ценность работы 1994-го года как раз в том, что там приведены критерии, которые позволяют сделать оценку, действительно ли тип A является подтипом B или нет.
Что любопытно, так это то, что в работе 1994-го года Лисков даже не упоминает свою статью от 1987-го, хотя есть упоминание ее более ранних статей от 1981-го и 1985-го. А вот ссылка на диссертацию (и другие работы Ливенса) как раз есть.
Вы пишете «точной формулировки нет». Что это?
Это то, что точной формулировки нет.
С другой стороны, если предположить, что вы не понимаете, в чём принцип Лисковой заключается, почему он важен, почему ему выделили целую букву в SOLID, то вполне возможно что та цитата ничего вам не говорит.
Предположить вы можете все, что угодно.
Это довольно странная версия, однако учитывая что именно принцип Лисковой и доказал полную несостоятельность ООП
А вот с этого места поподробнее, пожалуйста.
Ибо если в работе 1987-го года «наледование» еще хотя бы как-то упоминается и, натянув сову на глобус можно попробовать найти там критику ООП в пользу иерархии типов (но, при этом, Лисков прямо пишет: «An inheritance mechanism can be used to implement a subtype hierarchy. There would be a class to implement the supertype and another class to implement each subtype. The class implementing a subtype would declare the supertype’s class as its superclass.», т.е. указывает, что ООП-ное наследование может использоваться для выражения иерархии типов), то вот в статье 1994-го года вообще ООП упоминается (если не ошибаюсь) только один раз в разделе «abstract».
Так что очень бы хотелось увидеть демонстрацию «полной несостоятельности ООП» с цитатами и ссылками на первоисточники. А, поскольку вы сами ограничили себя принципом подстановки Лисков, да еще и настаивали на 1987-ом, то вам придется найти эту самую «несостоятельность» в работах Лисков того периода.
Удачи!
Исправление eao197, :
Я привёл цитату 1987 года, в которой суть принципа Лисковой произнесена.
В том-то и дело, что нет.
В приведенной вами выше цитате:
«What is wanted here is something like the following substitution property: If for each object o_1 of type S there is an object o_2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o_1 is substituted for o_2, then S is a subtype of T.»
говорится, что нам хотелось бы иметь что-то вроде «substitution property», но что это за «property» и как оно может быть выражено (и может ли быть выражено вообще) не говорится. Т.е. это из категории «если бы у нас были такие приборы» ну или «за все хорошее против всего плохого».
Причем цитата не полная, в оригинале она выглядит так:
«What is wanted here is something like the following substitution property [6]: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T. (See also [2, 17] for other work in this area.)»
Т.е. говоря о «substitution property» идет отсылка к работе «Leavens, G. Subtyping and Generic Invocation: Semantics and Language Design. Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, forthcoming»
К сожалению, именно под таким названием эта работа не гуглится. Но зато есть работа того же Гари Ливенса LEAVENS G. 1989. Verifying object-oriented programs that use subtypes. Technical Report 439 (Feb.), MIT Laboratory for Computer Science. Ph.D. thesis., которая, полагаю, и является той самой работой, на которую и ссылалась Лисков (и эта диссертация Ливенса в 1987-ом еще была в режиме подготовки и под другим названием).
И как раз в работе Ливенса прямо в начале можно прочитать следующее:
Object-oriented programming languages, such as Smalltalk-80 [GR83], provide programmers with powerful tools. One of these tools is a generic invocation (or message passing) mechanism, which allows code to manipulate instances of different types. To reason about programs that use generic invocation, programmers often classify types by how instances of that type behave. If each instance of type S behaves like an instance of type T, then S is called a subtype of T. Programmers hope that if their code works correctly when it operates on instances of some type T, then their code will also work correctly on instances of subtypes of T. However, since they lack the formal tools to guide their classification of types and their reasoning, their reasoning lacks certainty.
Как раз вот этот «If each instance of type S behaves like an instance of type T» очень сильно напоминает «all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2».
А с учетом того, что Лисков ссылается на Ливенса еще вопрос, кто первым «substitution property» сформулировал.
Тогда как в работе от 1994-го года уже определены «формализованные» требования и сформулировано два определения для subtyping-а: одно на базе т.к. constraints, второе на базе extension maps. Причем эти определения оказали не полностью эквивалентны друг другу и одно определение допускает наличие подтипов с одними свойствами, а второе – с другими.
Так что ценность работы 1994-го года как раз в том, что там приведены критерии, которые позволяют сделать оценку, действительно ли тип A является подтипом B или нет.
Что любопытно, как это то, что в работе 1994-го года Лисков даже не упоминает свою статью от 1987-го, хотя есть упоминание ее более ранних статей от 1981-го и 1985-го. А вот ссылка на диссертацию (и другие работы Ливенса) как раз есть.
Вы пишете «точной формулировки нет». Что это?
Это то, что точной формулировки нет.
С другой стороны, если предположить, что вы не понимаете, в чём принцип Лисковой заключается, почему он важен, почему ему выделили целую букву в SOLID, то вполне возможно что та цитата ничего вам не говорит.
Предположить вы можете все, что угодно.
Это довольно странная версия, однако учитывая что именно принцип Лисковой и доказал полную несостоятельность ООП
А вот с этого места поподробнее, пожалуйста.
Ибо если в работе 1987-го года «наледование» еще хотя бы как-то упоминается и, натянув сову на глобус можно попробовать найти там критику ООП в пользу иерархии типов (но, при этом, Лисков прямо пишет: «An inheritance mechanism can be used to implement a subtype hierarchy. There would be a class to implement the supertype and another class to implement each subtype. The class implementing a subtype would declare the supertype’s class as its superclass.», т.е. указывает, что ООП-ное наследование может использоваться для выражения иерархии типов), то вот в статье 1994-го года вообще ООП упоминается (если не ошибаюсь) только один раз в разделе «abstract».
Так что очень бы хотелось увидеть демонстрацию «полной несостоятельности ООП» с цитатами и ссылками на первоисточники. А, поскольку вы сами ограничили себя принципом подстановки Лисков, да еще и настаивали на 1987-ом, то вам придется найти эту самую «несостоятельность» в работах Лисков того периода.
Удачи!
Исходная версия eao197, :
Я привёл цитату 1987 года, в которой суть принципа Лисковой произнесена.
В том-то и дело, что нет.
В приведенной вами выше цитате:
«What is wanted here is something like the following substitution property: If for each object o_1 of type S there is an object o_2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o_1 is substituted for o_2, then S is a subtype of T.»
говорится, что нам хотелось бы иметь что-то вроде «substitution property», но что это за «property» и как оно может быть выражено (и может ли быть выражено вообще) не говорится. Т.е. это из категории «если бы у нас были такие приборы» ну или «за все хорошее против всего плохого».
Причем цитата не полная, в оригинале она выглядит так:
«What is wanted here is something like the following substitution property [6]: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T. (See also [2, 17] for other work in this area.)»
Т.е. говоря о «substitution property» идет отсылка к работе «Leavens, G. Subtyping and Generic Invocation: Semantics and Language Design. Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, forthcoming»
К сожалению, именно под таким названием эта работа не гуглится. Но зато есть работа того же Гари Ливенса LEAVENS G. 1989. Verifying object-oriented programs that use subtypes. Technical Report 439 (Feb.), MIT Laboratory for Computer Science. Ph.D. thesis., которая, полагаю, и является той самой работой, на которую и ссылалась Лисков (и эта диссертация Ливенса в 1987-ом еще была в режиме подготовки и под другим названием).
И как раз в работе Ливенса прямо в начале можно прочитать следующее:
Object-oriented programming languages, such as Smalltalk-80 [GR83], provide programmers with powerful tools. One of these tools is a generic invocation (or message passing) mechanism, which allows code to manipulate instances of different types. To reason about programs that use generic invocation, programmers often classify types by how instances of that type behave. If each instance of type S behaves like an instance of type T, then S is called a subtype of T. Programmers hope that if their code works correctly when it operates on instances of some type T, then their code will also work correctly on instances of subtypes of T. However, since they lack the formal tools to guide their classification of types and their reasoning, their reasoning lacks certainty.
Как раз вот этот «If each instance of type S behaves like an instance of type T» очень сильно напоминает «all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2».
А с учетом того, что Лисков ссылается на Ливенса еще вопрос, кто первым «substitution property» сформулировал.
Тогда как в работе от 1994-го года уже определены «формализованные» требования и сформулировано два определения для subtyping-а: одно на базе т.к. constraints, второе на базе extension maps. Причем эти определения оказали не полностью эквивалентны друг другу и одно определение допускает наличие подтипов с одними свойствами, а второе – с другими.
Так что ценность работы 1994-го года как раз в том, что там приведены критерии, которые позволяют сделать оценку, действительно ли тип A является подтипом B или нет.
Что любопытно, как это то, что в работе 1994-го года Лисков даже не упоминает свою статью от 1987-го, хотя есть упоминание ее более ранних статей от 1981-го и 1985-го. А вот ссылка на диссертацию (и другие работы Ливенса) как раз есть.
Вы пишете «точной формулировки нет». Что это?
Это то, что точной формулировки нет.
С другой стороны, если предположить, что вы не понимаете, в чём принцип Лисковой заключается, почему он важен, почему ему выделили целую букву в SOLID, то вполне возможно что та цитата ничего вам не говорит.
Предположить вы можете все, что угодно.
Это довольно странная версия, однако учитывая что именно принцип Лисковой и доказал полную несостоятельность ООП
А вот с этого места поподробнее, пожалуйста.
Ибо если в работе 1987-го года «наледование» еще хотя бы как-то упоминается и, натянув сову на глобус можно попробовать найти там критику ООП в пользу иерархии типов (но, при этом, Лисков прямо пишет: «An inheritance mechanism can be used to implement a subtype hierarchy. There would be a class to implement the supertype and another class to implement each subtype. The class implementing a subtype would declare the supertype’s class as its superclass.», т.е. указывает, что ООП-ное наследование может использоваться для выражения иерархии типов), то вот в статье 1994-го года вообще ООП упоминается (если не ошибаюсь) только один раз в разделе «abstract».
Так что очень бы хотелось увидеть демонстрацию «полной несостоятельности ООП» с цитатами и ссылками на первоисточники. А, поскольку вы сами ограничили себя принципом подстановки Лисков, да еще и настаивали на 1987-ом, то вам придется найти эту самую «несостоятельность» в работах Лисков того периода.
Удачи!