Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объектно Ориентированное Программирование, Обсуждение ООП в Perl 
:(
    Опции темы
shootnix
Дата 8.6.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: 2
Всего: 2



Довольно интересная разработка наших зарубежных товарищей — Moose
это, конечно, если пользоваться не "читсым" Perl, а уже доп. модулями, чем, с позволения сказать, Perl и силен...


PM WWW ICQ   Вверх
nitr
Дата 8.6.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Да что-то интересное, но необходимо ли это? В большинстве случаев - создают "велосипеды", или используют что-то очень "конструктивное, понятное"...

Многим проектам вообще приходится писать с "нуля".
А Moose ещё надопоковырять, вдруг есть "затыки" smile , которые ну во многих поектах существуют...


--------------------
PM   Вверх
tishaishii
Дата 13.6.2007, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Этоть Moose делается за 2 минуты. И никакого особого смысла в реальном проекте делать эти 2 минуты смысла не вижу.

Вообще, тема private, public и protected противоречит идеологии Perl. Perl - проект opensource, а private и protected - это предрассудки.
PM MAIL ICQ Skype   Вверх
Shaggie
Дата 13.6.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(tishaishii @  13.6.2007,  10:27 Найти цитируемый пост)
Вообще, тема private, public и protected противоречит идеологии Perl. Perl - проект opensource, а private и protected - это предрассудки. 

Private и protected - не предрассудки, и уж тем более они никоим образом не противоречат идеологии свободного ПО. Это гигантское подспорье при проектировании и реализации крупного проекта. То, что перл не рассчитан на их использование, ещё не значит, что такие полезные концепции программированя можно объявлять первородным злом. У приверженцев PHP до 5 версии, вон, пространств имён не было, так они же не стремились откреститься от них, как от чумы, а признали несовершенность используемого языка. Более того, постепенно латают погрешность.

Кстати, 6 перл потому и творят так долго, что пытаются сделать совершенно объектным языком. А где объекты - там и права доступа. Посмотрим, насколько это будет противоречить духу opensource...


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
tishaishii
Дата 13.6.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Цитата
Private и protected - не предрассудки, и уж тем более они никоим образом не противоречат идеологии свободного ПО. Это гигантское подспорье при проектировании и реализации крупного проекта.

Если тебе не охота, то и не вызывай private и protected функции, а если сильно нада, то бери что хош. private и protected нужны только, чтобы защитить авторские права. При чём здесь "крупный" или "мелкий" проект? Ты не в полне понимает идеологию opensource.
PM MAIL ICQ Skype   Вверх
Shaggie
Дата 13.6.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Private и protected - средство защиты авторских прав? Это что-то новенькое...


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
tishaishii
Дата 13.6.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



А для чего оно ещё надо?
Поступил модуль, ну так пользуй его как тебе вздумается.
PM MAIL ICQ Skype   Вверх
everyone
Дата 8.9.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 24.3.2004

Репутация: 1
Всего: 4



И каким же образом можно защитить с помощью Private и protected авторские права? Нарушение авторских прав- это использование чужого кода с нарушением лицензии на него. В Perl это совершенно неуместно, и невозможно, по идеологии, собственно, самого Perl, какими бы закрытыми методы/переменные здесь ни были.

В Perl рекомендуют называть внутренние подпрограммы, начиная с символа подчёркивания "_". Это конечно до невозможности простой вариант, но отчасти довольно приемлимый, этот язык ведь призван облегчать жизнь программистам, в отличие от многих других) С переменными дела не очень, ну... у всех свои недостатки (© из к/ф "В джазе только девушки")

Внутренние переменные должны быть использованы для целостности данных, для этого и нужна инкапсуляция... Да и какое нам должно быть дело до приватных методов - разработчику (в некоторых случаях даже нам самим)) виднее, что в API лучше не вызывать напрямую. Shaqqie прав на счёт концепции программированя - переопределение и наследование не всех методов приводит к хорошим последсвиям.

Это сообщение отредактировал(а) everyone - 8.9.2007, 11:17
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
kaaz
Дата 9.11.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Цитата(tishaishii @ 13.6.2007,  11:23)
Цитата
Private и protected - не предрассудки, и уж тем более они никоим образом не противоречат идеологии свободного ПО. Это гигантское подспорье при проектировании и реализации крупного проекта.

Если тебе не охота, то и не вызывай private и protected функции, а если сильно нада, то бери что хош. private и protected нужны только, чтобы защитить авторские права. При чём здесь "крупный" или "мелкий" проект? Ты не в полне понимает идеологию opensource.

Про какие авторские права вы говорите? По вашему мнению я могу объявить класс с private членами и мой код будет защищён авторским правом?
Класс для пользователя выступает как черный ящик и ему совершенно необязательно знать что у него внутри, вот что бы не было никаких недоразумений и вмешательства во внутреннюю работу, всё что нужно для успешной работы я дам к нему доступ, то к чему не нужно я скрою(объявлю как private  или protected)
PM MAIL   Вверх
everyone
Дата 9.11.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 24.3.2004

