検索
ホームページJava&#&チュートリアル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 までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

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