Autor Wątek: Pisanie GUI oraz projekt ich klas w UML  (Przeczytany 7146 razy)

Offline kaban

  • Użytkownik

# Marzec 07, 2012, 12:15:39
Witam,

piszemy powoli grę i na mnie przypadło stworzenie całego GUI. Chcę to zrobić porządnie, więc zacząłem od diagramu klas w UML'u. Rozrysowałem sobie to mniej więcej i czy wg was taki diagram jest w porządku?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline vashpan

  • Użytkownik
    • Strona

# Marzec 07, 2012, 12:39:20
Po prostu zaimplementuj to i sprawdz czy bedzie dobrze dzialalo i wystarczalo na twoje potrzeby. Na pierwszy rzut oka - przerost formy nad trescia.

Ogolnie - odpusc sobie takie pierdoly jak UML o ile nie pracujesz w jakiejs korporacji gdzie ty bedziesz robil projekt a kto inny go implementowal... ( albo na odwrot )

Jak bedziecie sie zajmowali takimi glupotami zamiast robic gre, to dalej bedziecie robic ja "wolno" ;)

Offline kaban

  • Użytkownik

# Marzec 07, 2012, 12:47:12
ogólnie rzecz biorąc ta gra ma być naszą "wizytówką"/podkładką w portfolio w jakiejś firmie i dlatego chciałem to napisać wg sztuki programistycznej :)

Offline vashpan

  • Użytkownik
    • Strona

# Marzec 07, 2012, 12:55:04
ogólnie rzecz biorąc ta gra ma być naszą "wizytówką"/podkładką w portfolio w jakiejś firmie i dlatego chciałem to napisać wg sztuki programistycznej :)

No to napisz kod a potem wygeneruj diagramy z niego... ( true story - tak zaliczalem Inzynierie Oprogramowania :D, 4 weszlo... ) A zaprojektuj go sobie po prostu na kartce papieru z olowkiem na kibelku.

Aczkolwiek - to nie jest "wedlug sztuki programistycznej", nie ma czasu na takie glupoty ( przynajmniej w gamedevie z ktorym sie zetknalem )

Offline gotji

  • Użytkownik

# Marzec 07, 2012, 13:08:53
Tak na dobrą sprawę sam UML-owy diagram klas za dużo nie mówi dla osoby postronnej. Jak już chcesz się zajmować diagramami to pierwszym powinien być(przynajmniej w moim odczuciu) diagram przypadków użycia. Niestety prawie każdy programista jak myśli o diagramach UML to od razu przed oczami staje mu diagram klas :).

Osobiście nigdy nie używam czystego diagramu klas, dużo lepiej pracuje mi się z diagramem, który skupia się na relacjach między klasami: "kto z kim dlaczego ?" bez planowania jak zmienne i metody będą się nazywać. W swoim diagramie zupełnie to olałeś i pokazałeś samo dziedziczenie i implementowanie interface-ów,  a gdzie chociażby agregacja Window - Widget?

Offline kaban

  • Użytkownik

# Marzec 08, 2012, 00:15:33
@gotji no racja


chciałem zrobić coś w tym stylu po to, aby za wczasu wszystko przemyśleć, żeby nie musieć później przepisywać kodu

Offline Kos

  • Użytkownik
    • kos.gd

# Marzec 08, 2012, 12:14:06
Kod zawsze jest czymś, co ewoluuje.

Jeśli chcesz zaprojektować, to pisz na kartce w maksymalnie uproszczonym pseudokodzie, rób sobie luźne schematy, dużo bazgraj, żebyś zobrazował sobie jakie dane którędy przechodzą, jak wygląda control flow, itd.

Offline siso

  • Użytkownik

# Marzec 08, 2012, 20:55:58
Jeśli chcesz to zrobić porządnie, to zacznij po prostu pisać, ale w TDD.

