Re: Динамическая типизация && полиформизм
От: Пельмешко Россия blog
Дата: 04.10.09 11:29
Оценка: 1 (1) +1
Здравствуйте, DemAS, Вы писали:

DAS>Здесь тип переменной v (A или B) определится только на этапе исполнения


Нет, тип определится на момент компиляции — это будет тип Base.
Re: Динамическая типизация && полиформизм
От: nikov США http://www.linkedin.com/in/nikov
Дата: 04.10.09 12:55
Оценка: +2
Здравствуйте, DemAS, Вы писали:

DAS>Но ведь при полиформизме тип переменной тоже может определиться только на

DAS>этапе исполнения кода:
DAS>Где противоречие?

При динамической типизации все вызовы диспетчеризуются в рантайме. При статической с полиморфизмом — только те, которые явно укажет программист.
Динамическая типизация && полиформизм
От: DemAS http://demas.me
Дата: 04.10.09 11:01
Оценка:
"Динами́ческая типиза́ция — приём, широко используемый в языках
программирования и языках спецификации, при котором переменная связывается
с типом в момент присваивания значения, а не в момент объявления
переменной. Таким образом, в различных участках программы одна и та же
переменная может принимать значения разных типов."

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
Re: Динамическая типизация && полиформизм
От: Other Sam Россия  
Дата: 04.10.09 13:55
Оценка:
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>Где противоречие?


Это на каком языке?! Приведи к любому формальному ОО-языку и увидишь, что никаких противоречий нет.
Re: Динамическая типизация && полиформизм
От: Юрий Жмеренецкий ICQ 380412032
Дата: 04.10.09 18:02
Оценка:
Здравствуйте, 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).
Re: Динамическая типизация && полиформизм
От: MasterZiv СССР  
Дата: 05.10.09 06:25
Оценка:
DemAS пишет:

>

> Здесь тип переменной v (A или B) определится только на этапе исполнения
> кода. Но ведь C++ не является динамически типизированным языком.

А почему ты тут видишь противоречие ?
Значит, C++ является динамически типизированным языком, но только для
указателя this. К тому же, это утверждение не совсем корректно:
в динамических языках переменной можно присваивать значение
любого типа, как встроенного, так и определённого пользователем.
В С++ this-у можно присваивать только значение типа, определённого
пользователем (ну и иногда -встроенного в язык), и обязательно
принадлежащего определённой иерархии наследования. Произвольный
тип данных this-у присвоить нельзя.

В общем, лучше не мешать эти два понятия, достаточно кстати зыбких,
вместе. Дин. типизация -- это одно, полиморфизм -- другое.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.