添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。

添付ファイル一覧

Kind Attachment Name Size Version Date Modified Author Change note
png
aggregation.png 1.4 kB 2 19-9-2011 00:08 ytp
png
aggregation2.png 3.2 kB 1 18-7-2011 01:13 ytp
png
aggregation3.png 3.2 kB 1 18-7-2011 01:13 ytp
png
association.png 1.0 kB 1 20-9-2011 00:04 ytp
png
composite.png 1.4 kB 1 18-7-2011 01:13 ytp
png
extend.png 1.4 kB 1 18-7-2011 01:13 ytp
png
generalize.png 3.2 kB 1 18-7-2011 02:28 ytp
png
implement.png 1.9 kB 1 18-7-2011 01:13 ytp

This page (revision-39) was last changed on 14-8-2016 22:52 by ytp

This page was created on 25-1-2011 00:33 by ytp

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 1 changed 2 lines
★このページは書きかけです\\
ここに書いたのは、2000年~2001年に渡って私が設計・実装したJavaのフレームワーク開発を主に通じて理解したオブジェクト指向の原理原則です。
ここに書いたのは、私が設計・実装したJavaのフレームワーク開発を主に通じて理解したオブジェクト指向の原理原則です。\\
At line 4 changed one line
しかし、普段の仕事の中で気付いた合理性のある内容だと考えています。
しかし、普段の仕事の中で気付いた合理性のある内容だと考えています。オブジェクト指向言語を日常使ってはいても、オブジェクト指向そのものをみっちりと学習したことがない人にとって特に役立つ内容だと思います。
At line 25 changed one line
これを理解してしまえばパターンに頼ることなく正しい設計にたどり着けると私は考えています。パターンを否定しているのではありません。
これを理解してしまえばパターンに頼ることなく正しい設計にたどり着けると私は考えています。しかしパターンを否定しているのでは決してありません。
At line 31 removed one line
#コンポジット集約
At line 34 added one line
[association.png]\\
At line 37 changed one line
[association.png]
関連を記述する場合は
*多重度(カージナリティ)
を省略してはいけません。これが記述されていないと、そのモデルが扱う業務の目的を理解できないからです。
At line 39 removed 4 lines
!コンポジット集約
「AクラスがBクラスを部分として持っている」という関係は上の集約と同じですが、Bクラスインスタンスの生成/消滅/移動の制御をAクラスが行うことが異なります。例えば「木と木の葉」、または「伝票と伝票明細」のような関係です。単に「__コンポジション__」とも呼ばれます。\\
[composite.png]
At line 44 changed 2 lines
「Mインタフェースの振る舞いをCクラスが具体化(実装)している」という関係を表します。インタフェースでは、振る舞いの型(パラメータと戻り値)だけを定義し、その具体化(実装)はCクラス側に任せます。インタフェースは「役割」と理解すればいいでしょう。\\
[implement.png]
[implement.png]\\
「Mインタフェースの振る舞いをCクラスが具体化(実装)している」という関係を表します。インタフェースでは、振る舞いの型(パラメータと戻り値)だけを定義し、その具体化(実装)はCクラス側に任せます。
*インタフェースは「役割」
と理解して下さい。\\
例えば自動車と飛行機の役割は「乗り物」です。この場合、乗り物インタフェースを実現(実装)する形で自動車クラスと飛行機クラスを設計します。
At line 48 changed 2 lines
「EとFの性質の共通部分を抜き出してDとした」関係のことです。例えば「ワゴン車とセダンを自動車と呼ぶ」という関係です。俗に「継承」とも呼ばれ、「__is a の関係__」と言われます( E is a D.)。\\
[generalize.png]
[generalize.png]\\
「EとFの性質の共通部分を抜き出してDとした」関係のことです。例えば「ワゴン車とセダンを自動車と呼ぶ」という関係です。「継承」とも呼ばれます。
*ワゴン車は自動車を継承している。
また「__is a の関係__」とも言われます
* E is a D.
*ワゴン車は自動車である。(自動車として扱える)
At line 52 changed one line
UMLの産みの親「Three amigos」の一人であるジム・ランボーによると、
UMLの産みの親「Three Amigos」の一人であるジム・ランボーは、
At line 54 changed 3 lines
とのことです。つまり、「その効果は気のせい」という意味で、有用性は無いとのことです。\\
最近まで私は__関連__を使わずに__集約__を書いていたのですが、色々迷って考えた結果逆の結論に至りました。モデルを表現する際、集約は紛らわしさを助長します。\\
「has a」の関係と言われますが、
と言いました。つまりその効果は「気のせい」で有用性は無いという意味です。\\
最近まで私は__関連__を使わずに__集約__のみで書いていたのですが、色々迷って考えた結果この逆の結論に至りました。モデルを表現する際、集約は紛らわしさを助長します。\\
集約は「has a」の関係と言われ、
At line 59 changed 3 lines
によって菱形を付けるクラスが換わりますが、双方向で参照するため、
*どちらも相手を持つ
という結果になるのです。
によって菱形を付けるクラスが入れ換わりますが、関連があるクラス同士は双方向で参照するため、
*どちらも相手を持てる(持つ必要がある)
という結果になるのです。そのため集約は意味を成しません。
At line 63 removed 19 lines
クラス図で集約を記述する際、「菱形」をどちらに付ければいいのか迷います。「A has B」の場合はA側に菱形を付ける決まりがあります。\\
では、入荷伝票を例に取るとどうでしょうか?
!仕入先 has 入荷伝票
下の図は、入荷伝票と入荷明細の関係を仕入先と商品と共に表したものです。\\
[aggregation3.png]\\
集約という言葉を「1つのインスタンスが別クラスのインスタンスを複数を持つ」という意味に取るならば確かにこの図になります。しかし、
*仕入先 has 入荷伝票
*商品 has 入荷明細
と読めてしまい、私にはしっくり来ません。
!入荷伝票 has 仕入先
下の図は、菱形の位置が上とは逆です。「入荷伝票が仕入先を持っている」「入荷明細が商品を持っている」という意図で書いたものです。
[aggregation2.png]\\
こちらの方が私にはしっくりくるため、このサイトではこの書き方で統一しています。\\
なお、菱形を記述しない「関連」という記法もありますが、この関連は意味付けが曖昧になるため、私はモデリング初期段階でしか使いません。最終的には「集約」あるいは「コンポジット集約」に収斂(しゅうれん)させます。\\
\\
集約・コンポジット集約・関連の__実践的な使い分け__に詳しい方からのご指摘をお待ちしています。(ありきたりで曖昧なサンプルではなく、実際の開発で使用した時のルールです)\\
At line 80 added one line
[業務シナリオで考える]
Version Date Modified Size Author Changes ... Change note
39 14-8-2016 22:52 3.565 kB ytp to previous
38 12-8-2016 19:46 3.861 kB JimmiXS to previous | to last tMpaWj http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com
37 11-8-2016 14:04 3.713 kB JimmiXS to previous | to last tFpfVw http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com
36 01-5-2016 01:46 3.565 kB ytp to previous | to last
35 01-5-2016 01:37 3.565 kB ytp to previous | to last
34 18-6-2014 13:39 2.862 kB ytp to previous | to last
33 18-5-2014 20:16 2.84 kB ytp to previous | to last
32 24-4-2013 01:38 2.84 kB ytp to previous | to last
31 11-3-2012 23:07 2.834 kB ytp to previous | to last
30 11-3-2012 21:44 2.834 kB ytp to previous | to last
29 11-3-2012 21:40 2.828 kB ytp to previous | to last
28 11-3-2012 21:33 2.823 kB ytp to previous | to last
27 11-3-2012 20:44 2.548 kB ytp to previous | to last
26 31-12-2011 12:46 2.486 kB ytp to previous | to last
25 31-12-2011 01:15 2.438 kB ytp to previous | to last
24 19-9-2011 02:19 2.959 kB ytp to previous | to last
23 19-9-2011 01:56 2.656 kB ytp to previous | to last
22 18-8-2011 00:29 2.525 kB ytp to previous | to last 小物クラス ==> 小粒クラス
21 27-7-2011 15:07 2.525 kB ytp to previous | to last
« This page (revision-39) was last changed on 14-8-2016 22:52 by ytp