- PR -

C#とUML(クラス図)とのマッピングについて

投稿者投稿内容
モニンチ
会議室デビュー日: 2003/12/23
投稿数: 13
投稿日時: 2003-12-23 16:01
はじめまして、モニンチと申します。よろしくお願いします。
今までVB5で簡単なアプリを作ってきましたが、このたび初めてC#を使うことになりました。
せっかくなので、「UML」っちゅうのも使ってみようかと考えていましたが...。

C#とUMLのマッピングで悩んでいます。
プロパティ、インデクサ、イベントをクラス図でどのように表現したら良いのか分かりません。
入門書にもVS.NETのヘルプにも過去ログにも見当たりませんでした。
みなさんはどうされていますか?知恵をお授けください。

長くなりますが、自分なりに考えた図を以下に記載します。
(描くのに1時間もかかった力作です。)

コード:

■プロパティ
●厳密版
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃StrictPropertyModel ┃
┠──────────────────────┨
┃- _field1 : int ┃
┃- _field2 : int ┃
┠──────────────────────┨
┃+ getField1() : int <<Property>> ┃
┃+ setField1(value : int) : void <<Property>>┃
┃+ getField2() : int <<Property>> ┃
┗━━━━━━━━━━━━━━━━━━━━━━┛

●簡易版
┏━━━━━━━━━━━━━━━━━━━━━┓
┃SimplePropertyModel ┃
┠─────────────────────┨
┃+ Field1 : int <<Property>> ┃
┃+ Field2 : int <<Property>><< ReadOnly>> ┃
┗━━━━━━━━━━━━━━━━━━━━━┛

■インデクサ
●厳密版
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃StrictIndexerModel ┃
┠─────────────────────────────┨
┠─────────────────────────────┨
┃+ getThis[index : int ]() : object <<Indexer>> ┃
┃+ setThis[index : int](value : object) : void <<Indexer>> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

●簡易版
┏━━━━━━━━━━━━━━━━━━━━━━━┓
┃SimpleIndexerModel ┃
┠───────────────────────┨
┃+ this[index : int ] : object <<Indexer>> ┃
┠───────────────────────┨
┗━━━━━━━━━━━━━━━━━━━━━━━┛

■イベント
●厳密版
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃MyEventHandler <<delegate>> ┃
┠─────────────────────────────┨
┠─────────────────────────────┨
┃+ MyEventHandler(sender : object, e : EventArgs) : void ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
↑+EventName <<event>>


┏━◇━━━━━━┓
┃MyEventSource ┃
┗━━━━━━━━┛
↑-_myEventSource


┏━◇━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃MyEventListener ┃
┠─────────────────────────────┨
┠─────────────────────────────┨
┃- _myEventSource_EventName ┃
┃ (sender : object, e : EventArgs) <<EventHandler>> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

●簡易版
┏━━━━━━━━━━━━━━━━━━━┓
┃MyEventSource ┃
┠───────────────────┨
┃+ EventName : MyEventSource <<event>> ┃
┠───────────────────┨
┗━━━━━━━━━━━━━━━━━━━┛
↑-_myEventSource


┏━◇━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃MyEventListener ┃
┠─────────────────────────────┨
┠─────────────────────────────┨
┃- _myEventSource_EventName ┃
┃ (sender : object, e : EventArgs) <<EventHandler>> ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛




[ メッセージ編集済み 編集者: モニンチ 編集日時 2003-12-24 01:16 ]
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-12-23 17:14
C#は良く分からないですが、プロパティって値を保持しておくことだけのために存在するものでしょうか。
もしそうであれば、私は、Value Objectという意味をこめて、このクラスに<<value>>ステレオタイプを付けています。
なので、この場合、以下のように、<<property>>ステレオタイプを付けることになるのかな。要は識別できればいいので、この程度のことしかしていません。
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃StrictPropertyModel ┃
┃<<property>> ┃ ┠──────────────────────┨
┃- _field1 : int ┃
┃- _field2 : int ┃
┗━━━━━━━━━━━━━━━━━━━━━━┛

ほかは良く分からないので、識者の方に任せま〜す。

御参考までに。
# 図はぱくったよ〜。
モニンチ
会議室デビュー日: 2003/12/23
投稿数: 13
投稿日時: 2003-12-23 18:39
かずくんさん。(くんさん?)
自分史上初の書込みにレスをありがとうございます。
何か記念品を差し上げたいです。

VS.NETのHelpによれば、プロパティとは「(前略)フィールドを自然な形で拡張したもの(後略)」らしいのです。
さらに、「プロパティはオブジェクトの属性の読み書きにアクションを関連付けるための機構を提供し、さらに、そのオブジェクトの属性を計算できます。」とあります。
フィールドのようでフィールドでない。メソッドのようでメソッドでない。
そんなやつなんです...、プロパティってやつは。

私は、UMLを描くのにJudeを使っています。
すごく気にいっているのですが、Java向けなのです。(finalとかは考慮されています)
C#の言語仕様は考慮されておらず、プロパティ、インデクサ、イベントが上手く表現できません。
.NET向けのバージョンを提供して頂けないかと、祈っています。


