検索
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 );
}
}</meetingroom></desk></meetingroom></desk>

デモ.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();
}
}</meetingroom></meetingroom></desk></desk>

出力:

Javaでの構成

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

結論

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

以上がJavaでの構成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

归纳整理JAVA装饰器模式(实例详解)归纳整理JAVA装饰器模式(实例详解)May 05, 2022 pm 06:48 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。

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

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター