Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > В чем прикол динамической типизации?


Автор: nerezus 14.1.2007, 16:04
Пишу в основном на пхп и питоне. Динамическая типизация.

Но в чем плюсы этой динамической типизации?

Вижу только минусы:
- Нет нормальной проверки кода на лету в IDE(перебрал все лучшие IDE).
- Нет, к примеру, автодополнения в IDE, кроме примитивных случаев типа $a = new SomeClass(); $a->...

А плюсы?

Автор: VaiMR 16.1.2007, 03:45
Если я правильно понимаю термин "динамическая типизация", то плюсы есть.

Например ты описываешь класс, который работает с обьектом (например по экрану его перемещает), но сам обект не известен и класс при этом самодостаточен (инкапсуляция). А затем от него уже порождаются новые классы (точка, квадрат, куб и т. д.), но уже не надо писать код для их перемещения (вращения или еще чего), они уже наследовали эти свойства от предка(наследование), при этом могут приобретать новые свойства (полиморфизм).

На этом построено все современное программирование (Обьектно-Ориентированное Программирование). 

                       вот в си++: 

                          ios                 <- предок
                istream ostream      <- потомки 1 предка
                       iostream           <- потомок потомков 1
                           ... 

Аналогичный пример: список, который работает с любыми данными (стандартными или определенными пользователем(в см. программистом)). Он умеет все что должен уметь класс - список, но самостоятельно работать не может, а в его потомках определяется тип данных и с ними уже можно работать.

Автор: nerezus 16.1.2007, 07:49
VaiMR, эм... это называется наследование и абстрактные классы.

Автор: Sardar 16.1.2007, 16:53
Возможность не описывать интерфейсами что ты хочешь. К тому же в популярных языках нет "вычисляемых" интерфейсов, т.е. разработчик класса должен сам обьявить какие интерфейсы он имплементирует. Отсюда при склейке нескольких либ потребуються адаптеры/врапперы. В динамике в обьекты добавляемой либы можно добавить (на лету) необходимое API, хотя на практике так мало кто делает.

Если в языке есть:
  • общий корневой тип - типа Object из Java
  • алгебраические типы - обьединение независимых нескольких типов в единый без какого либо интерфейса
  • вычисляемые интерфейсы - пользователь либы определяет интерфейс, а компилер проверяет подходит обьект под интерфейс или нет, разработчик либы ничего не знает об этом
то ИМХО динамика не нужна.

Ну и раньше когда была разница между обьект-значение и ссылка-на-обьект (C++), то жёсткие типы имели значение. Сейчас по моему такое редко встретишь. Все поняли, что обьекты в куче, а оперируем через ссылки - это наиболее гибкая техника.

Автор: Artemios 24.1.2007, 03:06
Цитата

Вообще, для декларативных языков характерен "декларативный" подход и к организации данных. То есть понятие структуры данных никак не связано с её представлением в памяти компьютера. Напрочь отсутствует такое понятие как указатель. Редко встречаются и массивы. Наиболее распространенные структуры - списки и деревья.

Некоторые языки полностью игнорируют понятие типа данных. Имена переменных в них не связываются по умолчанию с каким-либо типом - все объекты образуют единое универсальное пространство. Такие языки называют бестиповыми, а также "языками с динамической типизацией" или "языками со скрытыми типами". Наиболее радикальны в этом плане Лисп и Пролог. Формы представления программ и данных в них одинаковы - символьные выражения. Это позволяет программе обрабатывать и преобразовывать другие программы и даже саму себя.

Так или иначе, типы возникают естественно, даже в бестиповых языках, когда объекты классифицируются согласно их использованию. Но вот что лучше - считать типы существующими априори или организовывать подмножества объектов из единой области? Этот вопрос остаётся нерешённым, так как отражает (возможно, неразрешимое) противоречие между надежностью и гибкостью языка. Споры о необходимости контроля типов ведутся и сегодня, но практический успех языка часто определяет более или менее успешная попытка найти компромисс.

Автор: pythonwin 24.1.2007, 14:27
Lotus Script можно поставить инструкцию в начале кода и у тебя динамическая типизация. а не поставил - нужно прописывать что и какого типа

