Wielokrotnie obsługujemy w aplikacji pewnien rodzaj interakcji z klientem, która polega na serii kroków (ekranów), których wykonanie nie jest możliwe bez wykonania wcześniejszych. Takim przykładem jest sprawdzian - wydarzenie, które przechodziliśmy niejednokrotnie. Wchodzimy na sprawdzian (rejestracja), otrzymujemy zestaw pytań, aby odpowiedzieć na nie kolejno, aby na zakończenie oddać nasze wypociny i z niecierpliwością oczekiwać wyniku. Jest to nic innego jak przykład przepływu - akcja jest wejściem dla kolejnej i wykonanie "wewnętrznych" akcji nie jest dozwolone.
Diagram stanowy w UML jest idealny w takiej sytuacji. Jedynym problemem jest wskazanie tego właściwego bytu, którego stan monitorujemy i w tym przypadku może nim być po prostu sprawdzian, którego "egzemplarz" konstruujemy dla każdego z uczestników (analogicznie do zależności między klasą a jej egzemplarzem - instancją). Zazwyczaj postrzegamy świat obiektowo, ale interakcje między nimi już imperatywnie (chyba w dobrym kontekście użyłem tego słowa nawiązując do sposobu programowania - krok po kroku proceduralnie). Stąd tyle trudności w znalezieniu się w sposobie programowania z językami funkcyjnymi czy modelowaniu z użyciem diagramu stanów zamiast powszechnego diagramu przepływów. Z użyciem diagramu stanów mogłoby to wyglądać tak:
Teraz wygląda to znacznie lepiej niż przy pierwszym podejściu. Chciałem, aby diagram był jasny, zaraz po pierwszym spojrzeniu na niego. Czuję, że jestem bliżej ideału.
Jak niektórzy zauważyli korzystam z Visual Paradigm for UML CE. Pisałem o moich próbach z UMLowym diagramem stanów w Pierwsze (krótkie) doświadczenie z Eclipse UML2 Tools - idzie do kosza i za namową Krzyśka Kowalczyka oraz Radka Szulgo vel dayt3k (w komentarzach do wspomnianego wpisu) postanowiłem sprawić jego możliwości. Po pierwszych kilku godzinach mogę śmiało polecić to narzędzie, aby popróbowąć się z UMLem. Interfejs jest intuicyjny, a liczba diagramów jest wystarczająca, aby sobie pomodelować. Nie jest to narzędzie-marzenie, ale dla początkujących (jak ja) może być.
Wciąż zastanawiam się, jak to zrobić bardziej profesjonalnie, gdzie mam przemyślane, co, gdzie, kiedy i dlaczego. Najpierw odsiedziałem swoje przy diagramie i sądzę, że w tej postaciu wyraża co autor miał na myśli. Zabieram się za implementację w Grails (chyba nikt nie przypuszczał, że mu odpuściłem?! :)). Znalazłem w ten sposób sytuację, w której mogę wykorzystać mechanizm Grails Web Flow, który jest zbudowany w oparciu o Spring Web Flow (tak na prawdę jest jego DSLem). Dobrym źródłem informacji jak to jest zrealizowane w Grails jest bez wątpienia rozdział 6.5 Web Flow. Po tym powinno być jasne, co możemy, a czego nie w Grails w obsłudze tego typu scenariuszy.
Wydawałoby się, że mogę wracać do Grails, ale pojawił się ping od Piotra Przybylaka. Fajna sprawa, że można za pomocą bloga dotrzeć do ciekawych ludków. Po tym, kiedy opublikowałem mój wyjazd do Łodzi - OT: Białowieża nie tak daleko, jadę do Łodzi i o przyzwyczajeniach słów kilka - napisał do mnie:
Piotr: hej, jesteś w Łodzi teraz ? Ja się chętnie spotkam i pogadam o tych wszystkich trudnych słowach które wspomniałeś na blogu ;>
Intrygujące, co?! Nie było na co czekać, o 20:00 spotkaliśmy się idąc na Piotrkowską. Okazało się, że Piotr jest takim znawcą Łodzi, że w zasadzie ja - gaduła nad gadułami - powiedziałem mniej niż najbardziej cicha osoba, jaką możecie sobie wyobrazić :) W ten sposób, dowiedziałem się tylu ciekawych rzeczy o historii Piotrkowskiej, Łodzi i całego klimatu informatycznego, że postanowiłem przy najbliższej okazji pojawić się w Łodzi ponownie. Byliśmy przez chwilę w fajnej knajpce Łódź Kaliska, a dzień wcześniej z żoną byłem w Manufakturze. Miejsca, których nie można nie odwiedzić będąc w Łodzi. Jest w niej tyle ciekawych miejsc, że mam wrażenie, że brakuje tam jedynie prężniejszej grupy JUGowej. I właśnie to jest celem Piotra - rozruszać lokalną społeczność i ponownie zainicjować serię spotkań jugowych. Zainteresowani? Kiedyś spotkałem się z Adrianem Nowakiem z krakowskiego JUGa, który pokazał mi, jak poprowadzić temat i zorganizować konferencję, nie jedną, ale kilka. W ten sposób mamy Javarsovię, Warsjavę, Warszawski Eclipse DemoCamp i wizyty osób z zagranicy, które nie byłyby możliwe bez aktywnego wsparcia wielu osób z Warszawa JUG. Tego samego możnaby również oczekiwać od innych JUGów, w tym i łódzkiego. Koniecznie piszcie do niego, bo jeśli nie on, to pewnie niewielu będzie miało tyle zapału, aby tego dokonać. Widać, że się zawziął i ma szansę coś większego zrobić. Niektórzy twierdzą, że to bliskość Warszawy powoduje, że ludzie zwracają głowy w tym kierunku, zamiast zająć się tym, co można zrobić lokalnie. W Łodzi jest wspaniały klimat i nie widzę powodów, dla którego nie możnaby zorganizować następnego Eclipse DemoCamp lub mniejszego kalibru konferencję, aby ostatecznie rozruszać towarzystwo łódzkie. Jeśli w Warszawie się dało, w Krakowie, Wrocławiu, Lublinie, Gdańsku, Szczecinie, Tarnowie, Silesii, Gdańsku czy Poznaniu, to dlaczego nie wskazać na Piotra jako tego, który tchnie życie w łódzki JUG?! Zdecydowanie potrzeba tego temu miastu i ludziom, którzy oparli się pokusie migracji do Warszawy (czego nie mogę powiedzieć o sobie).
Tak się skończyła moja wizyta w Łodzi. Podziękowania dla Piotra za spotkanie, że mu się w ogóle chciało. Niewiele trzeba było, a efekt może być zaskakujący. Dla mnie kolejna wizyta na Piotrkowskiej będzie z głową wyżej niż sklepowe witryny - to właśnie tam jest wiele ciekawych rzeźb, herbów i innych atrakcji. Warto!
W jednym z wpisów - Javarsovia 2009 scaliła (spoiła?) polską społeczność javową - wspomniałem o Sławku Sobótce z Lublin JUG. Sławek Sobótka napisał do mnie o swojej inicjatywie, a tam maluczki peesik:
ps: czekam na slowa krytyki (to najlepszy feedback) odnosnie stronki - krytyka absolutnie nie musi byc konstruktywna:)
Chętni wyrazić swoją opinię proszeni są o kontakt ze Sławkiem. Kto jak kto, ale lubelski Sławek nie jeden raz udowodnił, że zależy mu na wzmocnieniu polskiej społeczności javowej, więc należy mu się sukces w branży. Niewielka reklama na moim blogu jest moim skromnym podziękowaniem za jego przemyślenia architektoniczne na blogu Holistyczna inżynieria oprogramowania. Nie mam wątpliwości, że wszyscy już tam zaglądacie regularnie, a gdyby nie, teraz już powinniście. Już nie przyjmuję wymówek w stylu "Nie wiedziałem", "Nie mam adresu" i takie tam. Polecam!
A dla zainteresowanych spotkaniem ze znanymi osobistościami świata Javy zapraszam na JDD Road Show. Pisała o tym Ania na jdn.pl - Zapraszamy na JDD Road Show do Krakowa i Warszawy, więc nie będę powtarzał. Na MIMUWie jest wszystko dograne - jest sala i rzutnik. Jak to zostanie wykorzystane nie mam pojęcia. Mnie nie będzie, bo wybieram się na 2-tygodniowy urlop, ale Ci, którzy nie mają tyle szczęścia i wciąż spędzają lato przed kompem powinni skorzystać z nadarzającej się okazji spotkania.
p.s. Właśnie odkryłem, że można uruchomić takie stare gierki dosowe na DOSBoxie. Pamiętam czasy Prehistorika czy Boulder Dash (a nawet Caveman Ugh, Lemmings czy Titus the Fox) i widać, że mimo upływu czasu wciąż są w ruchu. Wystarczy pobrać Prehistorika z Best Old Games i DOSBox. Próbowałem i działa. Agata się ucieszy, jak jest pokażę Prehistorika - ile to ona czasu przesiedziała przy nim! :)
Poza tym, kiedy tak wspominałem różne gry, padła nazwa nowej, takiej z górnej półki wymagań sprzętowych - Assassin's Creed 2 od Ubisoft. Chociażby dla rozejrzenia się w możliwościach dzisiejszych gier warto przejrzeć jego zwiastun. I jak tu się rozwijać informatycznie, kiedy tyle pokus wokół?! ;-)
Skoro już "wilk" został wywołany, w mojej osobie, muszę się zebrać i napisać w końcu obiecany wpis o Visual Paradigm. Może zachęce nim kogoś jeszcze :)
OdpowiedzUsuńCo do Assasin Creed 2 - obejżałem demo i trailera. Wygląda bardzo ciekawie. Z tego co zrozumiałem akcja tym razem dzieje się w 1486 w Wenecji, czyli włoskim renesansie. Ciekawe co będzie w części 3 :)
Prehistorik, UGH .. to były czasy! Aż dziwne, że już nie gram w gry.. ;/
U mnie słowo droższe pieniędzy. Oto obiecany wpis o Visual Paradigm. http://blog.dayt3k.net/2009/07/24/visual-paradigm-for-uml/
OdpowiedzUsuń