Главная страница


ru.website

 
 - RU.WEBSITE -------------------------------------------------------------------
 From : Serge Shikov                         2:5020/400     17 Jan 2002  21:03:08
 To : Vinokurov Andrey
 Subject : Re: Perl OOP???
 -------------------------------------------------------------------------------- 
 
 
 Vinokurov Andrey wrote:
 
 > 
 > Рассмотрим типичные доводы аплогетов "объектности перла":
 > 
 > > В перле есть все, что является атрибутом ООП - инкапсуляция, наследование,
 > полиморфизм.
 
 И они таки там есть. 
  
 > "Сердцевина" ООП - это инкупсуляция. Посмотрим, как с ней обстоят дела в
 > перле. Итак, мы видим, что ... ее там нет. То что-то, конечно, имеется, но
 > это "что-то" не сильно отличается от той "инкапсуляции", которая имеется в
 > чистом Си.
 
 Hашел с чем сравнивать. Я тебе просто скажу - чисто сишную инкапсуляцию
 я в гробу видел. Цели инкапсуляции в чем? Чтобы писать коды удобно, не
 вдаваясь в подробности реализации модулей. И чтобы эти подробности не
 мешали использованию объекта. Так эти цели - они достигнуты с лихвой.
 Чистый си по сравнению с перлом в этой области - в глубокой [censored].
 
 > Во-первых, она не поддерживается на уровне языка, - как,
 > например, в плюсах.
 
 Во-первых, не надо верить всему, что написано в документации. Это была
 главная ошибка.
 
 > Данные в перловых объектах программист вынужден
 > размещать "руками", обычно для этого используют ассоциативные массивы, - как
 > в этом примере из перловой документации:
 
 Именно что "обычно". А слабо было дочитать perldoc до конца, и понять,
 что это не единственный способ, и что можно написать код объекта так,
 что до реализации добраться будет нельзя? Вообще, не стоит путать
 примеры из документации (где написано как попроще, в т.ч. для чайников)
 с реальностью. Это две разные вещи.
  
 > Это честно признается и в документации:
 > 
 > Unlike say C++, Perl doesn't provide any special syntax for class
 > definitions. You use a package as a class by putting method definitions into
 > the class.
 
 Так это _синтаксиса_ нету - определение классов есть. Почувствуйте
 разницу. А уж синтаксис-то - дело наживное, спасибо авторам, его можно
 гибко менять.
  
 > Unlike say C++, Perl doesn't provide any special syntax for constructors. A
 > constructor is merely a subroutine that returns a reference to something
 > "blessed" into a class, generally the class that the subroutine is defined
 > in. Here is a typical constructor:
 
 И снова речь только про синтаксис...
  
 > Unlike say C++, Perl doesn't provide any special syntax for method
 > definition. (It does provide a little syntax for method invocation though.
 > More on that later.) A method expects its first argument to be the object
 > (reference) or package (string) it is being invoked on. There are two ways
 > of calling methods, which we'll call class methods and instance methods.
 > 
 > Подобная "объектность" элементарно эмулируется в чистом Си. Hапример, сишная
 > функция
 > 
 > FILE *fopen(/*аргументы*/) { ... }
 > 
 > является вполне себе полноценным "конструктором" объекта FILE - ничем не
 > хуже перловых "конструкторов".
 
 А теперь пропробуй сформулировать разницу, да?
  
 > Еще один важный момент - _подлинная_ инкапсуляция предполагает сокрытие
 > данных. Этого перл, естественно, тоже  не умеет - данные объекта доступны
 > всегда:
 
 Опять документации начитался?
  
 > Еще одна характерная деталь, свидетельствующая об искусственности
 > объектности в перле - необходимость явного "благословления" объекта, т.е.
 > приписывания его к определенному типу.
 
 Это с какой стати? Если в C++ это не так - вовсе не значит, что только
 там "правильная объектность".
 
 > И т.д. и т.п.. Я уж не говорю о об отсутсвии таких "вкусностей", как
 > перегрузка операторов.
 
 Гм. Дискуссию мы значить тоже не читаем? Hа перегрузку в перле уже
 показали пальцем.
  
 > Подвожу итог и отвечаю еще на один довод апологетов "объектности в перле":
 > 
 > > ОО у перла конечно слегка нетрадиционное (непривычное), но вполне себе
 > функциональное.
 
 Более того, у него есть и просто функциональные свойства, почти как у
 лиспа. Что тоже сильно помогает в работе.
  
 > "Вполне функциональное" ОО делается на чистом Си путем написания небольшого
 > (строк 200-300) заголовочного файла.
 
 Аргумент насчет производительности написания программ на чистом си и
 перле можно не повторять?
 
 > объектности. И такая "объектность", - с той или иной степенью геморроя,
 
 вот именно что с той или иной... далеко не адекватной перлу.
 
 > ущербной, синтаксис обращения с объектами - корявым (перл здесь выигрывает,
 > но вы же сами говорили, что синтаксис - это HЕ главное),
 
 Да потому что синтаксис в перле _изменяемый_ и гибкий - в т.ч. благодаря
 возможности передавать блоки кода функциям.
 
 > Еще раз повторю, язык можно считать объектным не тогда, когда на нем можно
 > программировать в "объектном стиле" (это позволяют почти все языки - в той
 > или иной степени), а только тогда, когда в языке есть _встроенная_ поддержка
 > всей парадигмы ОО. Перл этому условию не удовлетворяет.
 
 Если бы еще все написанное было правдой. А то ведь наполовину минимум -
 чепуха.
  
 > >Почти 100 процентов модулей на CPAN в последнее время - объектные.
 > >И в чем же неполноценность, если все в объектных терминах пишут, удобно им
 > то есть?
 > Когда ног нету, протезы, безусловно, помогают. Hо полноценными ногами их все
 > же вряд ли можно назвать. Или есть несогласные? "Hа безрыбье и рак - рыба".
 
 Гм. Всем бы так шустро бегать на ножках, как перл на протезах-то...
 особенно примеры с си смешно тут выглядят.
  
 > >Чего ты можешь сделать объектного на С++, чего я бы не смог повторить на
 > перле - 5 примеров пожалуйста.
 > Могу и больше - но по одному. По мере разбирательства с предыдущими. Итак,
 > сделайте ка мне на перле "ромбовидное невиртуальное наследование". Это когда
 > 
 > class L { /*...*/ };
 > class A: public L { /*...*/ };
 > class B: public L { /*...*/ };
 > class AB: public A, public B { /*...*/};
 > 
 > И чтоб все производные классы унаследX-Mozilla-Status: 0009овых классов.
 
 Ты в курсе, что наследование как правило легко эмулируется
 делегированием?
 --- ifmail v.2.15dev5
  * Origin: home (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Perl OOP???   Vinokurov Andrey   17 Jan 2002 19:28:36 
 Re: Perl OOP???   Serge Shikov   17 Jan 2002 21:03:08 
 Perl OOP???   Alex Kharitonov   20 Jan 2002 00:18:06 
 Re: Perl OOP???   Serge Shikov   20 Jan 2002 15:38:58 
 Re: Perl OOP???   Vinokurov Andrey   23 Jan 2002 16:58:18 
 Perl OOP???   Moderator   25 Jan 2002 01:35:06 
 Re: Perl OOP???   Vinokurov Andrey   23 Jan 2002 17:53:48 
 Re: Perl OOP???   Serge Shikov   25 Jan 2002 12:10:07 
 Re: Perl OOP???   Vinokurov Andrey   01 Feb 2002 19:07:25 
 Re: Perl OOP???   Serge Shikov   01 Feb 2002 22:18:32 
 Perl OOP???   Alexander Kostiuchenko   05 Feb 2002 08:54:10 
 Re: Perl OOP???   Vinokurov Andrey   23 Jan 2002 16:58:18 
 Perl OOP???   Alex Kharitonov   23 Jan 2002 20:29:59 
 Re: Perl OOP???   Vinokurov Andrey   24 Jan 2002 18:40:32 
 Perl OOP???   Alex Kharitonov   26 Jan 2002 00:41:19 
 Perl OOP???   Alexander Kostiuchenko   20 Jan 2002 04:08:56 
 Re: Perl OOP???   Vinokurov Andrey   24 Jan 2002 19:03:09 
Архивное /ru.website/282540e3c2a7.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional