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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Учусь ООП. Как лучше запроектировать класс? 
:(
    Опции темы
ginnie
Дата 20.3.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



AndreyCH, "бросилось в глаза", не значит, что "все плохо"  smile Код правильный, но я бы написал его так:

Код

sub new {
    my $classname = shift;
    my $self = {
        TAGNAME => 'RootXML',
        SUBXML  => [],
    };
    bless( $self, $classname );
    return $self;
}





--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
AndreyCH
Дата 20.3.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



gcc, сначала о предложенном коде... Я правда не очень понял зачем делать именно так... Хэш я не использую потому что на одном "уровне" может присутствовать n одинаковых тэгов.
Отвечу про С++ и Java. Они ни сложнее ни проще. Они другие. smile Хотя бы то, что Перл - язык с динамической типизацией и "скриптовый". А гибкость интерфейса? А TMTOWTDI? smile Потому крышу-то и сносит! 
ginnie, да я в общем-то так и понял. smile Наглядность и правда лучше.
Напишу до конца что хотел сдалать и выложу сюда на критику. Может еще что подправить нужно?
PM   Вверх
KSURi
Дата 20.3.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(gcc @  20.3.2009,  03:40 Найти цитируемый пост)
ну так и что из этого "что он для того, чтобы избавиться от написания однообразных методов типа"? 

Совершенно бессмысленный вопрос. Не вижу смысла продолжать в данном топике.


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


Новичок



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

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



Народ, с вашего позволения задам еще пару вопросов!

Код

my $pr0 = $MyClass0->new();
my $pr1 = $MyClass1->new();

my @arr = [];
$arr[0] = $pr0;
$arr[1] = $pr1; 



Так вот тут мы видим пару классов (объектов). Как мне последовательно перебирая массив понимать объект какого типа сейчас в этой ячейке?
Хотелось бы услышать Ваши варианты решения (свое решение не привожу, дабы не подталкивать...) smile

Это сообщение отредактировал(а) AndreyCH - 3.4.2009, 15:39
PM   Вверх
gcc
Дата 3.4.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(AndreyCH @ 3.4.2009,  15:39)
 Как мне последовательно перебирая массив понимать объект какого типа сейчас в этой ячейке?

http://search.cpan.org/~gbarr/Scalar-List-.../Scalar/Util.pm

reftype EXPR

Добавлено через 2 минуты и 32 секунды
Код

f (ref($z) eq 'ARRAY')
                        {
        #print "z-ARRAY ref!\n";
                        push @b, 0; push @b, 'a';
                        }
                elsif (ref($z) eq 'HASH')
                        {
                        push @b, 0; push @b, 'h';
        #print "z-HASH ref!\n";
                        }
                elsif (ref($z) eq 'REF' || ref($z) eq 'SCALAR')
                        {
                        push @b, 0; push @b, 's';
        #print "z-SCALAR ref!\n";
                        }
                #if (ref($z) eq 'SCALAR') {push @b, 0; push @b, 'a';}

                }

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


Опытный
**


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

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



Цитата(AndreyCH @  3.4.2009,  15:39 Найти цитируемый пост)
my @arr = [];

Не по теме, но все же) Должно быть (), иначе у вас получается массив из одного элемента - ссылки на другой анонимный массив.

Вы хотите узнать именно структуру какого типа передавали в bless? Или все-таки просто имя класса объекта?
Если первое, то gcc ответил уже, а если второе (что, имхо, более вероятно), то perldoc -f ref


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


Новичок



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

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



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


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

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


 




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


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

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