Автор: Tamerlann 22.8.2007, 10:40
Динамическая типизация, как правило, является аатрибутом скриптовых языков (например, Python). Главное приемущество динамической типизации, как и многих других особенностей этих языков, в том, что это значительно сокращает время разработки и время изменения программы. Элементарно - просто не нужно указывать типы всех переменыых, и это уже экономит время. 
Кроме того, динамическая типизация дает еще более высокий уровень абстракции. Нас уже не интересует конкретный тип переменной, мы просто используем объект, зная, что он обладает нужными нам свойствами и поведением. Мы можем заменить его на другой, удовлетворяющий тем же требованиям объект, и при этом, не переколбасив весь код изменяя тип переменной! Такие программы очень легко изменять, когда, например, заказчик круто изменяет требования, а это уж конечно smile

Автор: Maksym 22.8.2007, 11:48
Цитата(Tamerlann @  22.8.2007,  10:40 Найти цитируемый пост)
Такие программы очень легко изменять

Спорно. Динамическая типизация требует от программиста очень высокой дисциплины, чтобы стабильно писать управляемый, простой в сопровождении код.

Автор: nerezus 22.8.2007, 12:24
Цитата

в том, что это значительно сокращает время разработки и время изменения программы
 Сомнительно. При динамической типизации IDE не подсказывает методы объектов, что мне. к примеру, сильно усложняет жизнь: приходится смотреть документацию для малоизвестных классов и т.д.

Цитата

Мы можем заменить его на другой, удовлетворяющий тем же требованиям объект, и при этом, не переколбасив весь код изменяя тип переменной! 
 При статической тоже можем, воспользовавшись типом класса предка.

Автор: pythonwin 22.8.2007, 12:31
Цитата(nerezus @  22.8.2007,  15:24 Найти цитируемый пост)
ри динамической типизации IDE не подсказывает методы объектов, что мне. к примеру, сильно усложняет жизнь: приходится смотреть документацию для малоизвестных классов и т.д.

не факт! в PyScripter это можно smile
главное правильно приписать импорт

Автор: dm9 1.9.2007, 16:56
Цитата(nerezus @  14.1.2007,  17:04 Найти цитируемый пост)
- Нет, к примеру, автодополнения в IDE, кроме примитивных случаев типа $a = new SomeClass(); $a->...


Намёк:
1) Zend Studio 5 (не 4, а именно 5);
2) /** @var my_class */ перед свойством объекта;
3) /* @var $my_var my_class */, например, внутри foreach ($something as $my_var).

Автор: Tamerlann 27.10.2007, 19:38
Цитата

При динамической типизации IDE не подсказывает методы объектов, что мне. к примеру, сильно усложняет жизнь: приходится смотреть документацию для малоизвестных классов и т.д.

ну, есть хорошие IDE, а есть не очень ;)

Цитата

При статической тоже можем, воспользовавшись типом класса предка
  • это не всегда возможно - предка может и не быть или он тоже не подходит по типу
  • если это придется делать в готовом проекте - то и придется делать очень много кастингов (cast) в тех местах где все же нужно использовать конркетную реализацию этого общего "интерфеса"

Автор: Tamerlann 27.10.2007, 20:04
Цитата

Динамическая типизация требует от программиста очень высокой дисциплины, чтобы стабильно писать управляемый, простой в сопровождении код. 

100% agree. В случае разработки более менее крупных проектов с использованием динамических языков приходится больше внимания уделять проектировнию. При кодировании накосячить можно запросто, это действительно минус.

Автор: pythonwin 28.10.2007, 06:53
Цитата(Tamerlann @  27.10.2007,  23:04 Найти цитируемый пост)
При кодировании накосячить можно запросто, это действительно минус.

можно и в паскале накосячить - косяки зависят больше от программиста, чем от языка smile

Автор: serger 7.11.2007, 08:36
ИМХО... 
Языки с динамической типизацией удобнее для представления данных. Когда нужно, допустим, просто отобразить данные или перевести в стандартную форму.. Соответственно, принцип отображения у каждого типа свой, но если сложным образом не обрабатывать значения или обрабатывать в одном контексте, то все обращиня к типам можно свести к нескольким типовым однообразным операциям.
И наоборот, строгая типизация помогает для универсальной обработке данных, где важно знать что мы обрабатываем и контролировать область обработки объектов.

И это в принципе логично.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)