Diagram UML Aplikasi Multi-Threaded

25

Untuk aplikasi single-threaded saya suka menggunakan diagram kelas untuk mendapatkan gambaran arsitektur aplikasi itu. Jenis diagram ini, bagaimanapun, tidak sangat membantu ketika mencoba untuk memahami aplikasi multi-threaded / konkuren, misalnya karena contoh yang berbeda dari kelas "hidup" di utas yang berbeda (artinya mengakses sebuah instance hanya menyelamatkan dari yang satu. utas itu hidup). Akibatnya, asosiasi antara kelas tidak selalu berarti bahwa saya dapat memanggil metode pada objek-objek itu, tetapi saya harus membuat panggilan itu pada utas objek target.

Sebagian besar literatur yang saya gali pada topik seperti Merancang Aplikasi Bersamaan, Didistribusikan, dan Real-Time dengan UML oleh Hassan Gomaa punya beberapa ide bagus, seperti menggambar batas-batas utas ke dalam diagram objek, tetapi secara keseluruhan tampak agak terlalu akademis dan sulit untuk dikerjakan. sangat berguna.

Saya tidak ingin menggunakan diagram ini sebagai tampilan tingkat tinggi dari domain masalah, melainkan sebagai uraian terperinci tentang kelas / objek saya, interaksinya, dan keterbatasannya karena batasan-batasan thread yang saya sebutkan di atas.

Karena itu saya ingin tahu:

  1. Jenis diagram apa yang menurut Anda paling membantu dalam memahami aplikasi multi-utas?
  2. Adakah ekstensi untuk UML klasik yang memperhitungkan kekhasan aplikasi multi-ulir, misalnya melalui anotasi yang menggambarkan bahwa
    • beberapa objek mungkin hidup di utas tertentu sementara yang lain tidak memiliki afinitas utas;
    • beberapa bidang objek dapat dibaca dari utas apa pun, tetapi ditulis hanya dari satu utas;
    • beberapa metode sinkron dan mengembalikan hasil sementara yang lain tidak sinkron yang membuat permintaan antri dan mengembalikan hasil misalnya melalui panggilan balik pada utas yang berbeda.
PersonalNexus
sumber
2
Saya pribadi menemukan diagram aktivitas berguna untuk pemodelan (pontensial) bersamaan menggunakan kasus / proses, tetapi mereka tidak benar-benar cocok jika Anda ingin turun ke tingkat kelas / objek.
Péter Török

Jawaban:

12

Wawasan paling penting tentang bagaimana eksekusi thread dapat digambarkan oleh apa yang dikenal sebagai diagram urutan . Ini adalah contoh dari wikipedia

masukkan deskripsi gambar di sini

Diagram ini pada dasarnya menggambarkan daftar peristiwa bersama dengan arah pada garis tunggal vertikal yang sering disebut garis hidup . Dalam hal ini, setiap utas adalah pemilik garis hidupnya sendiri. Diagram memungkinkan representasi semua jenis peristiwa seperti sinkron, asinkron, dll.

Hal terpenting lainnya dalam sistem semacam itu adalah diagram keadaan atau diagram keadaan. Biasanya, ini hanya berlaku jika model diwakili sebagai mesin negara. Namun, di sebagian besar sistem multi-ulir (di mana utas bersifat non-sepele) yang terbaik adalah mereka dirancang untuk berfungsi dengan algoritma terisolasi untuk berbagai kondisi.

Ada jenis diagram lain seperti diagram interaksi dan diagram komunikasi tetapi saya pikir mencoba menggambar diagram urutan dan diagram keadaan akan menempatkan kejelasan maksimum.

Dipan Mehta
sumber
6

Jawaban saya komplementer dengan Dipan karena melibatkan diagram urutan UML. Saya menemukan bahwa gaya yang bukan 100% UML murni juga OK. Lihatlah diagram yang digunakan dalam Pola Konkurensi . Beberapa hampir mirip UML (tapi yang ini jelas bukan standar):

masukkan deskripsi gambar di sini

Jika Anda terbiasa menunggu / memberi tahu di sinkronisasi utas Java, Anda akan menghargai diagram urutan berikut dari dokumen yang saya sebutkan:

masukkan deskripsi gambar di sini

Fuhrmanator
sumber
Ini juga berlaku untuk .NET / C # dan Visual Studio memiliki diagram urutan UML alat bawaan termasuk jenis fragmen aliran kontrol untuk menggambarkan perilaku multi-berulir. Lihat msdn.microsoft.com/en-us/library/dd465153.aspx#Anchor_1
David Burg
0

Untuk aplikasi multi-utas menggunakan kelas yang sama, triknya adalah dengan menarik dan melepas kelas yang sama ke setiap model yang mewakili utas. Anda akan dapat memiliki kelas yang sama dengan tampilan berbeda dan menavigasi dalam model dan kode dengan mengklik kelas, diagram atau kode. Saya tahu bahwa penggabungan model bukanlah konsep yang terkenal tetapi bekerja sangat baik dalam Eclipse dengan Omondo.

Maksud saya ketika saya memodelkan aplikasi besar yang terdiri dari lebih dari satu proyek. Saya membuat model untuk setiap proyek dan kemudian menggabungkannya di dalam proyek yang lebih besar. Semua pemodelan dilakukan menggunakan diagram kelas, yang merupakan model yang saya dapatkan ketika membalikkan proyek lengkap dari kode java ke UML. Maksud saya bahwa dalam contoh saya, saya menggunakan kode yang ada dan membalikkannya menjadi model UML tunggal dan kemudian menggabungkan semua kode terbalik ini yang telah membuat model UML menjadi model besar tunggal. Anda juga dapat membuat banyak model daripada membalikkan kode yang ada. Ini bekerja dua arah — pada pembuatan tanpa kode atau pada tahap rekayasa balik dengan kode yang ada.

Saya tidak tahu apakah itu masuk akal tetapi Anda mungkin dapat membuat satu model besar, menyusun kembali sub model untuk setiap utas seperti apa yang saya lakukan dengan pemodelan multi-proyek? Semoga bantuan ini.

UML_GURU
sumber