Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем прикол динамической типизации? 
:(
    Опции темы
nerezus
Дата 14.1.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Пишу в основном на пхп и питоне. Динамическая типизация.

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

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

А плюсы?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
VaiMR
Дата 16.1.2007, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.11.2006

Репутация: нет
Всего: 2



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

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

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

                       вот в си++: 

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

Аналогичный пример: список, который работает с любыми данными (стандартными или определенными пользователем(в см. программистом)). Он умеет все что должен уметь класс - список, но самостоятельно работать не может, а в его потомках определяется тип данных и с ними уже можно работать.
PM MAIL ICQ   Вверх
nerezus
Дата 16.1.2007, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



VaiMR, эм... это называется наследование и абстрактные классы.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Sardar
Дата 16.1.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



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

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

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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Artemios
Дата 24.1.2007, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: нет
Всего: 50



Цитата

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

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

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



--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
pythonwin
Дата 24.1.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: нет
Всего: 36



Lotus Script можно поставить инструкцию в начале кода и у тебя динамическая типизация. а не поставил - нужно прописывать что и какого типа
PM WWW GTalk Jabber   Вверх
Tamerlann
Дата 22.8.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



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

--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Maksym
Дата 22.8.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



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

Спорно. Динамическая типизация требует от программиста очень высокой дисциплины, чтобы стабильно писать управляемый, простой в сопровождении код.
PM MAIL   Вверх
nerezus
Дата 22.8.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

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

Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
pythonwin
Дата 22.8.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: нет
Всего: 36



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

не факт! в PyScripter это можно smile
главное правильно приписать импорт
PM WWW GTalk Jabber   Вверх
dm9
Дата 1.9.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Цитата(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).

PM MAIL ICQ   Вверх
Tamerlann
Дата 27.10.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Цитата

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

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

Цитата

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

--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
Tamerlann
Дата 27.10.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: нет
Всего: 2



Цитата

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

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

--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
pythonwin
Дата 28.10.2007, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: нет
Всего: 36



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

можно и в паскале накосячить - косяки зависят больше от программиста, чем от языка smile
PM WWW GTalk Jabber   Вверх
serger
Дата 7.11.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: нет
Всего: 5



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

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


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.