Visitor

15 views
Skip to first unread message

Dominik

unread,
Dec 5, 2011, 2:43:47 AM12/5/11
to warsz...@googlegroups.com
Witam, 

Piszę pracę inżynierska o wzorcu Odwiedzający i musze napisać własną implementajcę. Niestety nie mam pomysłu na żaden niebanalny problem do rozwiązania. Moglibyscie coś zaproponować?

Przydałoby mi się również gdybyście opowiedzieli o waszych doświadczeniach z tym wzorcem.

Pozdrawiam,
Dominik Wiernicki

Bartek Zdanowski

unread,
Dec 5, 2011, 2:49:20 AM12/5/11
to warsz...@googlegroups.com
Cześć.
Swoim postem ożywasz twór martwy. Ale to dobrze. Coś się zadzieje.

2011/12/5 Dominik <dmn...@gmail.com>

Witam, 

Piszę pracę inżynierska o wzorcu Odwiedzający i musze napisać własną implementajcę. Niestety nie mam pomysłu na żaden niebanalny problem do rozwiązania. Moglibyscie coś zaproponować?

Przydałoby mi się również gdybyście opowiedzieli o waszych doświadczeniach z tym wzorcem.
Ja swojego czasu pisałem parser ramek w usłudze-łączniku z Jabberem. Pracowałem w firmie, która miała mobilne terminale i dzięki temu co napisałem, były one podłączone do serwera Jabber (Openfire napisany w Javie).
Urządzenia łączyły się z serwerem komunikacyjnym na ustalonym porcie i wysyłały ramki binarne. Serwer był w C i zamieniał ramki na XMLa, aby było łatwo to w javie i w openfire przetrawić. Ramek było ok 20 rodzajów. 
Tyle słowem wstępu. Użyłem do tego Visitora, bo dzięki temu elegancko przetwarzało się ramki. Może taki pomysł, co?
 

Pozdrawiam,
Dominik Wiernicki




--
Pozdrawiam,
Bartek Zdanowski

Bloguję http://blog.bartekzdanowski.pl i twittuję http://twitter.com/bartekzdanowski
Confitura 2011 (dawniej Javarsovia) - http://confitura.pl
KO Warsjawa 2011 - http://warsjawa.pl

Łukasz Lenart

unread,
Dec 5, 2011, 3:27:56 AM12/5/11
to warsz...@googlegroups.com
Standardowy przykład to walidacja hierarchi obiektów w różnych
kontekstach. Czyli masz kilka klas A, B, C, D, ..., które tworzą rożne
hierarchie obiektów i w zależności od potrzeb przekazujesz różne
implementacji Visitora do walidacji czy klasa A ma pole xyz wypełnione
i w tym samym czasie pole abc o typie B ma pole yxz rózne od 0, i tak
dalej.


Pozdrawiam
--
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/
Warszawa JUG conference - Confitura http://confitura.pl/

Jacek Kiljański

unread,
Dec 5, 2011, 5:01:26 AM12/5/11
to warsz...@googlegroups.com
Hej.
Przejdź po rodzinie (drzewie genealogicznym) + psy koty itp.
Swoją drogą śmieszna nazwa, myślałem że jest wizytator :P

Pozdrawiam,
Jacek

W dniu 5 grudnia 2011 09:27 użytkownik Łukasz Lenart
<lukasz...@googlemail.com> napisał:

Dominik Wiernicki

unread,
Dec 5, 2011, 5:18:38 AM12/5/11
to warsz...@googlegroups.com
Dzięki za pomysły. Może wykorzystam wszystkie :) 

Co do nazwy to ja się spotkałem z trzema. 
"Wizytator" nie spotkałem jeszcze w książce, za to jest wymieniona w Wikipedii jako druga nazwa
"Odwiedzający" została użyta w "Inżynieria oprogramowania: Wzorce projektowe" więc mam do niej zaufanie :P
Zabawną nawę wymyślili  w "Wzorce projektowe. Rusz głową!" gdzie jest to po prostu "Gość"

Pozdrawiam,
Dominik

Michał Bartyzel

