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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/371.32  14 Jun 2000  15:43:57
 To : alekseybb@mtu-net.ru
 Subject : Re: динамическое наследование
 -------------------------------------------------------------------------------- 
 
 >> Вообще говоря, в перле тебе никто не мешает сделать одного наследника Персоны
 >> на базе, скажем, hash reference, а другого - на базе scalar reference.
 amnr> Вот сразу видно человека с "верхним образованием" ;) Может это то, что
 amnr> мне надо, в смысле hash и scalar. Только мне надо не наследников
 amnr> развести, а саму процедуру наследования. Чтобы в одном случае, при
 amnr> создании Персоны с признаками мальчика, получался мальчик, а в другом
 amnr> случае, при создании с признаками девочки - девочка. А обращался бы я к
 amnr> ним, как просто Персона::Пить, и "пила" бы она, как было указано при
 amnr> создании.
 
 Так в ОО не делают. В ОО обращаются Маша->пить. А уже ОО движок разбирается,
 какой вариант метода пить тут подходит.
 
 >> Сформулируй ещё раз, что ты хотел сказать.
 
 amnr> Вот сам себя цитирую:
 ab>> Да, жаль что абстракция с мальчиками и девочками не покатила. Hе
 ab>> хотелось никого впутывать в проблемы предметной области. Объяснюсь по
 ab>> другому. Есть почтовый ящик ;))) Расположенный на удаленном
 ab>> POP3-сервере. И есть такой-же ящик в директории на локальном диске. И с
 ab>> тем и с другим ящиком используются одинаковые команды: Создать, прочесть
 ab>> число писем и их размеры, прочесть заголовок письма N, прочесть
 ab>> содержимое письма N, пометить письмо на удаление, отключиться. Вы же
 ab>> понимаете, что внутри два эти класса реализованы совершенно по-разному.
 ab>> Hо для вызывающей программы все выглядит идентично. Все методы имеют
 ab>> одинаковые имена и возвращают одинаковые данные.
 
 amnr> Вот и вопрос, а нельзя ли их объединить в один класс на основании
 amnr> схожести внешнего интерфейса? Т.е. если при создании задаем параметры
 amnr> POP3 создается POP3, а если Maildir - Maildir. А клиент, использующий
 amnr> класс, этого не видит. И не чувствует, т.к. он использует методы on,
 amnr> off, head, body и delete , которые работают и сообщают ему все в одной и
 amnr> той же форме, независимо от типа почтового ящика.
 
 Можно. В методе new, разобравшись в параметре, сказать require
 соответствующему модулю-наследнику, и позвать его new. Если у них есть таки
 что-то в общей инициализации, это выносится в другую функцию. Методы, в
 отличие от компилируемых языков, можно не определять в родителе (как они там в
 C++ называются, pure virtual?), если они ничего не делают. Если ему есть что
 делать, можно определить.
 
 -- 
 Счастливо!
   Ран.
 --- ifmail v.2.14.os-p7-tma3
  * Origin: MemoNet (2:5020/371.32@fidonet)
 
 

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

 Тема:    Автор:    Дата:  
 Re: динамическое наследование   Artem Chuprina   14 Jun 2000 15:43:57 
Архивное /ru.perl/34739e26cbe6.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional