Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, Oyster, Вы писали:
O>>Да я думал написать "технология" — как-то громко звучит как для ASP...
S>Да и вообще у .net в этом отношении громкость сильно завышена...
M>Ключевое слово — "обычно", то есть — не обязательно
M>>
M>>Hence Kay's objection: I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. Since that writeup has been nuked, I shall explain. Alan C. Kay was the brains behind smalltalk, an pioneering strongly Object-Oriented language. /p>
M>>...так что речь шла всё-таки в контексте конкретного языка, т.е. он хотел сказать, что когда вводил новый термин, он имел ввиду не только, а тогда даже не столько С++, а скорее smalltalk. Наверное, так эту фразу и следует понимать.
M>С++ все равно не является чистым ОО языком. А ЯваСкрипт — вполне себе язык с поддержкой ООП
JavaScript OB, а не OO, по-крайней мере, во всех книгах по нему это явно утверждается. Да и по синтаксису работы с объектами в нем это вполне видно.
Здравствуйте, anton_t, Вы писали:
O>>>Да я думал написать "технология" — как-то громко звучит как для ASP... S>>Да и вообще у .net в этом отношении громкость сильно завышена... _>А что, уши закладывает?
Да неговори. Ведь к тем кто раньше в студии работал теперь добавились дельфисты/билдеристы... Причем в основном из общества "дайте компоненту"...
[RSDN@Home][1.2.0][alpha][648]
[Здоровье без силы — то же, что твердость без упругости. [К. Прутков]]
M>>С++ все равно не является чистым ОО языком. А ЯваСкрипт — вполне себе язык с поддержкой ООП
AS>JavaScript OB, а не OO, по-крайней мере, во всех книгах по нему это явно утверждается. Да и по синтаксису работы с объектами в нем это вполне видно.
Ну, мне все равно хватает
А по некоторым примерам работы вообще выглядит, как вполне человеческий ОО
AS>>Ок. Тогда изобразите там наследование Я не особый спец в JavaScript, но такого там не припомню.
Q>здесь
Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО. В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет. Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел.
Здравствуйте, Andrew S, Вы писали:
Q>>здесь AS>Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО.
Особенно мне нравится слово "подразумевается". Ребята, ООП != "class A: publiс B". AS>В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет.
Определение "нормального" наследования в студию. Подсказка: ввести более-менее удовлетворительно формальное определение наследования в Theory of Classification удается ввести только к 8 части (см. http://www.jot.fm/issues/issue_2003_07/column4)
AS>Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел.
Решение очевидное, и оно было заложено в JavaScript в самом начале. Никакой эмуляции здесь нет, это и есть настоящее наследование, только наследование экземпляров, а не классов. Просто С++ и другие мейнстрим языки настолько прочно промыли мозг разработчикам, что им трудно воспринять концепции, хоть в чем-то отличные от привычных vtbl и downcast.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Q>>>здесь AS>>Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО. S>Особенно мне нравится слово "подразумевается". Ребята, ООП != "class A: publiс B".
Где я это говорил, а?
AS>>В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет. S>Определение "нормального" наследования в студию. Подсказка: ввести более-менее удовлетворительно формальное определение наследования в Theory of Classification удается ввести только к 8 части (см. http://www.jot.fm/issues/issue_2003_07/column4)
Смешно, право. Открытое наследование (в данном случае) выражает отношение "ЯВЛЯЕТСЯ" и должно следовать принципу LSP. Прочтите этот принцип и убедитесь, что там говориться про _типы_.
AS>>Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел. S>Решение очевидное, и оно было заложено в JavaScript в самом начале. Никакой эмуляции здесь нет, это и есть настоящее наследование, только наследование экземпляров, а не классов.
Правильно, наследование не на уровне типов, а на уровне объектов. Поведение OB языка, а не OO, верно?
Здравствуйте, Andrew S, Вы писали:
AS>>>Ок. Тогда изобразите там наследование Я не особый спец в JavaScript, но такого там не припомню.
Q>>здесь AS>Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО. В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет. Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел.
И что? Прототипы — один из вариантов организации ООП. Не стандартный, но вполне возможный.
Andrew S wrote: > Смешно, право. Открытое наследование (в данном случае) выражает > отношение "ЯВЛЯЕТСЯ" и должно следовать принципу LSP. Прочтите этот > принцип и убедитесь, что там говориться про _типы_.
Let q(x) be a property provable about objects x of type T. Then q(y)
should be true for objects y of type S where S is a subtype of T.
Для JavaScript понятие "тип" вводим как "множество объектов, имеющих
одинаковый набор сигнатур методов". Тогда наследование в JS вполне
удовлетворяет LSP.
> Правильно, наследование не на уровне типов, а на уровне объектов. > Поведение OB языка, а не OO, верно?
Определите понятие "Object-Based" языка. Классическое опредление ООП —
"объекты, обменивающиеся сообщениями" (см. Smalltalk).
C>Andrew S wrote: >> Смешно, право. Открытое наследование (в данном случае) выражает >> отношение "ЯВЛЯЕТСЯ" и должно следовать принципу LSP. Прочтите этот >> принцип и убедитесь, что там говориться про _типы_. C>
Let q(x) be a property provable about objects x of type T. Then q(y)
C>should be true for objects y of type S where S is a subtype of T.
C>Для JavaScript понятие "тип" вводим как "множество объектов, имеющих C>одинаковый набор сигнатур методов". Тогда наследование в JS вполне C>удовлетворяет LSP.
Вы путаете понятия типа объекта и понятия экземпляра объекта. Если вы какашку назовете конфеткой, пахнуть под другому, извините, оно не будет...
Наследование подразумевает создание экземпляра типа, который одновременно является и _новым_ экземпляром родительского типа. Для JavaScript _автоматически_ это не выполняется, почему, надеюсь, пояснять не надо? Просто посмотрите указанную ранее статью. А вообще — ОО можно эмулировать хоть на С (при помощи функций-указателей), были и такие варианты — только недавно смотрел библиотеку, где так сделано
>> Правильно, наследование не на уровне типов, а на уровне объектов. >> Поведение OB языка, а не OO, верно? C>Определите понятие "Object-Based" языка. Классическое опредление ООП — C>"объекты, обменивающиеся сообщениями" (см. Smalltalk). Сильное определение, и главное, какое формальное. Вы, похоже, не читаете, что вам отвечают. http://gzip.rsdn.ru/Forum/Message.aspx?mid=1861569&only=1
Кстати, как там в JavaScript с полиморфизмом (я на самом деле просто не знаю)? Только не предлагайте очередную "эмуляцию", как в случае наследования
BTW — я не говорю, что OB это плохо, а OO это хорошо, или что лучше или хуже. Меня, например, JavaScript для целей автоматизации вполне устраивает. Хотя, конечно, если был бы альтернативный скриптовый движок от m$ с синтаксисом С++, я бы предпочел его — просто привычнее, что ли.
AS>>>>Ок. Тогда изобразите там наследование Я не особый спец в JavaScript, но такого там не припомню.
Q>>>здесь AS>>Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО. В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет. Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел. К>И что? Прототипы — один из вариантов организации ООП. Не стандартный, но вполне возможный.
Прототипы реализуют только сабсет ооп. В указанной вами ссылке это сказано явно
Andrew S wrote: > Вы путаете понятия типа объекта и понятия экземпляра объекта.
Нет, это вы путаете понятие "тип", которое применимо к LSP и понятие
"тип" в языке C++/C/Java.
> какашку назовете конфеткой, пахнуть под другому, извините, оно не будет... > Наследование подразумевает создание экземпляра типа, который > одновременно является и _новым_ экземпляром родительского типа.
И? Я могу создать новый объект JS по прототипу и добавить туда новые
функции или перегрузить старые.
> Для JavaScript _автоматически_ это не выполняется, почему, надеюсь, пояснять > не надо?
Надо.
> Просто посмотрите указанную ранее статью. А вообще — ОО можно > эмулировать хоть на С (при помощи функций-указателей), были и такие > варианты — только недавно смотрел библиотеку, где так сделано
Я сам такие библиотеки писал.
> C>Определите понятие "Object-Based" языка. Классическое опредление ООП — > C>"объекты, обменивающиеся сообщениями" (см. Smalltalk). > Сильное определение, и главное, какое формальное. Вы, похоже, не > читаете, что вам отвечают.
Что делать — других определений я не встречал.
Prototype-based programming is a style and subset of
object-oriented programming in which classes are not present, and
behaviour reuse (known as inheritance in class-based languages) is
accomplished through a process of cloning existing objects which serve
as prototypes.
И чем это должно меня убедить?
> Кстати, как там в JavaScript с полиморфизмом (я на самом деле просто не > знаю)? Только не предлагайте очередную "эмуляцию", как в случае > наследования
Обычный name-based полиморфизм. Как в Smalltalk/Python/Ruby и других
динамических языках.
Prototype-based programming is a style and subset of
C>object-oriented programming in which classes are not present, and
C>behaviour reuse (known as inheritance in class-based languages) is
C>accomplished through a process of cloning existing objects which serve
C>as prototypes.
C>И чем это должно меня убедить?
Тем, что _подмножество_ ООП. Т.е. все же не ООП.
>> Кстати, как там в JavaScript с полиморфизмом (я на самом деле просто не >> знаю)? Только не предлагайте очередную "эмуляцию", как в случае >> наследования C>Обычный name-based полиморфизм. Как в Smalltalk/Python/Ruby и других C>динамических языках.
Вообще, да, тут же нет типов, поэтому полиморфизм весьма условен. В общем, я думаю, все друг-друга поняли, а дальнейшая полемика бесперспективна. Но, право, непонятно, зачем упираться и утверждать, что JavaScript полноценный ОО язык, когда _везде_ пишут, что это не так
Andrew S wrote: > Prototype-based programming is *a style and subset* of > C>object-oriented programming in which classes are not present, and > C>behaviour reuse (known as inheritance in class-based languages) is > C>accomplished through a process of cloning existing objects which serve > C>as prototypes. > C>И чем это должно меня убедить? > Тем, что _подмножество_ ООП. Т.е. все же не ООП.
Естественно. Class-based — это тоже стиль и подмножество ООП.
> C>Обычный name-based полиморфизм. Как в Smalltalk/Python/Ruby и других > C>динамических языках. > Вообще, да, тут же нет типов, поэтому полиморфизм весьма условен. В > общем, я думаю, все друг-друга поняли, а дальнейшая полемика > бесперспективна. Но, право, непонятно, зачем упираться и утверждать, что > JavaScript полноценный ОО язык, когда _везде_ пишут, что это не так http://www.javascriptkit.com/javatutors/oopjs.shtml :
JavaScript is an excellent language to write object oriented web
applications. It can support OOP because it supports inheritance
through prototyping as well as properties and methods. Many
developers cast off JS as a suitable OOP language because they are so
used to the class style of C# and Java. Many people don't realize that
JavaScript supports inheritance. When you write object-oriented code it
instantly gives you power; you can write code that can be re-used and
that is encapsulated.
Здравствуйте, Andrew S, Вы писали:
AS>Тем, что _подмножество_ ООП. Т.е. все же не ООП.
Ты можеш думать, как тебе угодно, но ты сам себя ограничиваеш. Когда говорят "машина", то термин не определяют через "наличие корпуса, четырёх колёс и бибикалки". Потому что может оказаться, что штука отвечающая определению не ездит. И наоборот, что, "шесть колёс" и уже не машина? Так и тут. "3 кита" это всего лиш вторичные половые признаки, которые вытащили, когда пытались формализовать, что же такого даёт "объект сам отвечающий на сообщения".
>>> Кстати, как там в JavaScript с полиморфизмом (я на самом деле просто не >>> знаю)? Только не предлагайте очередную "эмуляцию", как в случае >>> наследования C>>Обычный name-based полиморфизм. Как в Smalltalk/Python/Ruby и других C>>динамических языках.
Лучше написать "динамически типизируемых языках". Чтобы типы были.
AS>Вообще, да, тут же нет типов, поэтому полиморфизм весьма условен.
"Нет типов" это "нет классов"?
И, кстати, вот ты упоминал LSP в контексте определения "ООП". Внимание вопрос, является ли С++ ООЯ, если там нельзя форсировать выполнение LSP?
AS>В общем, я думаю, все друг-друга поняли, а дальнейшая полемика бесперспективна.
Это действительно так. Вопрос "с ООП" обсосан в "философии программирования" до невозможности. К чему повторятся?
AS>Но, право, непонятно, зачем упираться и утверждать, что JavaScript полноценный ОО язык, когда _везде_ пишут, что это не так
"_Везде_" это на wikipedia? Обращатся нужно к ресурсам созданным программистами. Например "c2" wiki. Смотрим определение ОО. Бац! Больше одного варианта. Пройдись по ссылкам. Там ты сможеш найти кучу цитат и в поддержку своей точки зрения в том числе. По этому, говорить "везде пишут" это столь же сильное, сколь и не верное утверждение.
ANS>Лучше написать "динамически типизируемых языках". Чтобы типы были.
AS>>Вообще, да, тут же нет типов, поэтому полиморфизм весьма условен.
ANS>"Нет типов" это "нет классов"?
Подразумевается статических типов, вы это прекрасно поняли
ANS>И, кстати, вот ты упоминал LSP в контексте определения "ООП". Внимание вопрос, является ли С++ ООЯ, если там нельзя форсировать выполнение LSP?
LSP определяет термин наследование. ООП включает в себя наследование (по крайней мере, большинство определений, что я видел).
AS>>Но, право, непонятно, зачем упираться и утверждать, что JavaScript полноценный ОО язык, когда _везде_ пишут, что это не так
ANS>"_Везде_" это на wikipedia? Обращатся нужно к ресурсам созданным программистами. Например "c2" wiki. Смотрим определение ОО. Бац! Больше одного варианта. Пройдись по ссылкам. Там ты сможеш найти кучу цитат и в поддержку своей точки зрения в том числе. По этому, говорить "везде пишут" это столь же сильное, сколь и не верное утверждение.
Отнюдь не в вики. Это только в последнем сообщении.
А ссылка хорошая в плане собирательности, ничего кардинально нового там для себя я не нашел
В общем, конструктива я пока больше не вижу
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Ты можеш думать, как тебе угодно, но ты сам себя ограничиваеш. Когда говорят "машина", то термин не определяют через "наличие корпуса, четырёх колёс и бибикалки". Потому что может оказаться, что штука отвечающая определению не ездит. И наоборот, что, "шесть колёс" и уже не машина? Так и тут. "3 кита" это всего лиш вторичные половые признаки, которые вытащили, когда пытались формализовать, что же такого даёт "объект сам отвечающий на сообщения".
У меня вобще со словом "машина" сразу ассоциация с компом.
[RSDN@Home][1.2.0][alpha][648]
[Кто не думает о конце, ошибется в начале. [Хуан Мануэль]]