unread,
Dec 5, 2011, 6:39:19 AM12/5/11
to warsz...@googlegroups.com
biasowanie, ustawianie wag w sieci neuronowej :)

W dniu 2011-12-05 08:43, Dominik pisze:

Artur Gajowy

unread,
Dec 5, 2011, 7:21:39 AM12/5/11
to Warszawa Design Patterns Study Group
Tak jak Bartek wspomniał, implementacja protokołu sieciowego może być
dobrym 'pretekstem' do użycia tego wzorca: najpierw tworzysz komunikat
odpowiedniej klasy z przebrzydłej kupy bajtów (i tutaj switcha lub
kaskady if-ów, niestety, nie unikniesz...), a później obsługę
komunikatu opierasz o wzorzec Visitor (zwłaszcza, jeżeli np. ta
obsługa jest więcej-niż-jedno-etapowa - wtedy każdy etap może opierać
się o oddzielny Visitor). Czasem warto też pokusić się o klasę z
rodzaju DefaultVisitor, która dostarcza puste / rzucające wyjątek (w
zależności od potrzeb) metody specyfikujące zachowanie domyślne - np.
gdyby w którymś z etapów obsługiwane były tylko nieliczne komunikaty a
reszta ignorowana / niedopuszczalna, wtedy implementacje Visitora
dziedziczą z DefaultVisitor i przeciążają tylko istotne metody
(obsługują tylko wybrane komunikaty).

Inna opcja - Visitor w obsłudze struktury drzewiastej: interpreter
języka programowania, kompilator albo dowolna inna praca z AST
(Abstract Syntax Tree, drzewo składni abstrakcyjnej) - np. także
własny plugin / inspekcja do Intellij IDEA :) Jeżeli np. skusiłbyś się
na napisanie małego kompilatora/interpretera małego języka (polecam
np. jakiś podzbiór Lolcode [0] albo Javalette [1] - w zależności od
rodzaju poczucia humoru i ambicji), to z chęcią Ci pomogę. Napisanie
kompilatora produkującego bytecode jvm wcale nie jest trudne :)
(zrobiłem to w trakcie studiów ze 2 razy, pisałem także swój i kolegi
interpreter ;P). Za to na pewno nie jest trywialne ;)

Jeszcze inny przykład (także hierarchiczny) to obsługa niektórych
operacji na komponentach w Wiket-cie[3]. Zwróć uwagę na użycia [4]
interfejsu IVisitor [5]. Co prawda ichnia wersja Visitora jest trochę
inna (bogatsza) niż dyktuje sam wzorzec/Wikipedia/GoF, ale chyba samo
studium tej implementacji jest znacznie bardziej kształcące niż
pisanie własnej od zera (która jest już przecież w Wikipedii...). Z
ciekawszych rzeczy, jakie udało się Wicket-om wyabstrahować do
ichniego IVisitor i klas pochodnych dostarczonych z frameworkiem:
* typ zwracany wizyty
* kolejność przechodzenia (np DeepChildFirstVisitor)

Być może Twoja praca inżynierska mogłaby zawierać opis podstawowej
wersji wzorca, opis tego jak zrobili to w Wicket-cie i implementować
jakieś ciekawe operacje na komponentach w ramach jakiejś prostej (?)
web-aplikacji.

Pozdrawiam,
Artur

[0] http://lolcode.com/
[1] http://www.mimuw.edu.pl/~ben/Zajecia/Mrj/Javalette/javalette.html.bak
[3] http://wicket.apache.org
[4]
http://grepcode.com/search/usages?id=repo1.maven.org$mav...@org.apache.wicket$wicke...@1.5-RC3@org$apache$wicket$util$visit@IVisitor&type=type&k=u
[5] http://wicket.apache.org/apidocs/1.5/org/apache/wicket/util/visit/IVisitor.html

Dominik Wiernicki

unread,
Dec 5, 2011, 7:54:52 AM12/5/11
to warsz...@googlegroups.com
Dzięki. 
Brzmi fajnie i przyjże się temu jak wrócę do akademika, zwłaszcza Wicketom.
Reply all
Reply to author
Forward
0 new messages