質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3167閲覧

UMLの用語定義 違い

BeatStar

総合スコア4958

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

5クリップ

投稿2017/06/05 03:49

趣味でプログラミングしています。

オブジェクト指向設計をより理解しようと UML なるものに挑戦しようとしています。

構造化 ( C言語 etc. ) の場合は フローチャート, 疑似言語 でいいと思いますが、
オブジェクト指向を取り入れた場合、複雑になるために (フローチャートは)使えないようです。
( 使えるが 一部のみ... )

なので継承関係等を表すために UMLなるものを使おうかと思っています。

クラス図の [ +, #, - (アンダーバー)... ] という具合に 一つのクラスで収まるものは理解できます。

ですが 複数のクラス(同士)が関係しあうのを表すのが...

記号そのものは覚えればいいかもしれませんが、
その用語の意味が...

UML入門 - IT専科

を読むと「関連」と「集約」,「コンポジション」,「依存」の違いがわからない...

集約 の方は
『集約は関連の一種でオブジェクトが複数集まって全体を構成する関係』(上記サイト)
とあります。これは オブジェクト配列とか リスト系 ( 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++の方が楽ですが。 )

宜しくお願い致します。

m.ts10806👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

趣味なのにUMLってスゴイです。

UML自体は書き方に意味というか意図が含まれてるため、用語・用法が厳密になっています。
とはいえ、私自身も含めて、あまり厳密に書いていないという方もいると思いますが・・・
※UMLをバリバリ実践している詳しい方からフォローが欲しいですが・・・

まず、ご認識のとおり

趣味でやっているので感覚で独自に、自分がわかればいいのかもしれませんが

で、問題ないのであまり難しく考えすぎない方が良いと思います。

** 関連と集約 **

関連ですが、その名のとおり、クラス間に関係があれば線をひく。という理解で良いです。
ユーティティ、ライブラリやnewするもの、はたまた属性(フィールド・メンバ)、実装するもの派生クラスを作成するのも全部関連です。

なので、関連自体は意識しなくて良いと思います。
で、これだと表記煩雑だったり意図がわかりずらいので、表記方法に区別をつけています。

集約は全体と部分をあらわす場合の関連の表現です。
誤解を恐れずにいうなら属性のうち、文字列や数字なので単純な値でないものは集約でいいです。

コンポジションは納得されているようですので、部分が単品で生存しても問題ないなら集約です。
よく車と部品の例がでてくるやつです。

あと、デザインパターンのコンポジションと直接的な関係ありません。
構成するとか合成するという意味があるので名前が同じなだけです。

投稿2017/06/05 04:35

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2017/06/05 04:53

>> 構成するとか合成するという意味があるので名前が同じ... なるほど。一応別物って感じですか。 。。。 ということは、関連と 集約は (ソースコード的には)大体同じだけど、 集約は "関連"の要素に 「全体の一部」というのを付け足したような感じの解釈で宜しいのでしょうか?
momon-ga

2017/06/05 08:17

だいたいよいと思います。要素というより意図を表したいという感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問