|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/15366e3677197.html, оценка из 5, голосов 10
|