Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Dennis Krupenik                      2:5020/400     12 May 2003  16:06:51
 To : All
 Subject : Архитектура классов
 -------------------------------------------------------------------------------- 
 
 Доброго времени суток, All!
 
 Есть следующая проблема.
 Имеется некий (абстрактный!) класс-родитель Р. Есть его некая реализация
 (потомок) Р::Р1.
 Имеется некий потомок класса Р П. Есть некая его реализация (потомок)
 П::П1, которая наследует Р::Р1.
 Примерно вот так:
 П-------->Р
 ^         ^
 |         |
 |         |
 |         |
 |         |
 П1------->Р1
 
 или:
 
 package P;
 
 package P::P1;
 use base qw (P);
 
 package П;
 use base qw (P);
 
 package П::П1;
 use base qw (П P::Р1);
 
 Идея в том, чтобы родители (П1,П2,Пn) определяли контракты (интерфейсы)
 классов, а их потомки-реализации определяли конкретные методы (проверку,
 сериализацию, хранение и т.п.) и чтобы это все было независимо и
 максимально унифицировано.
 
 Возникает проблема с наследованием методов.
 В некоем методе П::П1::method есть строка
 
 $self->SUPER::method;
 
 Т.е. метод должен найтись или в П, или в Р::Р1. Метод находится в Р::Р1,
 но там тоже есть строка
 
 $self->SUPER::method;
 
 т.е. я имел в виду, что искать метод надо в Р. Hо только ничего не
 ищется, а выдается строка, что мол метод в пакете не найден. Сначала я
 думал, что из-за того, что $self приписана к П::П1, оно должно
 зациклиться:
 
 П::П1<------------------
   |                     ^
 SUPER                   |
   |                     |
 Р::Р1                   |
   |                     |
 SUPER(П::П1::SUPER!!!)  |
   |                     |
    -------------------->
 
 но не циклится, выдает ошибку.
 Что делать и кто виноват? (с)
 
 Под абстрактным классом понимается такой класс, который определяет
 контракт (интерфейс) класса, но вызовы всех методов возвращают успешный
 код.
 Коды возврата определены в другом классе и экспортируются.
 
 --
 Денис Крупеник.
 dennis[at]krupenik.com
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Архитектура классов   Dennis Krupenik   12 May 2003 16:06:51 
Архивное /ru.perl/15366e3677197.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional