趣味でプログラミングしています。
オブジェクト指向設計をより理解しようと UML なるものに挑戦しようとしています。
構造化 ( C言語 etc. ) の場合は フローチャート, 疑似言語 でいいと思いますが、
オブジェクト指向を取り入れた場合、複雑になるために (フローチャートは)使えないようです。
( 使えるが 一部のみ... )
なので継承関係等を表すために UMLなるものを使おうかと思っています。
クラス図の [ +, #, - (アンダーバー)... ] という具合に 一つのクラスで収まるものは理解できます。
ですが 複数のクラス(同士)が関係しあうのを表すのが...
記号そのものは覚えればいいかもしれませんが、
その用語の意味が...
を読むと「関連」と「集約」,「コンポジション」,「依存」の違いがわからない...
集約 の方は
『集約は関連の一種でオブジェクトが複数集まって全体を構成する関係』(上記サイト)
とあります。これは オブジェクト配列とか リスト系 ( vector, list, ArrayList etc. ) とかとして保持する...
とも取れますが、"集約" の例として単体のメンバオブジェクト ( フィールド ) を提示している等でブレブレ...
「汎化」( Generalization ) は
『Javaなどの継承、つまり「is a」の関係を表現します。』(上記サイト)
とあるために、
「Javaでいう abstract や通常のクラスを継承する場合」
なんだろうな。とわかります。
「実現」( Realization ) は
『Javaでいうinterfaceと同等の意味で、相手を具象化する関係のとき用いる表現です』(上記サイト)
とあるために
「Javaでいう interfaceを継承 ( 厳密には実装か。 ) する場合」
なんだろうな。とわかります。
もうちょっと調べてみると
C++言語 to UML
&
Javaプログラマーに贈るUML入門" "オージス総研"
がヒットしました。
"C++言語 to UML" の方を見ると
関連 はメンバオブジェクト ( フィールド ) として保持しています。
ですが、デザインパターンでいうコンポジションとはどう違うのかが...
もう一方の「Javaプログラマーに贈るUML入門」の方には
『コンポジションは集約の条件に加 え、
2つのオブジェクトのライフサイクル(生存期間)も同じ場合に使用し、
強い集約関係を表します』
とあることから、なんとなく C++で言えば
コンストラクタで生成 -> メンバオブジェクトとして保持 -> デストラクタで破棄
みたいな状態のやつかなと。
ですが、関連, 集約...がわかりません。
「こんなことも わからんのか」とおっしゃる方もいらっしゃいますが、
私は趣味で独学でやっています。
なので教えてくれる人もいないし、Googleで調べてもわかりづらいとか...
学校で習ったとかならともかく、独学では難しいです。
意味そのものはわかっても、他のものとの区別がつかない...
Javaやっていれば 汎化と実現はごっちゃにはならないだろうけど、
関連と集約の差は????
とか。
UMLを読んでソースコードを記述するときでも大変 (理解しづらい) のに、
ソースコードからUML ...
どれを使うべきかわからないっていう問題。
趣味でやっているので感覚で独自に、自分がわかればいいのかもしれませんが、
他の 例えば デザインパターンを説明しているサイトの多くでは
このUMLを使って定義していますよね。
なのでちゃんと理解したいのですが...
どなたかご存じの方宜しくお願い致します。
[情報]
言語: C/C++ or Java ( C++の方が楽ですが。 )
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/05 04:53
2017/06/05 08:17