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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модули, объекты, классы и т.п. 
:(
    Опции темы
kostofffan
Дата 18.7.2004, 01:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Объясните пожалуйста множественное наследование и как им пользоваться.
Объясните смысл строк:
Код
my $proto = shift;
my $class = ref($proto) || $proto;

(Это создание нового объекта).
И зачем нужны массивы @EXPORTER_OK и @EXPORTER и различие между ними?
Заранее спасибо.
  Вверх
korob2001
Дата 19.7.2004, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Объясните пожалуйста множественное наследование и как им пользоваться.

Слишком пространственно, найди учебник по ООП.
Но принцип такой: Один класс может наследовать методы другого класса.
Допустим в следующем примере класс Horse становится подклассом Critter ( @ISA объявляем через our, а не через my, так как он должен быть переменной пакета, а не лексической переменной.
Код

package Horse;
our @ISA  = "Critter";

Допустим что в $steed находится объект Horse, и ты вызываешь с ним метод move:
Код

$steed->move(10);

Поскольку $steed яляется объектом Horse, Perl сначала ищет для этого метода подпрограмму Horse::move. Если такой не найден, то Perl обращается к массиву @Horse::ISA, который отправляет его в пакет Critter в поисках Critter::move. Если и эта подпрограмма не найдена, то и в нём начинается поиск имени пакета предка, который могбы предоставить метод move(), и так будет продолжаться движение по иерархии наследования до достижения пакета в котором нет @ISA.
PS: ( Пример и книги "Программирование на Perl" ).

Цитата

Объясните смысл строк:

my $proto = shift;
my $class = ref($proto) || $proto;

Это часть конструктора.
В строке 1 переменной $proto присваивается значение из массива @_.
В строке 2 переменной $class присваиваем значение объекта или имя класса, эту строку можно было записать так:
Код

my $class;
if ( ref( $proto ) ) {       # Если $proto является объектом
    $class = ref( $proto ); # Присваиваем этот объект переменной $class
} else {
    $class = $proto;
}

Вот пример работающего конструктора:
Код

sub new {
     my $proto = shift; # Получили переданный параметр
     my $class = ref($proto) || $proto;
     my $self = {};      # Переменной $self присваиваем ссылку на анонимный хэш.
     bless( $self, $class ); # Посвящаем $self к объекту или классу.
     return $self;
}

Цитата
И зачем нужны массивы @EXPORTER_OK и @EXPORTER и различие между ними?

Эти массивы нужны при создании модулей, для экспортирования функций в пространство имён программы которая вызвала данный модуль обычно это main.

PS: Задавай в 1 топике, 1 вопрос. Иначе модераторы будут иметь не довольный вид. ;)

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
kostofffan
Дата 19.7.2004, 23:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











korob2001 , спасибо. Я примерно понял smile.gif. А за совет на счет топика тоже спасибо...

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


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

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


 




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


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

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