Репутация: 1
Всего: 4



авторские права должны защищаться законом, и только им. Где-то этот момент и правда работает.
что касается private и protected - они нужны! для проектирования. В языке с ООП должны быть приватные функции, если он претендует на универсальность. А пользоваться им или нет должен решать тот, кто применяет его. Часто ситуация решает это за разработчика - необходимость хорошего, читаемого кода.

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

чем сложнее украсть функцию private, чем public... мне сложно сообразить. Если это кому-то понадобиться, то ничего не поделаешь)
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
gcc
Дата 23.1.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



интересно бь узнать что это за программа была с таким ООП, что показал, уважаемый  tishaishii

а где еще такие примеры найти которых нету в книгах ?  smile 

кстате, в  Catalyste такого тоже не ту вроде бы встроенного...

Это сообщение отредактировал(а) gcc - 23.1.2009, 23:40
PM WWW ICQ Skype GTalk Jabber   Вверх
tishaishii
Дата 27.1.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Цитата(Zuzu @ 8.2.2007,  09:43)
tishaishii.  То, что я описал - очевидно. И следует непосредственно из оригинальной документации по Perl. Там написано все очень четко.

Правило "Кто первый, тот и прав" - тоже не катит.

Ниже - простейший код. Какой метод m1 снаследует Child в этом случае? По твоему предположению - выходит от Mother -  это неверно.

Код

package Class;

sub new {
my $something = shift;
my $class = ref($something) || $something;
my $data = {};

return bless($data, $class);
}

sub m1 { print "M1 from Class \n" }

# --------------------------

package Mother;
use base qw/Class/;

sub m1 { print "M1 from Mother \n" }

# --------------------------

package Father;
use base qw/Class/;

# --------------------------

package Neighbour;
use base qw/Сlass/;
sub m1 { print "M1 from Neighbour \n" }

# --------------------------

package Child;
use base qw/Father Mother Neighbour/;

# --------------------------
package main;

my $aChild = new Child;
$aChild->m1;
exit;


Спросишь, к чему это я? 

Во-первых, лично я привык понимать, что делает программа без ее запуска на выполнение. Очень часто это спасало, когда нужно было быстро исправить ошибку на "живом" проекте, который реально работает. А на "исправление по всем правилам" - перенос всего кода и данных на площадку поддержки, исправление и отладка там, перенос отлаженного кода обратно на "реальный проект" - просто заказчик не дает времени.
А во-вторых, просто хочется увидеть код твоего класса с геттерами-сеттерами через tie для моей простейшей модели с множественным наследованием. Той, что я рисовал в виде диаграмки. Я свой код написал прямо в форум буквально за пару минут.

Ну вот ты и поспешил....smile
А меня сегодня через PM по поводу этой темы ProFTP разбудил.
Так я пример твой посмотрел-посмотрел... И думаю, ну не стоит так. Ну явно же в твоём коде уловка есть (это я по инерции мышления).
У класса Father не обозначено собственного метода m1, а есть только наследованный из Class. Ну не указан в описании модуля и всё (чтоб других проверить и дело запустать).

А противорячия принципу наследования "Кто первый - тот и прав", я пока не нашёл.
Из твоего примера, в пакете main я вызываю Child->new->m1 и получаю вызов изначального метода Class::m1, за неимением другого в классе Father. А вызывается именно Class::m1, т.к. Father в списке родителей был указан первым.

ISA(Child=>Father, Mother(m1), Neighbour(m1));
ISA(Father=>Class(m1));
Child::SUPER::SUPER::m1;

Не прошёл твой номер. smile 

Это сообщение отредактировал(а) tishaishii - 27.1.2009, 18:42
PM MAIL ICQ Skype   Вверх
gcc
Дата 24.5.2009, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



1) может кто-то объяснить про tie в OOP? не понял я в этом топике примеры... смысл? как понять архитектуру этого интерфейса которые делается на tie? 

я в perl почти все понял но кроме tie....

2) а как сделать Child::SUPER::SUPER::SUPER::m1 ?
PM WWW ICQ Skype GTalk Jabber   Вверх
everyone
Дата 24.5.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 24.3.2004

Репутация: 1
Всего: 4



Цитата

1) может кто-то объяснить про tie в OOP? не понял я в этом топике примеры... смысл? как понять архитектуру этого интерфейса которые делается на tie? 


tie связывает структуру Perl с какими-то данными.

С помощью tie можно связать структуру с классом и таким образом изменнить функциональность структуры.

мне это видится так

Добавлено через 2 минуты и 23 секунды
Здесь можно найти ответы на многие вопросы, касающиеся tie и OOP.
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
gcc
Дата 24.5.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



этот пример я читал,  я "связал", а что дальше делать? где приемущество?

как построить архитектуру программы с tie, я не вижу сымсл?  где есть большая прогармма с tie чтобы посмотреть исходники, ради интереса?
PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1178 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.