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

Поиск:

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


Бывалый
*


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

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



Цитата

И проверки типов на этапе компиляции можно ?


какой ещё компиляции?

мне бы и в голову не пришло проверять типы на этапе компиляции, и почему бы такими вещами не заниматься именно компиляторам. В жизни этого не делал! И зачем это нужно? (пожалуйста, не отвечайте на этот вопрос)

perl в принципе "другой", это лингвистическое изобретение, очень особенное и эффективное, если его правильно понимать, а не бросаться в критике странными фразами

Это сообщение отредактировал(а) everyone - 3.6.2009, 23:15
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
gcc
Дата 4.6.2009, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(KSURi @ 3.6.2009,  21:59)
В голову сразу приходит такая параллель для сравнения: Moose, там вроде как появляется система контроля типов данных. Но нельзя ведь сказать, что перл теперь перестал быть нетипизированным языком. При желании этот контроль можно обойти.


в книге написано, что в С++ компилятор дописан на Си, дописано ООП, точно так же как и на perl (какая разница не чем оно написано на Си или на perl?)

в smaltalk в его архитетуре есть ООП! и java наверное так же...

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


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 4.6.2009, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(DaemonSuw @ 3.6.2009,  16:11)
mvsgt, да вот мне интересно кто нибудь его использует? даже топик создал http://forum.vingrad.ru/forum/topic-259920.html ... 3 человека насчиталось =) кто юзает

там еще есть видел на атрибутах http://search.cpan.org/~jjordan/Attribute-...hod/Typeable.pm
http://search.cpan.org/search?query=CLASS%...ER&mode=all


Это сообщение отредактировал(а) gcc - 4.6.2009, 06:37
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 4.6.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mvsgt @  3.6.2009,  22:34 Найти цитируемый пост)
И проверки типов на этапе компиляции можно ? 

Каких типов? Вы мое первое сообщение читали? Perl - нетипизированный язык, так что вопрос некорректен.
Если конечно не считать за типы хэши, скаляры и списки, что вообще-то неправильно. Тем не менее для них можно сделать проверку на этапе компиляции.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
KSURi
Дата 4.6.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(gcc @ 4.6.2009,  06:08)
в книге написано, что в С++ компилятор дописан на Си, дописано ООП, точно так же как и на perl (какая разница не чем оно написано на Си или на perl?)

в smaltalk в его архитетуре есть ООП! и java наверное так же...

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

Не уверен, что понял правильно то, что вы хотели мне сказать... Кажется вы неявно согласились со мной?)
Очевидно, на мой взгляд, что способность языка эмулировать различные парадигмы, не меняет изначально задуманную.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
gcc
Дата 7.6.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



вот нашел еще

Clone::Fast - Natively copying Perl data structures
Moose - A postmodern object system for Perl 5.
Mouse - Moose minus the antlers
Class::Prototyped - Fast prototype-based OO programming in Perl
Class::Closure - Encapsulated, declarative class style
Class::Spiffy - Spiffy Framework with No Source Filtering


это наверное для больших как-то проектов?

