2009-06-05 12 views
28

Uwielbiam używać diagramów UML do opisywania mojego oprogramowania. W większości przypadków diagramy są dla mojego własnego użytku i używam ich dla bardziej zaangażowanych fragmentów kodu, interakcji itp., W których będę mógł skorzystać z możliwości obejrzenia ich w przyszłości.Czy istnieje jawne podejście UML do przedstawiania wątków?

Jedną rzeczą, którą odkryłem, że robię kilka różnych sposobów, jest diagramowanie wątków. Tematy z natury mają tendencję do wyskakiwania w bardziej zaangażowanych fragmentach kodu, a ich śledzenie jest często głównym celem moich dokumentów projektowych.

W przeszłości użyłem symbolu na diagramie sekwencji, aby pokazać tworzenie nowego wątku, ale patrząc na niektóre diagramy, które czasem są niejednoznaczne między czasem życia obiektu - dla którego diagramy sekwencji są - a wątkiem dożywotni. Czy istnieje lepsze podejście do włączania wątków do UML?

+0

wydaje się być identyczna z http://stackoverflow.com/questions/1643733/how-to-illustrate-multiple-threads-in-sequence-diagram – feuGene

Odpowiedz

11

Udało mi się stworzyć schemat, który ma sens w momencie rysowania. Podstawowym założeniem jest to, że nałożyłem szare pola reprezentujące wystąpienia klas z niebieskimi polami reprezentującymi czasy życia wątków. Najważniejsze, na czym pozwala mi śledzić, to wiedzieć, w którym wątku będę wykonywał, gdy wołam niektóre metody.

Bez wątpienia istnieją lepsze i bardziej intuicyjne sposoby tworzenia modeli gwintów i klas. Miarą sukcesu dla mnie jest to, czy mój własny diagram daje mi taki sam poziom zrozumienia przez 6 miesięcy w dół.

+0

Może to mieć sens wizualnie, ale modelowanie go nie ma. Nakładki nie mają znaczenia w języku UML. Jeśli chodzi o spełnienie twoich potrzeb dotyczących dokumentacji, jeśli to działa świetnie. –

+1

"ale modelowanie nie" - masz na myśli: ale modelowanie UML tego nie robi. Zerknąłem na podane przykłady, ale nic nie pasowało. Podejrzewam, że wątki nie były tak dużym problemem, kiedy powstał standard UML. – sipwiz

+2

Jestem z sipwiz - UML nie jest właścicielem terminu "modelowanie". Lubię ten schemat. –

2

Nie znam sposobu, ale użycie diagramu sekwencji nie wydaje się całkowicie niewłaściwe, biorąc pod uwagę, że wątek jest w wielu językach zaimplementowany jako klasa Thread (lub podobna).

Najbardziej zgodnym z UML sposobem byłoby prawdopodobnie dodanie adnotacji wskazującej, że "obiekt" reprezentuje wątek.

+1

