Programowanie 2D

0

Witam,
programuję już długi czas, ale jeszcze nie miałem okazji tworzyć aplikacji do projektowania
chciałbym napisać coś na kształt narzędzia do tworzenia diagramów UML (okienkowa, diagramy będą dość opasłe)
dróg, jakimi można pójść jest wiele - od robienia prostych przykładów, gdzie rysujemy kółka, przez "odkrywanie koła" po raz n-ty, do analizy źródeł podobnych aplikacji
Jakieś dobre rady, od czego zacząć?
Język dowolny, myślałem o C# i Java

0

Akurat robię coś podobnego, więc mam parę hintów :) (chociaż nie do końca podobnego, bo akurat ja nie robię nic związanego z UML, za to robię coś co wyświetla drzewka i grafy, i pozwala nimi manipulować)

Jakieś dobre rady, od czego zacząć?

od kilku rzeczy:

  • czy to będą diagramy statyczne (raz wyświetlisz i już ich nie będziesz ruszał) czy interaktywne (tj. czy będziesz mógł tworzyć diagramy w programie, dodawać węzły, kasować, przenosić węzły itp.).

Jeśli statyczne to mała trudność, jeśli zamierzasz wprowadzić interaktywność to musisz pomyśleć o tym jak to zrobisz. To może być wyzwanie zarówno od strony designu (tego co widzi użytkownik, w jaki sposób będzie dokonywał interakcji, np. buttony ,drag'n'drop etc.), jak i od strony implementacji. Warto spędzić nad tym trochę czasu. Interakcje użytkownika, wewnętrzne zmiany stanu, itp.

  • druga rzecz, o jakiej warto pomyśleć to w jaki sposób będziesz trzymał dane diagramu, najlepiej żeby to była forma która pozwala na łatwą serializację/deserializację, oraz pozwala na łatwe iterowanie i wyszukiwanie danych w diagramie. Chyba najlepiej tego rodzaju dane trzymać w formie grafu, gdzie każdy węzeł to konkretny element diagramu.

  • elastyczność. w diagramach może znajdować się wiele typów elementów i wiele wariacji. Jeśli np. założysz na początku, że będą powiedzmy 3 typy: kółko, kwadracik i trójkącik, to potem się okaże, że będziesz chciał dodać 4 typ, który będzie jeszcze czymś innym. Mogą być też wariacje. Np. kwadracik czarny i kwadracik zielony. Albo kwadracik z kółkiem w środku etc.

Złym podejściem jest robienie tego na ifach. Lepiej takie coś rozwiązywać za pomocą polimorfizmu (kwadracik inaczej się zachowuje/wygląda jak kółko), parametrów (np. kolor kwadracika), kompozycji(możesz zrobić element złożony z kilku innych), dekoratorów itp. Tak żeby można było łatwo zmieniać wszystko.

  • technikalia, czyli np. jak od strony technicznej wyświetlisz diagram (czy sam będziesz renderować wszystko, czy skorzystasz z gotowej biblioteki do wizualizacji danych etc.)

  • no i warto zrobić prototyp tego co chcesz zrobić, pokombinować trochę, zrobić coś na szybko, zobaczyć jak to wszystko w praktyce wychodzi, a potem dopiero zacząć robić to na serio. Przemyśleć też pewne sprawy, rozrysować na kartce itp.

1

Co do tej elastyczności, w klasycznej książce "Design Patterns" GoF trochę rzeczy jest ilustrowane przykładem edytora tekstu, co jest trochę podobnym problemem. Oczywiście po 20 latach to nic odkrywczego, ale może warto sobie odświeżyć lub przejrzeć.

0

myślałem już wcześniej trochę o tym, jak zorganizować sobie pracę
dziedziczenie i przeciążanie to konieczność, stan w bazie danych (późnej pewnie xml, temat obecnie drugorzędny)
możliwość nanoszenia zmian w diagram, przesuwanie, łączenie, grupy itp.
wymagania już sobie postawiłem i teraz mam problem ; )
często pojawia się problem wydajności, skalowania diagramu, przesuwania obszaru roboczego i kontrolowania jego rozmiaru, kopiowania elementów - takich miejsc jest sporo
z jednej strony chce się szybko osiągnąć efekt, z drugiej strony chciałbym w wejść w szczegóły implementacji żeby zrobić to lepiej
i tytułowe "od czego zacząć" jest pytaniem dot. wyboru technologi i pytaniem o punkt, z jakiego należało by wystartować
przyglądałem się Graphics2D w Java - czy rysowanie kwadratów po "Graphics" w Java lub c# to dobra droga do zbudowania czegoś większego? czy w tego typu narzędziach można to zrobić w inny sposób? jak to robią grube ryby? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1