Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Вниз

Вопрос для Cyraxa. Как модифицировать GOF паттерн Visitor   Найти похожие ветки 

 
oxffff ©   (2006-12-12 22:56) [0]

Cyrax
Специально для вас

Как модифицировать "GOF паттерн" Visitor для расширения состава "посейщаемых объектов" приминительно к Delphi


 
Джо ©   (2006-12-12 22:59) [1]

> состава "посейщаемых объектов"

И что ви такое гойворите? :D


 
oxffff ©   (2006-12-12 22:59) [2]

Естественно расширение "Посетителя" должно происходить динамически.


 
oxffff ©   (2006-12-12 23:01) [3]


> Джо ©   (12.12.06 22:59) [1]
> > состава "посейщаемых объектов"
>
> И что ви такое гойворите? :D


А что вас не устраивает?


 
Kostafey ©   (2006-12-12 23:03) [4]

> Джо ©   (12.12.06 22:59)

Вот какой смысл было меня расспрашивать по поводу
http://delphimaster.net/view/2-1165941009/
Все равно ни от кого ответа не дождался.
Вы -то не подскажете ?


 
Vovan#2   (2006-12-12 23:05) [5]

Удалено модератором


 
oxffff ©   (2006-12-12 23:06) [6]

Удалено модератором


 
Vovan#2   (2006-12-12 23:07) [7]

Удалено модератором


 
Kolan ©   (2006-12-12 23:08) [8]

> для расширения состава "посейщаемых объектов

не понял что нужно сделать. Можно подробнее. Интересно просто...


 
oxffff ©   (2006-12-12 23:08) [9]

:)

ОК. ОК. Только сейчас прочитал.

Ну естественно "посещаемых". Пардон.

Джо прав.


 
oxffff ©   (2006-12-12 23:12) [10]

У нас есть объект разнообразных типов.
Есть посетитель.

Мы хотим добавить разновидности объектов причем старые "посетители" их игнорируют.
А новые посетители обрабатывают.
Без перекомпиляции.


 
oxffff ©   (2006-12-12 23:18) [11]

Я то собственно ответ знаю.

Поэтому было бы посмотреть на другие варианты решения задачи.

И возможно реализовать VisitorEx для удобства всех.


 
Kolan ©   (2006-12-12 23:18) [12]

> Без перекомпиляции.

Дмаю без этого не обойдется :)

> Мы хотим добавить разновидности объектов причем старые "посетители"
> их игнорируют.

Так а пытаться отвечать можно? Или ждать Cyrax?


 
Джо ©   (2006-12-12 23:20) [13]

> [4] Kostafey ©   (12.12.06 23:03)
> > Джо ©   (12.12.06 22:59)
>
> Вот какой смысл было меня расспрашивать по поводу
> http://delphimaster.net/view/2-1165941009/

Смысл в том, что изначальный вопрос задан был некорректно.


> Все равно ни от кого ответа не дождался.
> Вы -то не подскажете ?

Вот сижу я перед монитором и думаю, когда Костафей наконец описание проблемы даст. Прям отойти никуда не могу и все жду и жду...


 
oxffff ©   (2006-12-12 23:25) [14]


> Kolan ©   (12.12.06 23:18) [12]
> > Без перекомпиляции.
>
> Дмаю без этого не обойдется :)
>
> > Мы хотим добавить разновидности объектов причем старые
> "посетители"
> > их игнорируют.
>
> Так а пытаться отвечать можно? Или ждать Cyrax?


А он ответит? Или вопросы задавать будет?

Вопрос(Проблема) всем понятен?


 
Gero ©   (2006-12-12 23:25) [15]

> [0] oxffff ©   (12.12.06 22:56)

Для личной переписки есть почта, ICQ и другие средства.


 
Kolan ©   (2006-12-12 23:25) [16]

Мы хотим добавить разновидности объектов причем старые "посетители" их игнорируют.
А новые посетители обрабатывают.
Без перекомпиляции.

И так дано:

 TConcreteElement = class;

 IVisitor = interface;

 IElement = interface
   procedure Accept(AVisitor :IVisitor);
 end;

 IVisitor = interface
   procedure VisitTConcreteElement(AElement :TConcreteElement);
 end;

 TConcreteVisitor = class(TInterfacedObject, IVisitor)
 public
   procedure VisitTConcreteElement(AElement :TConcreteElement);
 end;

 TConcreteElement = class(TInterfacedObject, IElement)
 public
   procedure Accept(AVisitor :IVisitor);
 end;


Добавляем новый объект.
 TNewElement = class(TInterfacedObject, IElement)
 public
   procedure Accept(AVisitor :IVisitor);
 end;