----------------------------------------
Judeは株式会社永和システムマネジメント様がフリーで提供して下さっているUMLモデリングツールです。
本文中の「」内はMicrosoft Visual Studio .NET 2003 ドキュメントより引用させて頂きました。


_________________


[ メッセージ編集済み 編集者: モニンチ 編集日時 2003-12-23 18:42 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-23 21:29
 Borland Together Edition for Visual Studio .NET 2003を購入してみました。これだと、リアルタイムにC#のソースコードとUMLをリンクしてくれます。まだ使っていないのですが、クラス図の下の方に「プロパティ」と書いてあるタグがありました。どうも拡張されているようです。実際に使ったら(今日使う予定だったが、朝から晩までじゃまされた)何か書きます。

参考
http://www.borland.co.jp/together/msvs/

↓↓お、お疲れ様です。書こうと思ったのですが、先に試されたのね^^;
↓↓私も来月からの支払いが怖いです^^;

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-12-24 08:21 ]
モニンチ
会議室デビュー日: 2003/12/23
投稿数: 13
投稿日時: 2003-12-24 01:49
Jittaさん。情報ありがとうございます。
早速、お試し版14.4MBなりを1時間かけてDownしました。電話代が怖い。

で、お試してみました。
プロパティ、インデクサ、イベントは下記の図になりました。
なんとなく、納得できません。

コード:
●プロパティ
┏━━━━━━━━━━━━┓
┃PropertyModel           ┃
┠────────────┨
┠────────────┨
┠────────────┨
┃+ Property1 : int       ┃
┗━━━━━━━━━━━━┛
うーん。この発想はすごいです。
Jittaさんがご指摘の通り、拡張されています。
ちなみにGetOnlyでもGet/Setでも図に変わりありませんでした。

●インデクサ
┏━━━━━━━━━━━━┓
┃IndexerModel            ┃
┠────────────┨
┠────────────┨
┠────────────┨
┗━━━━━━━━━━━━┛
うーん。図に表現されません。(*1)
...なぜ?

●イベント
┏━━━━━━━━━━━━┓
┃EventSource             ┃
┠────────────┨
┠────────────┨
┠────────────┨
┗━┯━━━━━━━━━━┛
    │
    │
┏━┷━━━━━━━━━━━━━━━━━━━┓
┃EventListener                             ┃
┠─────────────────────┨
┃- _myEventSource : EventSource            ┃
┠─────────────────────┨
┃- _myEventSource_EventName                ┃
┃        (sender : object, e : EventArgs)  ┃
┠─────────────────────┨
┗━━━━━━━━━━━━━━━━━━━━━┛
うーん。delegateや、EventSourceクラス中のeventの宣言は表現されません。(*1)


<補足>
*1:この図はHelpも見ずにちょこちょこっと試した結果です。
 設定や操作が変わると、また違った結果になるのかもしれません。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-12-24 08:55
>今までVB5で簡単なアプリを作ってきましたが、このたび初めてC#を使うことになりました。
>せっかくなので、「UML」っちゅうのも使ってみようかと考えていましたが...。
つまり非オブジェクト指向からオブジェクト指向に移行して苦労していると
考えて良いのでしょうね.

>C#とUMLのマッピングで悩んでいます。
C#は知りませんが,(知りたいとも思いませんが)
オブジェクト指向言語用に設計する場合,「オブジェクト指向設計」は通常は
そのままでは使えません.「オブジェクト指向設計」は一度綺麗に忘れて,
一から設計し直すことをお勧めします.

あとオブジェクト指向言語の機能を活かした設計をするには,デザインパターンを
知っておいた方が絶対に良いと思います.GoF本などを一冊買って,一通り目を
通しておくべきでしょう.
モニンチ
会議室デビュー日: 2003/12/23
投稿数: 13
投稿日時: 2003-12-24 09:55
悪夢を統べるものさん。ご意見ありがとうございます。

Jittaさんに教えて頂いたBorland Together Edition for Visual Studio .NET 2003には、パターンウィザードという機能がありました。
GoF本の23パターンの雛形が生成できます。勉強に役立ちそうです。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2003-12-24 11:20
引用:

モニンチさんの書き込み (2003-12-24 09:55) より:

Borland Together Edition for Visual Studio .NET 2003には、パターンウィザードという機能がありました。
GoF本の23パターンの雛形が生成できます。勉強に役立ちそうです。




うわ、そんなのがあるんですか!
かなり興味ありです!

でも、プロパティってVisioあたりのUMLツールでは
ほんと困っちゃうんですよね。
前もなんかで話題になったかもしれませんが、
クラス図は確かに、ステレオタイプや名前付け規則で
ローカルルール的に無理やり表現しちゃうんですが、
コラボレーション図やシーケンス図になると
結局C++あたりのアクセッサ表記になってしまいます。
ボーランドさんのはその辺どうなっているのでしょうか?

そんな高機能じゃなくていいので、.Net対応の
基本的な図をストレスなく描ける
個人でも手が出るツールが欲しいなぁ〜〜

なんの答えにもなってなくてごめんなさい

スキルアップ/キャリアアップ(JOB@IT)