tak, używam diagramu sekwencji wcześniej, aby opisać synchronizację nici. Po prostu znajduję inny diagram o nazwie [diagram czasowy] (http://www.visual-paradigm.com/support/documents/vpumluserguide/94/200/6715_drawingtimin.html), bardzo interesujący. – Felix

0

Najsilniejszym punktem UML jest statyczna struktura. Jeśli używasz krótkich wątków, nie widzę też łatwego sposobu ich tworzenia. Może uda Ci się znaleźć rozwiązanie, obracając różne rzeczy: dlaczego używasz/potrzebujesz wątków? Jakie funkcje oferuje? Jeśli komunikują się ze sobą i podążają za jakimś API (przekazywaniem wiadomości), rysowanie ich jako komponentów może mieć sens.

3

Diagramy aktywności UML mają elementy wideł i łączenia, aby pokazać równoległy przepływ logiki.

+0

Diagramy aktywności są zwykle rozumiane jako model procesu biznesowego. Tym, co mnie bardziej interesuje, jest modelowanie wewnętrznego działania mojego oprogramowania. Rozumiem jednak, że istnieją pewne aspekty Diagramu aktywności, który byłby przydatny w modelowaniu wątków softwarowych. – sipwiz

+1

@sipwiz: To nieprawda, że ​​diagramy aktywności są używane tylko w procesach biznesowych. Proszę zobaczyć moją odpowiedź. –

9

Diagram aktywności, sekwencji i stanu to: wszystkie poprawne sposoby wyświetlania zachowania wątków.

1st: (Komentarze do vs) Istnieją dwa zestawy schematów lub elementów modelowania w UML, statycznej strukturze, jak to określasz i behawioralnej. Każda książka pomoże ci zrozumieć podział, zwykle w treści/OWO, dodatkowo można go zobaczyć na stronie 11 Martina Fowlera UML Distilled standardu near defacto dla początku UML w mojej opinii.

2nd: (do pytań i uwag sipwiz'S) Diagramy aktywności nie są powszechnie rozumiane modelowanie procesów biznesowych, mogą być wykorzystywane do tego jednak, a większość przykładów lub prosty poradnik zbliży go z biznesowego punktu widzenia.

Dyskusja na temat opcji do modelowania wątki:

Diagramy aktywności - Pozwala na rozwidlone i określając współbieżności przy użyciu bar i użytkowania linii. Zauważ przykład na dole nie jest procesem biznesowym, example. Większość ludzi może czytać te, firmy, kierownictwo i programistów, chociaż czasami mogą brakować im szczegółów lub stać się bałaganami.

diagramy sekwencji interakcji - W tym samym stanowisku, example, będzie można zobaczyć diagramy sekwencji pozwalają określić zachowanie równoległego w sekwencji przez boks parallelizable zachowanie z etykietą „nominalnej”, jest to przydatne, aby pokazać czytelnikowi, co metody mogą lub powinny być wywoływane równolegle, tj. przez różne wątki. Jest to metoda, której użyłbym dla szczegółowych programistów, takich jak dyskusje dotyczące budowania obiektu.

Schemat stanu - Wykres stanu, podobnie jak działanie, umożliwia współbieżność za pomocą BARU i linii użycia.

UWAGA: Nie będą modelować konkretnego wątku i jest to dokładny cykl windy, jako że jest częścią poziomu instancja/run-time modelowania, jeśli to, co chcesz wyjaśnić swoje pytanie, a ja odpowiadam . Po prostu zamodelowałbym to używając jednego z powyższych, ponieważ nikt inny niż ekspert MDA/UML nie zadzwoni, a ty nie generujesz działającego systemu.

Również: Proszę zwrócić uwagę, że dalsze szczegóły można znaleźć w większości książek UML. Również dźwignia: http://www.jguru.com/faq/view.jsp?EID=56322

8

Tradycyjnie gwintowanie przedstawiono graficznie za pomocą sieci Petriego. Rob Martin ma an article na wielowątkowość w UML, które mogą okazać się przydatne.

Aktualizacja - pamiętaj, że możesz reprezentować wątki za pomocą wideł w diagramach aktywności - udało mi się uzyskać find something that explains this.

Bardzo trudno jest znaleźć darmowe samouczki dla sieci Petriego, jednak wiem, że sieci Petriego nadają się do modelowania współbieżności, więc wybrałem "producenta-konsumenta sieci Petriego" (moje ulubione wątki) i found this.

Znalazłem również kilka slajdów pokazujących sieci Petriego modeling a Semaphore.

+2

Twój link "coś, co to wyjaśnia" jest teraz rozwalony. –

2

UML jest definiowany przez nadbudowę UML, można ją znaleźć tutaj http://www.omg.org/spec/UML. Po przeczytaniu specyfikacji można stwierdzić, że klasa UML może być aktywna. Klasa aktywna to klasa z meta-atrybutu isActive ustawiona na wartość true. Jest również przedstawiany inaczej. Instancje obiektu z aktywnej klasy automatycznie wykonują "zachowanie klasyfikatora". Podobnie jak w przypadku każdego zachowania, można je zdefiniować za pomocą działania, w którym oczekuje się sygnałów asynchronicznych (AcceptEventActions) i wywołuje metody (CallOperationAction) lub inne zachowania (CallBehaviorActions). W ten sposób aktywne obiekty są modelowane w UML. Musisz tylko przeczytać specyfikację UML.

1

Diagramy aktywności będą modelować wewnętrzne funkcjonowanie oprogramowania za pomocą wideł i złączek reprezentujących wątki. Aby dowiedzieć się, jak dokładnie to zrobić, zapoznaj się z doskonałą serią artykułów Conrada Bocka. Here to artykuł obejmujący widelce i łączenia, ale powinieneś zapoznać się z odnośnikami z powrotem do pierwszego artykułu z serii, aby dowiedzieć się, jak poprawnie modelować za pomocą "kolorowych sieci Petriego". Nie tak myślisz (i to całkiem łatwe)!

Jest nowy standard w OMG dla języka zwanego Alf który zapewnia bardziej dogodny dla notacji diagramów aktywności powierzchniowej i jest przeznaczony do reprezentowania kod w procesie.Od spec:

Podstawowym celem języku działania jest działanie jako notacji powierzchni do określania wykonywalne zachowań w ramach szerszego modelu, który jest reprezentowany przede wszystkim przy użyciu zwykłych graficznych notacji UML o . Na przykład może to obejmować metody działania klas lub efektu przejścia na komputerach stanu.

Dla programisty prawdopodobnie nie można uzyskać większej intuicji niż Alf. I będzie idealnie konwertować na diagramy aktywności UML.

Powiązane problemy