ホームページ Java &#&チュートリアル Java における依存関係、関連付け、集約、および組み合わせの違いの詳細な説明

Java における依存関係、関連付け、集約、および組み合わせの違いの詳細な説明

Aug 10, 2017 pm 01:48 PM
java 組み合わせ 重合

この記事では、Java の依存関係、関連付け、集約、結合の違いを簡単に説明します。興味のある方は一緒に読んでください。見てください

まず、この本の中でこれら 4 つの関係の定義を見てください:

  •  依存関係はクラス間の接続です。依存関係は、あるクラスが別のクラスの定義に依存していることを示します。たとえば、人 (Personal) は車 (car) と家 (House) を購入できます。これは、Person クラスが Car と House を参照するためです。アソシエーションとは異なり、Person クラスには Car および House タイプの属性はありません。Car および House のインスタンスはパラメータとして buy() メソッドに渡されます。一般に、依存関係はローカル変数、メソッドの仮パラメータ、または静的メソッドの呼び出しとして Java 言語に反映されます。

  •  アソシエーション(関連)関係とは、クラス間の接続であり、あるクラスが別のクラスの属性やメソッドを知ることができます。アソシエーションは双方向または単方向にすることができます。 Java 言語では、通常、関連関係はメンバー変数を使用して実装されます。

  •  集合関係は関連関係の一種であり、強い関連関係です。集合体とは、全体と個人との関係です。例えば、自動車というカテゴリーと、エンジンやタイヤなどの部品カテゴリーとの関係は、全体と個の関係です。関連関係と同様に、集約関係もインスタンス変数を通じて実装されます。ただし、関連付け関係に含まれる 2 つのクラスは同じレベルにありますが、集約関係では 2 つのクラスは等しくないレベルにあり、1 つは全体を表し、もう 1 つは部分を表します。

  •  構成関係は、集合関係よりも強い関連関係の一種です。通常の集約関係では全体を表すオブジェクトがその一部のライフサイクルを担う必要があり、結合関係を共有することができない。全体を表すオブジェクトは、部分オブジェクトを存続させ、場合によっては部分を担当するオブジェクトを消滅させる責任を負う必要があります。全体を表すオブジェクトは、部分を表すオブジェクトを、このオブジェクトのライフサイクルを担当する別のオブジェクトに渡すことができます。言い換えれば、パーツを表すオブジェクトは、各瞬間に 1 つのオブジェクトとのみ組み合わせることができ、後者がライフ サイクルに対して独占的に責任を負います。部品には全体と同じライフサイクルがあります。

- 「Java オブジェクト指向プログラミング」より抜粋

上記の関係の結合度は徐々に強化されます (結合度の概念については後で詳しく説明します。ここで、1 つのクラスが変更されると、 、他のクラスに変化を引き起こします。影響が小さいほど結合は弱く、影響が大きいほど結合は強くなります。定義から、依存関係は実際には比較的弱い関連性、集約は比較的強い関連性、結合はより強い関連性であることがすでにわかっているため、これらを一般的に区別すると、実際には、これら 4 つの関係はすべて関連関係になります。

クラス、ドライバーの 3 つのメソッドは、3 つの異なる形式の依存関係を示します。


class Car { 
  public static void run(){ 
    System.out.println("汽车在奔跑"); 
  } 
} 
class Driver { 
  //使用形参方式发生依赖关系 
  public void drive1(Car car){ 
    car.run(); 
  } 
  //使用局部变量发生依赖关系 
  public void drive2(){ 
    Car car = new Car(); 
    car.run(); 
  } 
  //使用静态变量发生依赖关系 
  public void drive3(){ 
    Car.run(); 
  } 
}
ログイン後にコピー

アソシエーション関係は、通常、メンバー変数を使用して Java で実装されますが、場合によってはメソッド パラメーターの形式で実装されます。 Driver と Car の例を引き続き使用すると、メソッド パラメーター フォームを使用して依存関係や関連性を表現できます。結局のところ、プログラム内でセマンティクスをあまり正確に表現することはできません。この例では、メンバー変数を使用してこの意味を表現します。つまり、車は私の車であり、私はこの車を「所有」しています。メソッド パラメーターを使用して次のことを表現します。車は私のものではありません。私は他人から与えられた車を運転する単なるドライバーであり、この車を使用します。


class Driver { 
  //使用成员变量形式实现关联 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
  ... 
  //使用方法参数形式实现关联 
  public void drive(Car car){ 
    car.run(); 
  } 
}
ログイン後にコピー

集計関係は比較的強い関連関係であり、一般に Java ではメンバー変数の形式で実装されます。オブジェクト間には全体と部分の関係があります。たとえば、上記の例では


class Driver { 
  //使用成员变量形式实现聚合关系 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
}
ログイン後にコピー

上記のコードに次のセマンティクスが与えられているとします。 車は自家用車であり、ドライバーの所有物の一部です。次に、同じコードが集計関係を表します。集計関係では通常、setter メソッドを使用してメンバー変数に値を割り当てます。

次のセマンティクスが与えられたとします。車はドライバーにとって必須の財産です。車がなくなったら、ドライバーは生きたくなくなるでしょう。そして、ドライバーがドライバーでなくなったら、車は壊れてしまい、他の人は使えなくなります。つまり組み合わせの関係ということになります。一般的には、組み合わせ関係を表現するために、初期化の目的を達成するためにコンストラクターを使用することが多いです。例えば、上記の例では、Car を引数とするコンストラクターを追加します


public Driver(Car car){ 
  mycar = car; 
}
ログイン後にコピー

        所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。

以上がJava における依存関係、関連付け、集約、および組み合わせの違いの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

See all articles