Re: Снова о типизации :)
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 06.10.05 05:41
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Господа, такой вопрос:

ЗХ>1. корректно ли сказать, что динамическая типизация по сравнению со статической — это замена отношения "is-a" отношением "can"?

ЗХ>Т.е., очень обобщенно говоря, два значения вступают между собой в некоторые отношения, скажем:

ЗХ>
ЗХ>a.function(b);
ЗХ>


ЗХ>Для статической типизации — нужно отношение is-a:


ЗХ>Для динамической — нужно отношение can:

ЗХ>
ЗХ>class A
ЗХ>    def function(b)  //чтобы установить отношения a.function(b), не должно выполняться никаких соотношений, но...
ЗХ>        b.foo;       //...вот здесь потребуется соотношение b can foo
ЗХ>


Как мне кажется, тут ты привёл пример не динамической типизации, а отсутствия типизации как таковой... То есть отношение can — это скорее для языков без типизации, нежели для языков с динамической типизацией... Разница между ними очень тонкая. Пример ОО языка с динамической типизацией: Smalltalk. Пример ОО языка без типизации: Self. Отличия: у объектов языка с динамической типизацией тип всё же есть, он определяется в ран-тайме, но он есть. По идее проверку типа можно выполнить уже при передаче объекта, а не при вызове метода и точно знать пройдут все последующие вызовы или нет, то есть имеем всё таки is-a. А вот для языков без типизации характерно именно отсуствие какого либо типа у объектов. На практике это выражается тем, что один и тот же объект может менять свой "интерфейс" динамически — добавлять и удалять методы и поля (слоты в терминалогии Self) во время выполнения. То есть в разные моменты времени для такого объекта вызов foo может как отклониться, так и пройти и проверить это при передаче объекта невозможно. То есть в данном случае как раз отношение can.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.