Дальше незнаю  - сдаюсь :(


 
Kostafey ©   (2006-12-12 23:26) [17]

> Смысл в том, что изначальный вопрос задан был некорректно.

OK ! А сейчас я исправился ?


 
Kostafey ©   (2006-12-12 23:29) [18]

> [13] Джо ©   (12.12.06 23:20)

Да я просто немного поэкспериметировал тут, всяко разно, память помучил.
После такого всякого на флуд потянет.


 
oxffff ©   (2006-12-12 23:31) [19]

Есть посетитель

ObjectAbstractVisitor=class
protected
procedure AbstractContainer(obj:TAbstractContainer);
public
procedure AbstractObject(obj:TAbstractObject);virtual;
procedure Container(obj:TContainer);virtual;
procedure SomeType1(obj:TSomeType1);virtual;
procedure SomeType2(obj:TSomeType2);virtual;
procedure SomeType3(obj:TSomeType3);virtual;
procedure SomeType4(obj:TSomeType4);virtual;
end;

Есть объект

TSomeBaseclass=class
procedure accept(visitor:ObjectAbstractVisitor)
end;

Надо модифицировать "GOF паттерн" visitor таким образом,
чтобы можно было добавлять TSomeType5,TSomeType6,TSomeType7,..
Да так чтобы старые посетители работали только с им известными объектами (старыми типами), а новые посетители работали со всеми.

И все это без перекомпиляции.


 
Kolan ©   (2006-12-12 23:35) [20]

Удалено модератором


 
Cyrax ©   (2006-12-12 23:38) [21]

>oxffff ©   (12.12.06 22:56)  

Ну, вот это другое дело... а то один флуд...
К какому сроку тебе предоставить ответ ?


 
oxffff ©   (2006-12-12 23:41) [22]

Собственно не ответ.
А совместный труд.
Который можно реализовать и использовать всем.

Аля GOD (GAND OF DELHI).

Ведь наверняка кто то сталкивался с такимим трудностями и хотел бы решить. А тут готовые подходы, да еще и Ex


 
Marser ©   (2006-12-12 23:42) [23]

Удалено модератором


 
oxffff ©   (2006-12-12 23:42) [24]

Аля GOD (GAND OF DELPHI). опять опечатался.


 
oxffff ©   (2006-12-12 23:46) [25]

Да что такое

Аля GOD (GANG OF DELPHI).

Опять. опять опечатался.

Боюсь, а то ДЖО наругает. И будет прав кстати.


 
oxffff ©   (2006-12-12 23:49) [26]


> Marser ©   (12.12.06 23:42) [23]
> > [1] Джо ©   (12.12.06 22:59)
> > > состава "посейщаемых объектов"
> >
> > И что ви такое гойворите? :D
>
> И не что, а шё :-)


Человек ошибся.
Ты бы лучше подкинул вариант. Или настолько умный, что не до нас.
Я уже написал, что опечатался.


 
Marser ©   (2006-12-13 00:15) [27]

Удалено модератором


 
Суслик ©   (2006-12-13 00:45) [28]

Сделать расширяемый состав посещаемых объектов можно только если ты сделаешь *своих* посредников, знающих как посещать объект, который ранее не предполагался для посещения. т.е. что-то типа прокси+визитор.


 
oxffff ©   (2006-12-13 00:52) [29]


> Суслик ©   (13.12.06 00:45) [28]
> Сделать расширяемый состав посещаемых объектов можно только
> если ты сделаешь *своих* посредников, знающих как посещать
> объект, который ранее не предполагался для посещения. т.
> е. что-то типа прокси+визитор.


Кстати никто не мешает переделать вообще схему взаимодействия.
Варианты есть, я лично знаю 3.


 
oxffff ©   (2006-12-13 00:57) [30]

Намекну.
Поскольку типы объектов добавляются динамически, расширяя количество типов. То и схему взаимодействия надо менять.
Основываясь не на статической привязки к смещению в VTB.
А на чем то более динамическом.

Основная идея паттерна, "мы не опрашиваем объект, а он сам говорит кто он"

Один из вариантов.
А почему бы не использовать dynamic методы.


 
oxffff ©   (2006-12-13 01:02) [31]

То есть диспетчеризация происходит динамически.


 
Суслик ©   (2006-12-13 01:04) [32]


> oxffff ©   (13.12.06 00:57) [30]
> Намекну.

если честно, то не интересно, ибо задача лишена промышленной ценности (для меня).


 
Kolan ©   (2006-12-13 08:57) [33]

Интересно. А как разнести посетителя и элемент по модулям? Corcular unit refrence получается...


 
isasa ©   (2006-12-13 10:33) [34]

Kolan ©   (13.12.06 08:57) [33]
А COM-ом это животное не пробовали?


 
Kolan ©   (2006-12-13 10:46) [35]

