目次
Java で Composition を実装する例
電話.Java
デスク.Java
会議室.Java
Office.java
デモ.Java
結論

Javaでの構成

Aug 30, 2024 pm 04:12 PM
java

構成は、2 つのオブジェクト間の「部分」関係を表すために使用される関連付けのタイプです。 Java の合成は、「Has-a」関係内の 2 つのエンティティが独自の存在を持ち、互いに依存しない、別のタイプの関連付け集約の制限された形式です。合成では、エンティティの 1 つが他のエンティティに含まれており、単独で存在することはできません。 is-a 関係を表すために使用される継承とは異なります。

たとえば、Car と Engine という 2 つのクラスがあり、Car はエンジン オブジェクトで構成され、エンジン エンティティは Car なしでは存在しません。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Javaでの構成

構文:

class C1{
// A class represents the dependent entity
}
class C2{
//This class represents the entity that contains the dependent entity by declaring the object of the above class as one of its member variables.
private C1 a;
}
ログイン後にコピー

上記の構文を使用すると、C1 がその存在について他のエンティティに依存する、上記 2 つのエンティティ間に「isPart-Of」関係を確立できます。また、依存オブジェクトの存在はオプションであることも説明できます。

Java で合成が必要なのはなぜですか?

2 つのエンティティの表現に継承を使用すると、IS-A 関係のみが存在できることがわかります。ただし、2 つのエンティティに has-a 関係が含まれる場合は、集計が必要です。集計には 2 つの異なるタイプがあります:

1.協会

これは、HAS-A 関係で 2 つのエンティティが存在するが、一方のエンティティが他方の存在に依存していない関係を表すために使用されます。また、これは一方向タイプの関連付けです。たとえば、銀行と従業員は 2 つのエンティティであり、銀行という 1 つのエンティティが複数の従業員に関連付けられる可能性があります。したがって、銀行は従業員と 1 対多の関係を持ちますが、その逆は存在しません。

2.構成

これは、2 つのエンティティの 1 つが別のコンテナ エンティティ内で構成される場合に使用される、限定的なタイプの関連付けです。構成されたエンティティは、コンテナ オブジェクトなしでは存在できません。ただし、null で構成されたエンティティを持つこともできます。したがって、双方向の PART-OF 関係を表すために使用されます。したがって、両方のエンティティは相互に依存しています。

Java での合成はどのように機能しますか?

合成は 2 つのエンティティ間の PART-OF タイプの関係を実装するために使用されるため、一方のエンティティはコンテナと呼ばれ、もう一方は合成エンティティと言われます。  構成されたエンティティは完全なコンテナ オブジェクトに似ており、独自のプロパティと操作を備えているため、個別のエンティティが作成されます。このクラスは他のコンテナ クラスで合成エンティティとして使用できるため、コードの再利用にも役立ちます。たとえば、Engine は合成されたクラスであり、Car、TwooWheeler などはそのコンテナ クラスになります。

合成されたクラスはコンテナ エンティティの一部であるため、両方とも相互に依存関係を持ちます。ただし、それでも、Car には強制的にエンジンが必要ないなど、構成されたクラスが null になる可能性があります。これにより、Comused クラスは、その存在がコンテナ クラスに完全に依存するようになります。また、Composition は型の関連付けであるため、PART-OF 関係は HAS-A 関係のサブクラスとも言えます。このようにして、Composition は、継承を使用せずに、相互に依存する 2 つのエンティティ間の関係を実装するのに役立ちます。

Java で Composition を実装する例

デスク、会議室などのさまざまなリストで構成されるオフィスの場合を考えてみましょう。各デスクには 1 台の固定電話があるため、デスク オブジェクトはさらに電話オブジェクトで構成されます。

Javaでの構成

電話.Java

コード:

package Try;
public class Phone {
private String Model;
private String contactNum;
Phone (String model, String num){
this.Model=model;
this.contactNum=num;
}
public void getPhoneDetails(){
System.out.println("Phone Model "+ this.Model);
System.out.println("Desk Number " + this.contactNum);
}
}
ログイン後にコピー

デスク.Java

