Аноним wrote: > Не зря я написал, что возможно я чего сь забыл > Я предпологал, что если язы — ООП-ориентированный, то он должен > поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование.
Ничего он не должен.
Определение ООП: "система из объектов, обменивающихся сообщениями".
JavaScript — это вполне себе объектный динамический язык с объектами на
основе прототипов.
> И как чистый JavaScript (<script language = 'javascript'>) может > работать на серевре? Это разве не клиенский язык, а для работы с > сервером предназначены языи а-ля PHP и ASP.NET?
Во-первых, ASP.NET — это не язык, а название технологии (в которой можно
использовать и JScript.NET, в частности).
Во-вторых, кто мешает запустить интерпретатор JS на сервере?
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.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Ты можеш думать, как тебе угодно, но ты сам себя ограничиваеш. Когда говорят "машина", то термин не определяют через "наличие корпуса, четырёх колёс и бибикалки". Потому что может оказаться, что штука отвечающая определению не ездит. И наоборот, что, "шесть колёс" и уже не машина? Так и тут. "3 кита" это всего лиш вторичные половые признаки, которые вытащили, когда пытались формализовать, что же такого даёт "объект сам отвечающий на сообщения".
У меня вобще со словом "машина" сразу ассоциация с компом.
[RSDN@Home][1.2.0][alpha][648]
[Кто не думает о конце, ошибется в начале. [Хуан Мануэль]]
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, maxluzin, Вы писали:
M>>Здравствуйте, Курилка, Вы писали:
К>>>При том, что Алан Кей по этому поводу сказал:
К>>>
К>>>I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.
К>>>
M>>Очень может быть... Но любой введёный термин со временем уточняется, дополняется и конкретизируется, не так ли? В данном контексте он имел ввиду что-то теоретически-абстрактное на уровне идеи или всё-таки какой-то язык программирования?
M>>Можно ли ссылочку на предмет разговора, на то, что заставило его так категорично выразиться (такое ощущение из-под контекста, что он как бы "отбивается" от кого-то). Мне действительно это интересно, т.к. когда-то занимался преподаванием С/С++ и ООП (и может быть еще и вернусь к этому).
К>Гугл тебе в руки
An object-oriented programming language generally has three distinguishing features that other languages lack:
encapsulation: code and data together in one object type. Part of that object is public, part is not. Code that uses that object can only know about the public part. The private part can change without the client code knowing or caring.
Inheritance: The ability to extend the type system by defining new object types that subclass existing ones in an is-a relationship, and thus defining common interfaces and sharing code in a base class.
polymorphism: The ability to perform the same operation on different types of objects, each one implementing that operation in a way appropriate to them.
Languages that lack all of these three features are not generally considered to be Object-Oriented. For instance, the first three or four versions of Microsoft's Visual basic allowed you to manipulate the system-supplied objects in a Polymorphic manner using the Object.procedure notation, but not to inherit from these objects. Such systems are said to be Object based.
...и это:
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>
...так что речь шла всё-таки в контексте конкретного языка, т.е. он хотел сказать, что когда вводил новый термин, он имел ввиду не только, а тогда даже не столько С++, а скорее smalltalk. Наверное, так эту фразу и следует понимать.
M>An object-oriented programming language generally has three distinguishing features that other languages lack:
M>...и это:
Ключевое слово — "обычно", то есть — не обязательно
M>[q]
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>Ключевое слово — "обычно", то есть — не обязательно
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]
[Здоровье без силы — то же, что твердость без упругости. [К. Прутков]]
Здравствуйте, 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
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
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$ с синтаксисом С++, я бы предпочел его — просто привычнее, что ли.
Здравствуйте, 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. Смотрим определение ОО. Бац! Больше одного варианта. Пройдись по ссылкам. Там ты сможеш найти кучу цитат и в поддержку своей точки зрения в том числе. По этому, говорить "везде пишут" это столь же сильное, сколь и не верное утверждение.
Отнюдь не в вики. Это только в последнем сообщении.
А ссылка хорошая в плане собирательности, ничего кардинально нового там для себя я не нашел
В общем, конструктива я пока больше не вижу
Здравствуйте, RI, Вы писали:
RI>Здравствуйте, Аноним, Вы писали:
А>>Вот он какой, оказывается... Или может это я что-то путаю ?
А>>
А>>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
А>>здесь
RI>Объектный, но не объектно-ориентированный. RI>Т.е., свои классы создавать нельзя, но существующие юзать можно.
А соседние ветки читать не удосужимся? К примеру здесь
Вот он какой, оказывается... Или может это я что-то путаю ?
JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
Здравствуйте, Аноним, Вы писали:
А>Вот он какой, оказывается... Или может это я что-то путаю ?
А>
А>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
А>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
А>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
Ну объекты в нём есть, и даже функциональность можно расширять через прототипы. Да и на сервере он вполне может работать (JScript в ASP, JScript.NET в ASP.NET, если мы о вебе) — почему нет?
Так что шутку юмора не понял
Re[2]: JavaScript
От:
Аноним
Дата:
21.04.06 11:17
Оценка:
Здравствуйте, Oyster, Вы писали:
O>Здравствуйте, <Аноним>, Вы писали:
O>
А>>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.
O>Ну объекты в нём есть, и даже функциональность можно расширять через прототипы. Да и на сервере он вполне может работать (JScript в ASP, JScript.NET в ASP.NET, если мы о вебе) — почему нет?
Не зря я написал, что возможно я чего сь забыл
Я предпологал, что если язы — ООП-ориентированный, то он должен поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование.
И как чистый JavaScript (<script language = 'javascript'>) может работать на серевре? Это разве не клиенский язык, а для работы с сервером предназначены языи а-ля PHP и ASP.NET?
O>Так что шутку юмора не понял
Здравствуйте, <Аноним>, Вы писали:
А>Не зря я написал, что возможно я чего сь забыл А>Я предпологал, что если язы — ООП-ориентированный, то он должен поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование. А>И как чистый JavaScript (<script language = 'javascript'>) может работать на серевре? Это разве не клиенский язык, а для работы с сервером предназначены языи а-ля PHP и ASP.NET?
Здравствуйте, <Аноним>, Вы писали:
А>Я предпологал, что если язы — ООП-ориентированный, то он должен поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование.
Ну... не обязательно. Например, CLOS (Common Lisp Object System) не содержит механизмов сокрытия информации (слотов), да и методы в CLOS как-бы отдельно (CLOS поддерживает мультиметоды, так что и обычные не привязаны к какому-то конкретному классу). Тем не менее, CLOS стал первой стандартизированной системой ООП вообще.
А>И как чистый JavaScript (<script language = 'javascript'>) может работать на серевре? Это разве не клиенский язык, а для работы с сервером предназначены языи а-ля PHP и ASP.NET?
ASP и ASP.NET — это не языки, это библиотеки. В ASP ты можешь писать на VBScript или JScript или вообще на Пёрле , например.
Re[4]: JavaScript
От:
Аноним
Дата:
21.04.06 11:32
Оценка:
Здравствуйте, Oyster, Вы писали:
Ну тада извиняюсь перед всем честным народом...
Во как. Куда не запости, всегда что-то новое узнаешь
Здравствуйте, Oyster, Вы писали:
O>ASP и ASP.NET — это не языки, это библиотеки. В ASP ты можешь писать на VBScript или JScript или вообще на Пёрле , например.
Или на языке от 1С вообще (какой-то там v7script чтоли был в 7-м 1С помнится).
Только вот библиотеки — тоже неверный термин. Скорее технология.
Аноним wrote:
> Не зря я написал, что возможно я чего сь забыл > Я предпологал, что если язы — ООП-ориентированный, то он должен > поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование. > И как чистый JavaScript (<script language = 'javascript'>) может > работать на серевре? Это разве не клиенский язык, а для работы с
Для asp можно писать:
<script language = 'javascript' run-at='server'>
по-моему так.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Cyberax, Вы писали:
C>Аноним wrote: >> Не зря я написал, что возможно я чего сь забыл >> Я предпологал, что если язы — ООП-ориентированный, то он должен >> поддерживать хотя бы 3 его закона — инкапсуляция, полиморфизм, наследование. C>Ничего он не должен.
C>Определение ООП: "система из объектов, обменивающихся сообщениями".
Ссылочку, пожалуйста, на авторство определения...
Во книгах по С++ (и у Страуструпа) декларируется именно это:
1. инкапсуляция,
2. полиморфизм,
3. наследование
(еще иногда отдельно выделяется "поддержка абстрактных типов данных")
Если хотя бы один пункт не реализован, то это какой-угодно язык, только не ООП. Началось это, кажется, даже не с С++ а со Смолтока.
Здравствуйте, maxluzin, Вы писали:
M>Во книгах по С++ (и у Страуструпа) декларируется именно это:
M>1. инкапсуляция, M>2. полиморфизм, M>3. наследование
M>(еще иногда отдельно выделяется "поддержка абстрактных типов данных")
M>Если хотя бы один пункт не реализован, то это какой-угодно язык, только не ООП. Началось это, кажется, даже не с С++ а со Смолтока.
При том, что Алан Кей по этому поводу сказал:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.
Здравствуйте, maxluzin, Вы писали:
C>>Определение ООП: "система из объектов, обменивающихся сообщениями".
M>Ссылочку, пожалуйста, на авторство определения...
M>Во книгах по С++ (и у Страуструпа) декларируется именно это:
Цитатку бы из Страуструпа...
M>1. инкапсуляция, M>2. полиморфизм, M>3. наследование
Это разве что в книгах Герберта Шилдта так декларируется.
Здравствуйте, Курилка, Вы писали:
К>При том, что Алан Кей по этому поводу сказал:
К>
К>I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.
К>
Очень может быть... Но любой введёный термин со временем уточняется, дополняется и конкретизируется, не так ли? В данном контексте он имел ввиду что-то теоретически-абстрактное на уровне идеи или всё-таки какой-то язык программирования?
Можно ли ссылочку на предмет разговора, на то, что заставило его так категорично выразиться (такое ощущение из-под контекста, что он как бы "отбивается" от кого-то). Мне действительно это интересно, т.к. когда-то занимался преподаванием С/С++ и ООП (и может быть еще и вернусь к этому).
Здравствуйте, Alxndr, Вы писали:
A>Цитатку бы из Страуструпа...
С удовольствием бы сейчас и сам поискал, но книга дома лежит... Кажется эта фраза была в "Object-Oriented Design & Modelling".
M>>1. инкапсуляция, M>>2. полиморфизм, M>>3. наследование
A>Это разве что в книгах Герберта Шилдта так декларируется.
Ну почему же? Не только у него, я и у других авторов видел... Хотя, они, конечно, могли просто ссылаться на "признаных гуру"...
Здравствуйте, maxluzin, Вы писали:
M>Здравствуйте, Курилка, Вы писали:
К>>При том, что Алан Кей по этому поводу сказал:
К>>
К>>I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.
К>>
M>Очень может быть... Но любой введёный термин со временем уточняется, дополняется и конкретизируется, не так ли? В данном контексте он имел ввиду что-то теоретически-абстрактное на уровне идеи или всё-таки какой-то язык программирования?
M>Можно ли ссылочку на предмет разговора, на то, что заставило его так категорично выразиться (такое ощущение из-под контекста, что он как бы "отбивается" от кого-то). Мне действительно это интересно, т.к. когда-то занимался преподаванием С/С++ и ООП (и может быть еще и вернусь к этому).
Здравствуйте, Sheridan, Вы писали:
S>Здравствуйте, Oyster, Вы писали:
O>>Да я думал написать "технология" — как-то громко звучит как для ASP...
S>Да и вообще у .net в этом отношении громкость сильно завышена...
M>>С++ все равно не является чистым ОО языком. А ЯваСкрипт — вполне себе язык с поддержкой ООП
AS>JavaScript OB, а не OO, по-крайней мере, во всех книгах по нему это явно утверждается. Да и по синтаксису работы с объектами в нем это вполне видно.
Ну, мне все равно хватает
А по некоторым примерам работы вообще выглядит, как вполне человеческий ОО
AS>>Ок. Тогда изобразите там наследование Я не особый спец в JavaScript, но такого там не припомню.
Q>здесь
Интересная статья, спасибо. Но.. Прототипы это все же не наследование. Ну или не в том плане, в котором это подразумевается в ОО. В статье прямо говориться, что "нормального" наследование в терминах ООП в JavaScript нативно нет. Приведенный код реализует эмуляцию наследования посредством прототипов... Но решение интересное, я такого не видел.
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).
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 полноценный ОО язык, когда _везде_ пишут, что это не так
Здравствуйте, Аноним, Вы писали:
А>Вот он какой, оказывается... Или может это я что-то путаю ?
А>
А>JavaScript — это объектно-ориентированный язык программирования, предназначенный для написания сценариев,работающих как на стороне клиента, так и на стороне сервера.