|
|
ru.website- RU.WEBSITE ------------------------------------------------------------------- From : Alexander Kostiuchenko 2:463/672.419 20 Jan 2002 04:08:56 To : Vinokurov Andrey Subject : Perl OOP??? -------------------------------------------------------------------------------- Как-то раз (а точнее 17 Jan 02 в 18:28) Vinokurov Andrey писал(а) к All: VA> Безусловно, перл содержит средства, позволяющие эмулировать "объектный VA> стиль". Hо это не является достаточным основанием, чтобы считать язык VA> объектным. сразу отмечу- Перл на звание "чиста обьектного" языка не претендует. Честь и хвала Ларри за это. Потому как эти самые чиста ООЯП полны ограничений (прежде всего - поддержка только одной парадигмы - и все, что из этого вытекает). Перл же дает свободу действий: хочу - пишу "по-обьектному", хочу - "по-функциональному"... захочу - буду вообще на латыни писать (Lingua::Romana::Perligata)... >> В перле есть все, что является атрибутом ООП - инкапсуляция, >> наследование, VA> полиморфизм. VA> "Сердцевина" ООП - это инкупсуляция. Посмотрим, как с ней обстоят дела VA> в перле. Итак, мы видим, что ... ее там нет. То что-то, конечно, VA> имеется, но это "что-то" не сильно отличается от той "инкапсуляции", VA> которая имеется в чистом Си. Во-первых, она не поддерживается на [...skipped...] VA> Еще один важный момент - _подлинная_ инкапсуляция предполагает VA> сокрытие данных. Этого перл, естественно, тоже не умеет - данные VA> объекта доступны всегда: посмотри protected из Class::Fields, Attribute::Protected и Tie::SecureHash. Вполне себе реализуют private/protected. Запрещать и ограничивать - просто... Только зачем? VA> Еще одна характерная деталь, свидетельствующая об искусственности VA> объектности в перле - необходимость явного "благословления" объекта, VA> т.е. приписывания его к определенному типу. И т.д. и т.п.. Я уж не VA> говорю о об отсутсвии таких "вкусностей", как перегрузка операторов. Сколько можно повторять - есть в Перле перегрузка, есть. perldoc overload >> ОО у перла конечно слегка нетрадиционное (непривычное), но вполне >> себе VA> функциональное. VA> Hапример - явное "благословление", т.е. явное приписывание "объекта" к VA> классу. VA> Или размещение данных объекта в некотором аналоге VA> ассоциативного массива. А для разрешения наследования придется а чем это плохо ? какая вообще разница, как хранятся данные ? при использовании обьектного подхода ты к ним обращаешся только через соотв. методы getter/setter (для этого например можно PlusPlus.pm использовать - с ним эти методы можно так и описывать: getter FIELD {}, setter FIELD {}). VA> ущербной, синтаксис обращения с объектами - корявым (перл здесь VA> выигрывает, но вы же сами говорили, что синтаксис - это HЕ главное), VA> а эффективность кода снижалась в разы по сравнению с "чистым чистым VA> Си" (для перла как для интерпретируемого языка это, впрочем, VA> неактуально). последние две претензии - неактуальны, сам это признаешь. Что до ущербности - то ты ее так и не доказал. "Полноценная инкапсуляция" возможна - модули, ее реализующие, я привел выше. Перегрузка - аналогично. VA> Еще раз повторю, язык можно считать объектным не тогда, когда на нем VA> можно программировать в "объектном стиле" (это позволяют почти все VA> языки - в той или иной степени), а только тогда, когда в языке есть VA> _встроенная_ поддержка всей парадигмы ОО. Перл этому условию не VA> удовлетворяет. Хм. Функция bless вполне себе встроенная. @ISA - тоже. VA> Итак, сделайте ка мне на перле "ромбовидное невиртуальное VA> наследование". Это когда VA> class L { /*...*/ }; VA> class A: public L { /*...*/ }; VA> class B: public L { /*...*/ }; VA> class AB: public A, public B { /*...*/}; VA> И чтоб все производные классы унаследовали методы своих базовых VA> классов. package L; package A; @ISA = qw(L); package B; @ISA = qw(L); package AB; @ISA = qw(A B); Оно ? -- mailto: random at info.net.ua //Александр * Origin: useless (2:463/672.419) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.website/40293c4a34d1.html, оценка из 5, голосов 10
|