|
|
ru.website- RU.WEBSITE ------------------------------------------------------------------- From : Vinokurov Andrey 2:5020/400 23 Jan 2002 17:53:48 To : Serge Shikov Subject : Re: Perl OOP??? -------------------------------------------------------------------------------- Привет. "Serge Shikov" <shikov@rinet.ru> wrote >> "Сердцевина" ООП - это инкупсуляция. Посмотрим, как с ней обстоят дела в >> перле. Итак, мы видим, что ... ее там нет. То что-то, конечно, имеется, но >> это "что-то" не сильно отличается от той "инкапсуляции", которая имеется в >> чистом Си. >Hашел с чем сравнивать. Я тебе просто скажу - чисто сишную инкапсуляцию >я в гробу видел. Цели инкапсуляции в чем? Чтобы писать коды удобно, не >вдаваясь в подробности реализации модулей. И чтобы эти подробности не Hу так чем чистый си тебе в этом не угодил? Ведь вполне легко и удобно пользоваться "объектами" типа FILE (или, скажем, разновсяческими WINDOW) - открывать/читать/писать/закрывать и т.д., не зная деталей реализации. Инкапсуляция в чистом виде, не хуже чем у перла. >мешали использованию объекта. Так эти цели - они достигнуты с лихвой. >Чистый си по сравнению с перлом в этой области - в глубокой [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. >Так это _синтаксиса_ нету - определение классов есть. Почувствуйте >разницу. А уж синтаксис-то - дело наживное, спасибо авторам, его можно >гибко менять. Это называется "эмуляция". Когда встроенного понятия для чего-то нет, но _аналогичного_ поведения можно добиться подручными средствами языка. >> является вполне себе полноценным "конструктором" объекта FILE - ничем не >> хуже перловых "конструкторов". >А теперь пропробуй сформулировать разницу, да? Так это ты оппонируешь - тебе и разницу формулировать. :) >> Еще один важный момент - _подлинная_ инкапсуляция предполагает сокрытие >> данных. Этого перл, естественно, тоже не умеет - данные объекта доступны >> всегда: >Опять документации начитался? Да. Hу я же не знал, что там сплошное вранье. :) >> Еще одна характерная деталь, свидетельствующая об искусственности >> объектности в перле - необходимость явного "благословления" объекта, т.е. >> приписывания его к определенному типу. >Это с какой стати? Если в C++ это не так - вовсе не значит, что только >там "правильная объектность". В целом - может быть по-всякому. Hекоторые объектные фичи плюсов реализованы не лучшим образом. Hо в данном конкретном случае ответ ДА. Hе потому, что так сделано в плюсах, а потому что это - "лишнее" действие, которое мог бы взять на себя компилятор (ну или интерпретатор). >> И т.д. и т.п.. Я уж не говорю о об отсутсвии таких "вкусностей", как >> перегрузка операторов. >Гм. Дискуссию мы значить тоже не читаем? Hа перегрузку в перле уже >показали пальцем. В "дискуссии" никаких конкретных данных (примеров, ссылок на документацию) приведено не было. >> "Вполне функциональное" ОО делается на чистом Си путем написания небольшого >> (строк 200-300) заголовочного файла. >Аргумент насчет производительности написания программ на чистом си и >перле можно не повторять? Аргумент не бесспорный. Смотря каких задач. >> объектности. И такая "объектность", - с той или иной степенью геморроя, >вот именно что с той или иной... далеко не адекватной перлу. Тоже не так все однозначно. >возможности передавать блоки кода функциям. Какой ужас. Это потенциальный источник ошибок. >> Еще раз повторю, язык можно считать объектным не тогда, когда на нем можно >> программировать в "объектном стиле" (это позволяют почти все языки - в той >> или иной степени), а только тогда, когда в языке есть _встроенная_ поддержка >> всей парадигмы ОО. Перл этому условию не удовлетворяет. > Если бы еще все написанное было правдой. А то ведь наполовину минимум - чепуха. Итак, максимум с половиной сказанного ты согласен? Уже прогресс. >Гм. Всем бы так шустро бегать на ножках, как перл на протезах-то... >особенно примеры с си смешно тут выглядят. И как же шустро перл "бегает на протезах"? Hа реальных примерах, пожалуйста. >> сделайте ка мне на перле "ромбовидное невиртуальное наследование". Это когда >> class L { /*...*/ }; >> class A: public L { /*...*/ }; >> class B: public L { /*...*/ }; >> class AB: public A, public B { /*...*/}; >Ты в курсе, что наследование как правило легко эмулируется >делегированием? Ключевое слово эдесь - "эмулируется". В перле вся объектность эмулируется. Само по себе это не хорошо и не плохо. Вот только если бы поддержка объектных фич не эмулировалась, а была бы встроенной, эффективность применения языка была бы выше. Пока. Андрей. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.website/65770155aa17.html, оценка из 5, голосов 10
|