|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.website/282540e3c2a7.html, оценка из 5, голосов 10
|