Код

 use strict;
 use warnings;
 use Clone qw(clone);
 sub new {
    my $protos  = ref $_[0] eq "ARRAY" ? shift || [] : [];
    my $data    = shift || {};
    my $methods = shift || {};
    my $self;
    return $self = sub {
        my $method = shift;
        if ($method eq "clone") {
            return new(clone($protos), clone($data), clone($methods));
        }
        if ($method eq "add_slot") {
            %{$methods} = (%{$methods}, @_);
            return $self;
        }
        if ($method eq "get_slot") {
            return $$methods{$_[0]};
        }
        if ($method eq "slot_names") {
            return keys %$methods;
        }
        if (my $sub = $$methods{$method}) {
            return $sub->($self, $data, @_);
        }
        foreach (@$protos) {
            if (my $sub = $_->("get_slot", $method)) {
                return $sub->($self, $data, @_);
            }
        }
    }
 }
 # Пример использования.
 use Test::More tests => 12;
 my $c1 = new(
        { foo => 3 },
        {
            foo => sub { my ($self, $data) = @_;
                return $$data{foo};
            },
            add => sub {
                my ($self, $data, $delta) = @_;
                $$data{foo} += $delta;
                return $self;
            },
        },
    );
 is($c1->("foo"), 3, "c1");
 my $c2 = $c1->("clone");
 is($c2->("foo"), 3, "c2");
 ok($c1->("add", 2), "c1: add 2");
 is($c1->("foo"), 5, "c1");
 is($c2->("foo"), 3, "c2");
 is($c1->("add", 3)->("foo"), 8, "c1: add 3 and return");
 $c1->("add_slot", multiply => sub {
        my ($self, $data, $y) = @_;
        $$data{foo} *= $y;
        return $self;
    });
 ok($c1->("multiply", 2), "multiply");
 is($c1->("foo"), 16, "multiply, get");
 ok(ref $c1->("get_slot", "multiply") eq "CODE", "get_slot");
 is(join(" ", sort $c1->("slot_names")), "add foo multiply", "slot_names");
 my $c3 = new(
        [$c1], # inheritance
        { foo => 3 },
        {
            baz => sub { my ($self, $data) = @_;
                return join " ", "baz", $$data{foo};
            },
        }
    );
 is($c3->("baz"), "baz 3", "c3, baz");
 is($c3->("foo"), 3, "c3, foo");


Оригинал: http://laziness-impatience-hubris.blogspot.../blog-post.html



PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 1.7.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



сборка примеров и шаблонов ООП

http://perldesignpatterns.com/perldesignpatterns.html
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 3.7.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



TOPH, а какой язык есть не простой? этот тот у которого мало возможностей?
PM WWW ICQ Skype GTalk Jabber   Вверх
mvsgt
Дата 3.7.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(KSURi @  4.6.2009,  09:05 Найти цитируемый пост)
Цитата(mvsgt @  3.6.2009,  22:34 Найти цитируемый пост)
И проверки типов на этапе компиляции можно ? 

Каких типов? Вы мое первое сообщение читали? Perl - нетипизированный язык, так что вопрос некорректен.
Если конечно не считать за типы хэши, скаляры и списки, что вообще-то неправильно. Тем не менее для них можно сделать проверку на этапе компиляции.



Moose позволяет слелать надстройку над перлом, после чего перл становится вполне типизированным языком, хотя и с некоторыми особенностями. Например, можно написать

Код

subtype Timestamp_Type => as 'Int';

sub lalala {
    my $self    = shift;
    my ( $date, ) = pos_validated_list( \@_, { 
        'Timestamp_Type', optional => 0, 
    }, );
    print $date;
}


lalala(time()) ; # проходит
lalala(scalar localtime()); # обнаружится ошибка
lalala([localtime()]); # обнаружится ошибка




но ошибка будет обнаружена только при выполнении, что неприятно. Так что типизированный перл или нет - а типы на нём сделать можно, запрет на неправильное присвоение типов сделать можно, но только на время выполнения, не компиляции.

Это сообщение отредактировал(а) mvsgt - 3.7.2009, 16:41
PM MAIL   Вверх
KSURi
Дата 3.7.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mvsgt @  3.7.2009,  16:39 Найти цитируемый пост)
Moose позволяет слелать надстройку над перлом, после чего перл становится вполне типизированным языком

Я вам даже больше скажу: MooseX::Declare позволяет выполнять проверки на этапе компиляции (с помощью сигнатур методов). Тем не менее Perl не становится от этого типизированным языком.
Мы говорим о разных вещах. Я о языке, а вы о надстройке (тем более, что она работает в рантайме). Типизация должна быть реализована на уровне примитивов.

Это сообщение отредактировал(а) KSURi - 3.7.2009, 17:32


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
KSURi
Дата 15.7.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прошу прощения, я ошибся по поводу MooseX:smile (вернее будет сказать MooseX::Types) и проверки типов на этапе компиляции. На самом деле все делается в рантайме. Вобщем-то это только укрепило мое мнение).

UPD:
если совсем точно, то стоит упомянуть, что использование вообще не существующих типов все-таки ловится на этапе компиляции

Это сообщение отредактировал(а) KSURi - 16.7.2009, 12:33


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
gcc
Дата 25.9.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