Narysuj sobie wszystkie byty i wszystkie interakcje, jakie między nimi mają zachodzić. Zmieścisz to na jednej kartce, zgaduję. No, niech będzie, że na dwóch czy trzech. Dostaniesz ogólny obraz sytuacji, który da Ci zbiór wymagań. Następnie weź pierwsze wymaganie z listy, obojętnie jakie, i napisz unit test, który je opisuje. Jeśli nie da się tego zrobić jednym testem, napisz tyle, ile będzie niezbędne. Następnie napisz kod, który zadowoli te testy.

Czynność powtarzaj aż do pełnego sukcesu :)

Offline Avaj

  • Użytkownik

# Marzec 09, 2012, 13:58:40
Jeśli chcesz to zrobić porządnie, to zacznij po prostu pisać, ale w TDD.

Narysuj sobie wszystkie byty i wszystkie interakcje, jakie między nimi mają zachodzić. Zmieścisz to na jednej kartce, zgaduję. No, niech będzie, że na dwóch czy trzech. Dostaniesz ogólny obraz sytuacji, który da Ci zbiór wymagań. Następnie weź pierwsze wymaganie z listy, obojętnie jakie, i napisz unit test, który je opisuje. Jeśli nie da się tego zrobić jednym testem, napisz tyle, ile będzie niezbędne. Następnie napisz kod, który zadowoli te testy.

Czynność powtarzaj aż do pełnego sukcesu :)
jak wyglądają unit testy dla GUI?

Offline kaban

  • Użytkownik

# Marzec 09, 2012, 14:05:11
można np obliczać czy współrzędne się zgadzają, wszystkie obliczenia matematyczne, czy jak np dla okna dam przezroczystość, czy wszystkie kontrolki je będą dziedziczyć i tym podobne

Offline hashedone

  • Użytkownik

# Marzec 09, 2012, 15:47:24
@Avaj - jak znajdziesz jakimś cudem odpowiedź na to pytanie to daj znać, bo od dwóch tygodni tłumaczę się z braku UT do GUI.

Offline Kos

  • Użytkownik
    • kos.gd

# Marzec 09, 2012, 16:57:41
Głupoty gadacie. Selenium RC! :D (Do web appów.)

Offline Xirdus

  • Redaktor

# Marzec 09, 2012, 19:58:04
można np obliczać czy współrzędne się zgadzają
Jedyne co mi na myśl przychodzi to takie coś:
button.x = 15;
assert (button.x == 15);

Offline siso

  • Użytkownik

# Marzec 09, 2012, 22:56:45
jak wyglądają unit testy dla GUI?
Wyobraź sobie rozdzielenie renderera od modelu GUI i testowanie samego modelu zgodnie z jego wymaganiami. Kaban podał przykłady. Ta część jest względnie prosta.

Teraz wyobraź sobie fake'ową implementację biblioteki, której renderer używa do rysowania po ekranie. Zlinkuj z nią program testowy dla testów samego renderera. Ta część jest trudniejsza, ale też się da :)

Cały trik z testowaniem polega na łamaniu zależności. Im mniej zależności w kodzie, tym łatwiej go otestować. Zależności można łamać na poziomie kompilacji albo na poziomie linkowania. To drugie stosuje się w wyjątkowo nieprzystępnych sytuacjach, jak np. integracja z jakimś sterownikiem.

Testy integracyjne nie wymagają łamania zależności, bo testują poszczególne use case'y całego działającego cacka.

Samo łamanie zależności to niezła zabawa jest. Polecam dorwać jakiś legacy kod, na przykład swój własny sprzed kilku lat, i zapitolić mu testy do najbardziej spaghetti-fragmentu, jaki uda się znaleźć ;)

Offline Avaj

  • Użytkownik

# Marzec 09, 2012, 23:18:11
Super, tyle teoria, już widzę jak komuś by się chciało pisać fake'ową implementację biblioteki i jeszcze na maksa rozdzielać widok od modelu i to wszystko testować.

Może w aplikacji biznesowej tak, ale tu jest gamedev i trochę inne zasady ;)