"Динами́ческая типиза́ция — приём, широко используемый в языках
программирования и языках спецификации, при котором переменная связывается
с типом в момент присваивания значения, а не в момент объявления
переменной. Таким образом, в различных участках программы одна и та же
переменная может принимать значения разных типов."
http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
Но ведь при полиформизме тип переменной тоже может определиться только на
этапе исполнения кода:
class Base
static Base construct(enum param) {
switch(param)
{
case ...:
return new A();
case ...:
retrun new B();
}
}
class A extends Base
doSomething();
class B extends Base
doSomething();
main {
Base v = Base::construct(userInput());
v.doSomething();
}
Здесь тип переменной v (A или B) определится только на этапе исполнения
кода. Но ведь C++ не является динамически типизированным языком.
Где противоречие?
Posted via RSDN NNTP Server 2.1 beta
DAS> blah blah blah...
DAS>
DAS>class Base
DAS> static Base construct(enum param) {
DAS> switch(param)
DAS> {
DAS> case ...:
DAS> return new A();
DAS> case ...:
DAS> retrun new B();
DAS> }
DAS> }
DAS>class A extends Base
DAS> doSomething();
DAS>class B extends Base
DAS> doSomething();
DAS>main {
DAS> Base v = Base::construct(userInput());
DAS> v.doSomething();
DAS>}
DAS>
DAS>Здесь тип переменной v (A или B) определится только на этапе исполнения
DAS>кода. Но ведь C++ не является динамически типизированным языком.
DAS>Где противоречие?
Это на каком языке?! Приведи к любому формальному ОО-языку и увидишь, что никаких противоречий нет.
Здравствуйте, DemAS, Вы писали:
DAS>
DAS>class Base
DAS> static Base construct(enum param) {
DAS> switch(param)
DAS> {
DAS> case ...:
DAS> return new A();
DAS> case ...:
DAS> retrun new B();
DAS> }
DAS> }
DAS>class A extends Base
DAS> doSomething();
DAS>class B extends Base
DAS> doSomething();
DAS>main {
DAS> Base v = Base::construct(userInput());
DAS> v.doSomething();
DAS>}
DAS>
DAS>Здесь тип переменной v (A или B) определится только на этапе исполнения
DAS>кода. Но ведь C++ не является динамически типизированным языком.
DAS>Где противоречие?
Нет здесь противоречия (если не принимать во внимание, что код не на С++) — есть static type (Base), а есть dynamic type (A или B).
DemAS пишет:
>
> Здесь тип переменной v (A или B) определится только на этапе исполнения
> кода. Но ведь C++ не является динамически типизированным языком.
А почему ты тут видишь противоречие ?
Значит, C++ является динамически типизированным языком, но только для
указателя this. К тому же, это утверждение не совсем корректно:
в динамических языках переменной можно присваивать значение
любого типа, как встроенного, так и определённого пользователем.
В С++ this-у можно присваивать только значение типа, определённого
пользователем (ну и иногда -встроенного в язык), и обязательно
принадлежащего определённой иерархии наследования. Произвольный
тип данных this-у присвоить нельзя.
В общем, лучше не мешать эти два понятия, достаточно кстати зыбких,
вместе. Дин. типизация -- это одно, полиморфизм -- другое.
Posted via RSDN NNTP Server 2.1 beta