コード:

package Try;
public class Desk {
private String id;
private String Mid;
private Phone deskNum;
private String personName;
Desk(String id,String mid,Phone contact,String name){
this.id=id;
this.Mid = mid;
this.deskNum=contact;
this.personName=name;
}
public void getDeskDetails(){
System.out.println("Desk Details :-");
System.out.println("Id " + this.id);
System.out.println("Machine ID "+ this.Mid);
System.out.println("Allocated To " + this.personName);
this.deskNum.getPhoneDetails();
}
}
ログイン後にコピー

会議室.Java

コード:

package Try;
public class MeetingRoom {
private String name;
private Phone contact;
private String location;
private int numChairs;
private int numTables;
MeetingRoom(String name,Phone contact,String location,int nChairs, int nTables){
this.name=name;
this.contact=contact;
this.location=location;
this.numChairs=nChairs;
this.numTables=nTables;
}
public void getMeetingRoomDetails(){
System.out.println("Meeting Room Details :-");
System.out.println("Name " +this.name);
System.out.println("Location "+ this.location);
System.out.println("Number OF Chairs " + this.numChairs);
System.out.println("Number OF Tables "+this.numTables);
contact.getPhoneDetails();
}
}
ログイン後にコピー

Office.java

コード:

package Try;
import java.util.List;
public class Office {
private String offcName;
private List<Desk> deskList;
private List<MeetingRoom> roomList;
private int pantryNum;
public Office(String name , List<Desk> dList, List<MeetingRoom> mList,int pnum){
this.offcName = name;
this.deskList = dList;
this.roomList = mList;
this.pantryNum =pnum;
}
public void getDetails(){
System.out.println("Below are details of "+ offcName +"Office");
for(Desk a:deskList){
a.getDeskDetails();
}
for(MeetingRoom m:roomList){
m.getMeetingRoomDetails();
}
System.out.println("Number Of pantry " + pantryNum );
}
}
ログイン後にコピー

デモ.Java

コード:

package Try;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.ArrayList;
import java.util.List;
public class Demo extends Frame {
public static void main(String[] args){
List<Desk> dList =new ArrayList<Desk>();
List<MeetingRoom> mList =new ArrayList<MeetingRoom>();
Phone p1=new Phone("NOTOROLA","12346");
Phone p2=new Phone("NOTOROLA","35235");
Phone p3=new Phone("BSNL","23233");
Phone p4=new Phone("BSNL","123346");
Desk d1 =new Desk("S121","M12",p1,"Tom");
Desk d2 =new Desk("S122","M14",p2,"Pam");
dList.add(d1);
dList.add(d2);
MeetingRoom m1=new MeetingRoom("Kurukshetra",p3,"Floor_10",10, 2);
MeetingRoom m2=new MeetingRoom("Karnal",p4,"Floor_9",20, 3);
mList.add(m1);
mList.add(m2);
Office o1= new Office("Banglore" , dList,  mList,20);
o1.getDetails();
}
}
ログイン後にコピー

出力:

Javaでの構成

説明: 上記のプログラムでは、Office オブジェクトはデスクと会議室エンティティのリストで構成され、さらにデスクと会議室は電話エンティティで構成されます。ここで、電話は常にデスクまたは会議室オブジェクトに関連付けられているため、存在しません。また、会議室とデスクは Office オブジェクトに依存しています。ここでは、単一の電話クラスをデスクと会議室で構成されたエンティティとして使用できるため、コードの再利用性の実現に役立ちます。

結論

これは、双方向の関係を持つ 2 つのエンティティ間の PART-OF 関係を実装するために使用される制限的なタイプの集約であり、コンテナ エンティティなしでは存在しなかった合成エンティティを持ちます。構成されたクラスで行われた変更は、コードの残りの部分やコードの再利用に影響を与えないため、これは有益です。

以上が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の完全数 Aug 30, 2024 pm 04:28 PM

Javaの完全数

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

Java の乱数ジェネレーター

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

ジャワのウェカ

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Javaのアームストロング数

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

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 Foreachから休憩または戻ってきますか?

See all articles