| 記号 | 意味 |
|---|---|
![]() |
プロセスを表す図である。プロセスはオブジェクトの存在する空間となる。"<<Process>>"は"<<P>>"に省略することができる。もし、マシン(ノード)に対して1プロセス、1スレッドのモデルであるならば、スレッドは省略できる。また、マシンに対して1つのプロセスしか表す必要がないのならプロセスも省略できる。
プロセスはスレッドで分割されないかぎりひとつの実行単位となる空間である。 |
![]() |
ひとつのプロセスがふたつのスレッドで構成されている。数字はオプションで、親子関係などを示す。 スレッドはオブジェクトの存在する空間となるが、ふたつのスレッド空間にオブジェクトを記述した場合、それらのオブジェクトは並行動作するということを示す。 |
![]() |
DLL(実行時にダイナミックリンクされるライブラリ)を表す。DLLもオブジェクトが存在する空間である。ここに存在するオブジェクトは他のオブジェクト空間から共有することができる。これを利用して共有メモリ管理を行うオブジェクトを表現することができる。 |
![]() |
クラスとインスタンスを表す。システム構造図では、オブジェクト空間に多くのオブジェクトを示さないようにしなければならない。あくまで、他の情報空間と関係を表す際に必要となるオブジェクトのみが記述対象となる。システム構造図にて動的な側面を表す際にはオブジェクトはインスタンスとなり、静的側面を表す際にはクラスとなる。 |
![]() |
複数のスレッドで共有される際にオブジェクトの持つデータの競合が発生する可能性のあるクラスまたはインスタンスを表す。このようなオブジェクトの利用は、データの競合を避けるための設計が必要とされ、それを明示するために、クラスやインスタンスの名前の上に"<<share>>"と記述する。もし、クラスそのものの仕様としてスレッド共有が必然的である場合はメソッド内部でオブジェクトの持つデータに対して排他制御を取ることとなる。 |
![]() |
共有メモリを管理するクラスを表す。複数のプロセスから共有される際にオブジェクトの持つデータの競合が発生する可能性があることを明示する時に、クラスやインスタンスの名前の上に"<<smem>>"と記述する。このように複数プロセスから同時利用される共有メモリを属性として持つクラスの設計は、クラス内部でセマフォなどを使ってデータの排他を図ることを強く勧める。 |
![]() |
データベースまたは一般ファイルなどのデータストアを表す。 |
![]() |
マシンの単位を明示する。マシンの単位は、いくつかのオブジェクト空間に限られる。 |
![]() |
OSから標準APIとして提供されるパイプ通信を表す。 |
![]() |
ウィンドウキューによる通信を表す。 |
![]() |
OSから標準APIとして提供されるキュー通信を表す。 |
![]() |
太い線を使ってノード間のネットワーク通信を表す。ステレオタイプ"<<文字>>"により実際の通信手段やネットワークプロトコル名を表すことができる。 |
![]() |
1プロセス、2スレッド構成でPersonオブジェクトのデータを共有する構成。この例の場合は、オブジェクトの所有権(生成と消滅)は第1スレッドにあることを意味する。スレッド同士の通信にはウィンドウキューを使用する。
この図で注意すべきことは、ReferThreadクラスがActiveクラスとして表されており、かつ、スレッド空間(T2)に配置されているという点である。これは、T2スレッド空間にてReferThreadがスレッド処理(T2)の主体となるクラスであることを明示しており、T2スレッド空間からReferThreadが新たにスレッドコンテクストを起こして非同期動作を行うという意味ではない。なお、この例の場合は、スレッド空間を省略することも可能であるが、この図式により、ReferThreadからPersonを参照する際には別スレッド(T2)のコンテクストを使っていることが明示されている。 |
![]() |
2プロセス構成でP2プロセスで作成した、共有オブジェクトをキューにて、P2プロセスに渡している。 |
![]() |
1サーバに複数のクライアント構成。
サーバ側は、クライアントからの送信を第2スレッドで受け取り、第1スレッドへウィンドウキューにより受け渡している。 クライアントは1プロセスでネットワークを通じてメッセージをサーバに渡す。図では、プロセスを1つしか表す必要がないためプロセスの記述を省略している。なお、ネットワーク通信にはSocketライブラリを使う。 この図の場合は、Serverの第2スレッドにPersonPrintをActiveクラス(太線の矩形)として表している。Activeクラスとはスレッドを内包している能動的なオブジェクトのことである。よってこの図は、スレッド空間T2を起こす主役がPersonPrintということを表している。なお、"<<T2>>"という記述によるスレッド空間の明示を省略することもできる。その場合、"<<P1>>"という1つのオブジェクト空間にPersonPrintというActiveクラスとPrintManクラスが存在する図となる。 |
![]() |
ふたつのプロセス間通信をDLLで実現する。
DLLに共有オブジェクトを配置して、P1プロセスとP2プロセスがデータ交換を行う様子。 |
![]() |
2プロセス構成。
メッセージはウィンドウキューにより行う。 大量データの送信をファイルで行う様子。 |
![]() |
分散オブジェクトミドルウェアを使ってスレッド方式や通信方式をカプセル化した図。
クライアントからサーバ側の人事データベース検索サービスを利用している。 |