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