KSURi, а eval не проверит на этапе компиляции?
eval выполняет код на этапе компиляции

если используется mod_perl на какой компиляции оно будет проверять? moose тоже грузиться в mod_perl в память, написано moose быстрее работает в режиме mod_perl потому что выполняется один раз...
PM WWW ICQ Skype GTalk Jabber   Вверх
Bulat
Дата 17.11.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


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

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



Не хочу вмешиваться в ваш спор, ибо для меня самый лучший перл - процедурный перл  smile 
Но не могу не вставить свои три копейки, собственно в пользу процедурного.... Я даже не буду уходить в инкапсуляцию и т.п. А пойду проще.. Вот я недавно сменил работу, на пердыдущей писал на процедурном перле и малость на ООП Java. Сейчас ООП Perl... Сталкиваюсь с подобным кодом

Код

...
for (my $step = $self -> spoken_fh -> spot_trouble( $self -> get_request_uid) ) {
    $step -> outgoing -> fire;
    ....
}
...


И почти весь проект состоит из подобного.. Хотя я конечно погорячился насчет ООП Perl'а. Стараюсь конечно держать себя в руках, ибо я человек новый в фирме, но иной раз так и хотса надавать некоторым по одному месту  smile 

И это далеко не в первый раз когда я вижу такое(т.е. не только в этой фирме). Лично я в теории тоже могу много порассказать и написать о том, что и как нужно писать и через какие инструменты языка реализовывать, но на практике не всегда все получается так как нужно.. И по объективным и по субъективным причинам. Поэтому мой принцип - делай проще... Умное процедурное программирование гораздо лучше глупого ООП.

Вот в том примере, в котором привел я - самое ужасное - что не понятно, что именно за объект должен был вернуться в $step.

Понимаете, если в Java мне приходится писать

Код

...
MyClass myClass = new MyClass();

....

NewMyClass newMyClass = myClass.getSomeWhere();
...


Дык вот, я четко знаю какой объект мне приходит, и могу с легкостью разобраться... А в перловом примере, мне сначала приходится искать то место, где в поле присвоили искомый объект $step, а это еще не факт, что легко и быстро... А потом еще разбираться и с методом, а он мож вообще "прародительский"  smile 
Хотя, меня как разработчика, проблемы с которыми я сталкиваюсь в перле при ОО стиле - не должны были бы интересовать...

Иногда, бывает иногда, я прибегаю к некоторым возможностям ОО стиля программируя на перле, но очень редко и только там где это необходимо, на мой взгляд...

Да и мое мнение, не важно процедурно или ОО, главное чтобы грамотно... но к сожалению, многие кто пытается писать на ОО стиле и выдает свой код за оный - далеки от этого, а вот писать на процедурном не многие стремятся.. не знаю, мож потому что типа "не модно"... Типа гнем пальцы и пишем на ООП.. А я видел очень хороший и грамотный код на процедурном стиле, не без изъянов конечно, но очень достойный.... не многие даж на процедурном смогут так писать. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 19.11.2009, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



предложите MVC Catalyst использовать

есть причины: иногда просят писать качественный код, а иногда не качественный можно, и можно специально так писать чтобы только то что тебе нравиться и на всех остальных забить, и даже комментарии к готовым программам не пишут (замечал такое), хотя может просто никто не просили писать комментарии...

и еще можно писать парадигму которая максим. подходит под данную программу...





Это сообщение отредактировал(а) gcc - 19.11.2009, 07:52
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 25.11.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Bulat @  17.11.2009,  22:56 Найти цитируемый пост)
Вот в том примере, в котором привел я - самое ужасное - что не понятно, что именно за объект должен был вернуться в $step.


Это полиморфизм. И это прекрасно. Это дает вам возможность писать абстрактные алгоритмы.
Тут необходимо уточнить два момента:
- в языках с динамической типизацией - это опасно, т.к. у вас нет гарантий что полученный "объект реализует нужный интерфейс"
- полиморфизм начинает помогать в Больших системах. Если программный комплекс не очень большой, или разбит на отдельные сервисы, то это просто усложняет код.



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


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

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


 




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


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

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