Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Языковые альтернативы решения одинаковых задач.  (Прочитано 11162 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« : 01-10-2008 07:15 » 

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


dimka, ООП в Perl не развито, если сравнивать его с Java, но имеет свои приемущества и очень гибко. Приведение ООП в порядок обещано в Perl 6. А вот ECMA(Java)Script ты зря привел - там есть полные несуразности в ООП. Поверь, в Perl все логично - просто надо понимать эту логику. Он очень динамичен и даже строгость синтаксиса можно регулировать на ходу.
« Последнее редактирование: 02-10-2008 11:15 от dimka » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 01-10-2008 10:13 » new

Цитата: RXL
Поверь, в Perl все логично - просто надо понимать эту логику.
Я прекрасно понял логику, и она ничем не отличается от логики других нетипизированных ОО-языков. Я говорю о том, что синтаксис ужасен Улыбаюсь.

В ECMAScript я знаю только две несуразности:
- прототипы устанавливаются для конструктора, а не для объекта;
- при внешнем вызове замкнутых в конструкторе функций теряется контекст объекта.

Несуразность Perl: нарушение инкапсуляции.

Вообще, о сравнении языков и программировании, не зависящем от языков, можно отдельную тему завести. Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 01-10-2008 16:48 » 

Еще несуразность JS - нельзя проверить предка по объекту, хотя функционал в язык заложен.

Синтаксис Perl базируется на том же С, с подмешиванием Shell и Awk, которые были совсем не ООП. Подобие ООП в Perl добавлено в процессе эволюции. Наследование там работает так: ищется метод по имени в классе объекта и, если не найден, рекурсивно ищется в классах предков по списку в @ISA. Еще есть запасной вариант - автозагрузка.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 01-10-2008 19:52 » 

Цитата: RXL
Еще несуразность JS - нельзя проверить предка по объекту, хотя функционал в язык заложен.
Не понял...

Код: (Text) JScript(WSH)
function X()
 {
 }

Y.prototype = new X();
function Y()
 {
 }

var x = new X();
var y = new Y();
WScript.Echo(y instanceof Y ? "Yes" : "No"); // Yes
WScript.Echo(y instanceof X ? "Yes" : "No"); // Yes
WScript.Echo(y instanceof y.constructor ? "Yes" : "No"); // Yes
WScript.Echo(y instanceof x.constructor ? "Yes" : "No"); // Yes

P.S. Пора делить тему...
« Последнее редактирование: 01-10-2008 19:54 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 02-10-2008 07:02 » 

dimka, вот старая тема: https://forum.shelek.ru/index.php/topic,7678.0.html
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 02-10-2008 11:06 » 

RXL, ты писал
Код: (ECMAScript)
Y.prototype = X;
а надо
Код: (ECMAScript)
Y.prototype = new X();
Потому что прототип - это не тип (конструктор), а объект. В ООП это называется делегирование через прототипы и является альтернативой наследованию для нетипизированных языков. Нелогично (с позиций ООП) только то, что прототип задаётся у конструктора, а не объекта. Т.е. для всех объектов, созданных конструктором Y, прототипом будет один и тот же объект, созданный конструктором X, хотя хотелось бы, чтобы у каждого объекта был свой отдельный прототип. Если в объекте что-то не найдено (метод или поле), происходит делегирование запроса прототипу - поиск идёт в нём, потом в прототипе прототипа и т.д. либо пока не найдётся, либо пока не закончится цепочка прототипов. Тоже самое происходит и в Perl через упомянутое @ISA (если я правильно понял описание этого языка).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines