|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Oleg A. Paraschenko 2:5020/400 06 Jun 2000 21:07:28 To : All Subject : Re: динамическое наследование --------------------------------------------------------------------------------
Привет!
Aleksey Barabanov <alekseybb@mtu-net.ru> wrote in message
news:393CE4C0.2F46FBE3@mtu-net.ru...
> "Oleg A. Paraschenko" wrote:
> >
> [...много чего умного покоцано...]
> Да, жаль что абстракция с мальчиками и девочками не покатила. Hе
> хотелось никого впутывать в проблемы предметной области. Объяснюсь по
> другому. Есть почтовый ящик ;))) Расположенный на удаленном
> POP3-сервере. И есть такой-же ящик в директории на локальном диске. И с
> тем и с другим ящиком используются одинаковые команды: Создать, прочесть
> число писем и их размеры, прочесть заголовок письма N, прочесть
> содержимое письма N, пометить письмо на удаление, отключиться. Вы же
> понимаете, что внутри два эти класса реализованы совершенно по-разному.
> Hо для вызывающей программы все выглядит идентично. Все методы имеют
> одинаковые имена и возвращают одинаковые данные.
В данном случае неважно - мальчики, девочки или pop3, imap, mbox. Программа
должна работать с почтовым ящиком, а не с POP3-ящиком или IMAP-ящиком или
mbox-ящиком. Для этого Вам как-то требуется ввести объект "почтовый ящик", а
также уточнить это понятие для "pop3" и "mbox" ("imap" under construction
:-)). Исходный вопрос был: будут ли подводные камни при уточнении с помощью
@ISA. Ответ оказался утвердительным (все плохо). Моя версия - уточнение с
помощью наследования ("pop3" extends "ящик", "mbox" extends "ящик") - всего
лишь то, как бы это делал я. Как это делать правильно, может сказать только
мастер ООП.
>
> Эта ситуация не беда. Собственно все прекрасно работает. Hо вот возникла
> мысль, изгольнуться покруче и использовать тот факт, что два совершенно
> разных класса имеют одинаковый интерфейс для порождения класса
> соединяющего их схожие черты.
Создатели Java, видимо, тоже с этим сталкивались. Даже слово похожее
использовали:
interface почтовый_ящик {
int число_сообщений ();
...
}
class pop3 implements почтовый_ящик {
int число_сообщений () {
...
}
}
Специально для случая, когда классы не имеют ничего общего, кроме своего
назначения. В Перле слова 'interface' нет. Hо оно без проблем заменяется еще
одной записью в @ISA.
> Сделать просто класс, использующий их в
> основе, а в одноименных методах производящий ветвление это пошло.
Если есть ветвление по типу объекта - это ошибка. Все надо срочно
перепроектировать.
> Это язык Ц. Я уже написал программищу 70 кило текста на Perl на языке Ц.
> Теперь стоит задача переписать все с Perl/C на Perl/Perl.
>
> --
> Aleksey Barabanov <alekseybb@mtu-net.ru>
--- ifmail v.2.15dev5
* Origin: St.Petersburg University (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65786cb54d89.html, оценка из 5, голосов 10
|