対象試験と出題頻度
集約は、基本情報技術者・応用情報技術者で出題されるテーマです。
UMLのクラス図におけるクラス間の関係を問う問題で登場し、コンポジションや汎化(継承)との違いを正確に区別できるかがカギになります。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「集約とコンポジションって何が違うの?」「汎化とどう見分けるの?」と混乱しがちです。
集約(Aggregation)とは、一言で言うと
「クラス図で『全体と部品』の関係を表し、部品が全体から独立して存在できる関連」
のことです。
イメージとしては、「会社と従業員の関係」です。
従業員は会社の一部ですが、会社が消滅しても従業員という人間が消えるわけではありません。部品(従業員)は全体(会社)がなくなっても独立して存在し続けます。これが集約の本質です。
📊 集約の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Aggregation |
| UMLでの分類 | クラス図におけるクラス間の関係の一種 |
| 記号 | 白抜きひし形(◇)を全体側に付ける |
| 別名 | has-a関係、part-of関係 |
解説
オブジェクト指向設計では、クラス同士の関係を正確に表現する必要があります。「AはBの一種」なのか「AはBの一部」なのかで設計の意味がまったく変わるためです。
集約は「全体(whole)と部品(part)」の関係を示す手段として導入されました。全体側のクラスに白抜きひし形(◇)を付けた線で部品側のクラスとつなぎます。
図解:集約の記法
集約(Aggregation)のクラス図表現
▲ 白抜きひし形(◇)は全体側(会社)に付ける。部品(従業員)は全体が消えても存在し続ける
コンポジションとの違い
集約と最も混同されるのがコンポジション(Composition)です。ここだけは確実に押さえてください。
コンポジションは「全体が消えると部品も消える」強い所有関係です。記号は黒塗りひし形(◆)を使います。たとえば「注文」と「注文明細」の関係がこれに当たります。注文を削除すれば、注文明細も一緒に消えます。
一方、集約は前述の通り部品が独立して存続できる緩い所有関係です。
| 比較項目 | 集約(Aggregation) | コンポジション(Composition) |
|---|---|---|
| 記号 | ◇(白抜きひし形) | ◆(黒塗りひし形) |
| ライフサイクル | 部品は全体と独立して存在できる | 全体が消えると部品も消える |
| 所有の強さ | 弱い(参照を持つだけ) | 強い(生成から破棄まで管理) |
| 例 | 会社 ◇─ 従業員 | 注文 ◆─ 注文明細 |
汎化(継承)との見分け方
もう一つ混同しやすいのが汎化(Generalization)です。汎化は「AはBの一種である(is-a関係)」を表し、記号は白抜き三角(△)です。
集約が「AはBの一部である(part-of / has-a関係)」を表すのに対し、汎化は「犬は動物の一種」のような分類の階層を示します。属性と操作の共有が起きるのは汎化であり、集約では起きません。
クラス間の関係 ─ 記号の見分け早見表
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 集約の核心を3行で
・クラス図で「全体と部品」の関係を白抜きひし形(◇)で表す
・部品は全体が消えても独立して存在できる(弱い所有)
・コンポジション(◆)との違いは「部品のライフサイクルが独立しているかどうか」
試験ではこう出る!
集約は、FE・APの午前問題でクラス図の関係を問う問題として繰り返し出題されています。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H18春 問39 |
クラス図で集約の関係にあるクラスを選ぶ問題。 | ・白抜きひし形(◇)の記号を読み取れるか ・関連・汎化・依存の記号との区別 |
| FE H22春 問47 |
クラス間の関係について適切な記述を選ぶ問題。 | ・「集約オブジェクトは部品オブジェクトと属性・操作を共有する」は誤り ・汎化との混同を狙ったひっかけ |
| AP R6春 午前 問45 |
FE H22春 問47と同一構成の問題(流用)。 | ・FEとAPで同じ問題が出回る典型例 ・正解はオーバーライドの記述 |
| AP H25春 午前 問45 |
「顧客が複数の商品をまとめて注文する」クラス図を選ぶ問題。 | ・コンポジション(◆)の使い分け ・多重度の読み取りとセットで出題 |
📝 IPA試験での出題パターン
パターン1:「記号を読み取って関係を答えよ」
クラス図が提示され、どのクラス間が集約関係にあるかを選ぶ形式。白抜きひし形(◇)を正しく見分けられればそれだけで正解できる。
パターン2:「クラス間の関係の記述で正しいものを選べ」
集約に関する誤った記述(「属性と操作を共有する」など)をひっかけに使い、汎化の特徴と混同させる。集約は参照を所有するだけで、属性・操作の共有は起きない──この一点を覚えておけば引っかからない。
試験ではここまででOKです。集約とコンポジションの厳密な使い分け基準はUML仕様書でも議論が残る部分なので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. UMLのクラス図における集約(Aggregation)の説明として、最も適切なものはどれでしょうか?
- A. サブクラスがスーパークラスの属性と操作を引き継ぐ「is-a」の関係を表し、白抜き三角(△)で示す。
- B. 全体と部品の関係を表し、部品は全体が消えても独立して存在できる。白抜きひし形(◇)で示す。
- C. 全体と部品の強い所有関係を表し、全体が消えると部品も一緒に消える。黒塗りひし形(◆)で示す。
正解と解説を見る
正解:B
解説:
集約(Aggregation)は、クラス図で全体と部品の関係を白抜きひし形(◇)で示す表現であり、部品のライフサイクルは全体から独立しています。
選択肢Aは汎化(Generalization)の説明です。汎化は「is-a」の関係を表し、属性と操作を継承する点が集約とは根本的に異なります。選択肢Cはコンポジション(Composition)の説明です。コンポジションは全体が消えると部品も消える強い所有関係であり、記号も黒塗りひし形(◆)である点で集約と区別されます。
よくある質問(FAQ)
Q. 実務のコードで集約はどう実装しますか?
集約は、あるクラスが別のクラスのインスタンスをフィールド(メンバ変数)として保持する形で実装します。ただし、保持しているインスタンスの生成・破棄は外部に任せます。Javaで言えば、コンストラクタやセッターで外部から渡されたオブジェクトを受け取る形が典型です。一方コンポジションでは、クラス内部でインスタンスを生成し、自身の破棄と同時に処分します。
Q. 集約とコンポジションの判断に迷ったらどうすればいいですか?
「全体オブジェクトを削除したとき、部品オブジェクトも一緒に消えるべきか」を基準に判断します。消えるならコンポジション、消えないなら集約です。IPA試験の選択肢レベルでは、この基準だけで十分に判別できます。
Q. 「集約では属性と操作を共有しない」のはなぜですか?
集約は「所有」の関係であり、全体クラスは部品クラスへの参照を保持しているだけです。部品クラスの内部構造(属性・操作)を引き継ぐわけではありません。属性と操作の継承が起きるのは汎化(is-a関係)であり、集約(has-a関係)とは設計上の意味がまったく異なります。FE H22春 問47では、まさにこの違いをひっかけに使った選択肢が登場しています。
Q. UML仕様では集約はどう定義されていますか?
OMG(Object Management Group)のUML 2.5仕様書では、集約は「shared aggregation」と呼ばれ、意味論の詳細は「特にない(no additional semantics)」と明記されています。つまり厳密な振る舞いの定義はモデル作成者に委ねられています。このためUML仕様レベルでは「集約とコンポジションの境界が曖昧だ」という議論が存在しますが、IPA試験ではそこまで踏み込まれません。「部品が独立して存続できるかどうか」の区別さえできれば得点に直結します。