> А COM-ом это животное не пробовали?

Нет. Пока я не пойму как сделать так чтобы паттерны был в разных модулях. А то так выходит все посещаемые классы должны быть в одном модул....


 
Kolan ©   (2006-12-14 10:24) [36]

Ну как всегда, не ответа на вопрос. Ни решения. :(


 
ЮЮ ©   (2006-12-14 10:41) [37]

Что значит работали с новым типом TSomeType5?

ещё один метод
procedure SomeType5(obj:TSomeType5);virtual; ? это, по твоему работа?
О обычное наследование разве не решает этих проблем.

а это вообще кошмар с точки зрения высшей степени абстракции :)
procedure SomeType1(obj:TSomeType1);virtual;
procedure SomeType2(obj:TSomeType2);virtual;
procedure SomeType3(obj:TSomeType3);virtual;
procedure SomeType4(obj:TSomeType4);virtual;


Нет ли ссылки на человеческое описание "GOF паттерн Visitor", а то ни смысла, ни проблемы не вижу :(


 
oxffff ©   (2006-12-14 11:16) [38]


> Kolan ©   (14.12.06 10:24) [36]
> Ну как всегда, не ответа на вопрос. Ни решения. :(


См. посты выше.В них есть намеки на решения.
Что касаемо контретной реализации, то я хотел написал статью по этому поводу" , но в силу обстоятельств сделать это сейчас не могу.


> ЮЮ ©   (14.12.06 10:41) [37]
> Что значит работали с новым типом TSomeType5?
>
> ещё один метод
> procedure SomeType5(obj:TSomeType5);virtual; ? это, по твоему
> работа?
> О обычное наследование разве не решает этих проблем.
>
> а это вообще кошмар с точки зрения высшей степени абстракции
> :)
> procedure SomeType1(obj:TSomeType1);virtual;
> procedure SomeType2(obj:TSomeType2);virtual;
> procedure SomeType3(obj:TSomeType3);virtual;
> procedure SomeType4(obj:TSomeType4);virtual;
>
> Нет ли ссылки на человеческое описание "GOF паттерн Visitor",
>  а то ни смысла, ни проблемы не вижу :(


Возможно вам стоит обратить внимание на книгу "Банды четерых"

"Приемы объектно-ориентированного проектирования. Паттерны проектирования"

Гамма, Хелм, Джонсон, Влиссидес.

Хотя все примеры этой книги написаны на С++.
Поэтому при портирования их на Delphi(язык, почему теперь его так стали называть? Всегда был OP), часть их них использовать не имеет смысла.
А часть можно(нужно) модифицировать для более расширенного использования.
Простой пример "фабрика классов". Есть встроенное решение в Delphi - метаклассы (class of).


 
Kolan ©   (2006-12-14 11:32) [39]

> язык, почему теперь его так стали называть? Всегда был OP

Ты что, с 7 версии так.


> Хотя все примеры этой книги написаны на С++.

В BDS все они поддерживаются. [16] - я не руками написал.


 
oxffff ©   (2006-12-14 11:53) [40]


> ЮЮ ©   (14.12.06 10:41) [37]
> Что значит работали с новым типом TSomeType5?
>
> ещё один метод
> procedure SomeType5(obj:TSomeType5);virtual; ? это, по твоему
> работа?
> О обычное наследование разве не решает этих проблем.
>
> а это вообще кошмар с точки зрения высшей степени абстракции
> :)
> procedure SomeType1(obj:TSomeType1);virtual;
> procedure SomeType2(obj:TSomeType2);virtual;
> procedure SomeType3(obj:TSomeType3);virtual;
> procedure SomeType4(obj:TSomeType4);virtual;
>
> Нет ли ссылки на человеческое описание "GOF паттерн Visitor",
>  а то ни смысла, ни проблемы не вижу :(


У нас есть объект разнообразных типов.
Есть посетитель.
Мы хотим добавить разновидности объектов причем старые "посетители" их игнорируют.
А новые посетители обрабатывают.
Без перекомпиляции.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.009 c
3-1161595475
Juice
2006-10-23 13:24
2007.01.07
Формат в TSQLTimeStampField


1-1163596997
Vitebsky
2006-11-15 16:23
2007.01.07
строка ввода, в которой можно писать разными цветами и шрифтами


2-1166205215
Tupoy
2006-12-15 20:53
2007.01.07
OnKeyPres. подскажите пример


6-1155156432
IrkaShkirka252
2006-08-10 00:47
2007.01.07
Включить программно роутинг


1-1163593548
Vlad Oshin
2006-11-15 15:25
2007.01.07
Как достучаться до записей аудита?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский