Java における関連付けは、オブジェクトを通じて設定された 2 つのクラス間の関係または接続です。この関連付けは、クラスが別のクラスについて知っており、別のクラスへの参照を保持していることを表します。これは、インスタンス フィールドを使用して Java で実装されるため、「has-a」関係として説明できます。各クラスが他のクラスへの参照を持っているため、関連付け関係は双方向にすることができます。関連関係はオブジェクトがどのように相互に接続されるかを表しますか?彼らはどのようにして相互に通信するのでしょうか?そして、お互いの機能をどのように利用するのでしょうか?関連関係には、1 対 1、多対 1、1 対多、多対多の 4 つのタイプがあります。
関連付けの 2 つの形式は、集約と合成です。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
集約は、エンティティ参照を通じて設定された 2 つのクラス間の関係です。それは、has-a と部分または全体の関係として説明できます。集約は、一方向または一方向の関連付けである関連付けの形式です。たとえば、顧客は注文を受けることができますが、その逆は不可能であるため、一方向になります。
class Customer{ int cid; String cname; Order ordering; }
構成関係は、2 つのクラス (またはエンティティ) が相互に高度に依存する、制限された形式の集約です。合成されたオブジェクトは、他のエンティティなしでは存在できません。この構図は関係の一部であると言えます。
次に、Java での関連付けのさまざまな例を示します。
ここでは、次の例でアソシエーション関係をより明確に理解するために Java コードを作成します。
コード:
package demo; import java.io.*; class Department { private String dname; public void setDepartmentName(String cname) { this.dname = cname; } public String getDepartmentName() { return this.dname; } } class Emp { public String ename; public void setEmployeeName(String ename) { this.ename = ename; } public String getEmployeeName() { return this.ename; } } class demo { public static void main (String[] args) { Department d = new Department(); Department d1 = new Department(); Emp e = new Emp(); Emp e1 = new Emp(); d.setDepartmentName("Sales"); d1.setDepartmentName("Accounting"); e.setEmployeeName("John"); e1.setEmployeeName("Joseph"); System.out.println(e.getEmployeeName() + " is working in " + d.getDepartmentName() + "."); System.out.println(e1.getEmployeeName() + " is working in " + d1.getDepartmentName() + "."); } }
出力:
上記のコードでは、Company と Employee の 2 つのクラスは、クラス Company が多数の従業員を持つことができるため、オブジェクトを通じて 1 対多の関係を表します。
次に、次の例で集計関係をより明確に理解するために Java コードを作成します。
コード:
import java.io.*; import java.util.*; class Customer { String cname; int cid ; String type; public static int cpp=0,ccod=0; Customer(String cname, int cid, String type) { this.cname = cname; this.cid = cid; this.type = type; if(type=="prepaid") cpp++; else ccod++; } } class Order { String type; //list of customer Objects associated with customer class as with its Object(s). */ private List<Customer> customers; public void setCustomers(String type, List<Customer> customers) { this.type = type; this.customers = customers; } public List<Customer> getCustomers() { return customers; } } class OnlineStore { // list of order Objects which associated with order as with its objects. private List<Order> orders; public void setnoCustomer( List<Order> orders) { this.orders = orders; } // count total customers of all orders in a given purchases public int getnoCustomer() { int noOfOrders = 0; List<Customer> customers; for(Order dept : orders) { customers = dept.getCustomers(); for(Customer s : customers) { noOfOrders++; } } return noOfOrders; } } class demo { public static void main (String[] args) { Customer c1 = new Customer("Mia", 1, "prepaid"); Customer c2 = new Customer("Priya", 2, "prepaid"); Customer c3 = new Customer("John", 1, "COD"); Customer c4 = new Customer("Rahul", 2, "COD"); List <Customer> cu1 = new ArrayList<Customer>(); cu1.add(c1); cu1.add(c2); // making a List of COD Customers List <Customer> cu2 = new ArrayList<Customer>(); cu2.add(c3); cu2.add(c4); Order pp = new Order(); pp.setCustomers("prepaid", cu1); Order cod = new Order(); cod.setCustomers("COD", cu2); List <Order> orders = new ArrayList<Order>(); orders.add(pp); orders.add(cod); // creating an OnlineStore instance. OnlineStore purchase = new OnlineStore(); purchase.setnoCustomer(orders); System.out.print("Number of Customers placed order are : "); System.out.println(purchase.getnoCustomer()); System.out.print("Number of Customers placed prepaid order are : "); System.out.println(Customer.cpp); System.out.print("Number of Customers placed cod order are : "); System.out.println(Customer.cpp); } }
出力:
上記のコードのように、オンライン ストアには No.前払いや代金引換などのご注文の場合。どのタイプの注文にも「いいえ」はありません。顧客の数、オブジェクトに関する OnlineStore クラス、またはいいえ。 Order クラスのオブジェクト。 onlineStore クラスは、Objects および Order クラスを通じて Order クラスに関連付けられます。また、Customer クラスのオブジェクトも参照します。つまり、オブジェクトを通じて Customer クラスに関連付けられ、Has-A 関係を表します。
次に、次の例で構成関係をより明確に理解するために Java コードを作成します。
コード:
class Car { private String color; private int wheels; public void carFeatures() { System.out.println("The color of the car is "+color + " and number of wheels are " + wheels); } public void setColor(String color) { this.color = color; } public void setwheels(int wheels) { this.wheels = wheels; } } class Maruti extends Car { public void setStart() { MarutiEngine e = new MarutiEngine(); e.run(); } } class MarutiEngine extends Maruti { public void run() { System.out.println("Engine is running..."); } public void stop() { System.out.println("Engine is not running... "); } } public class demo { public static void main(String[] args) { Maruti m1 = new Maruti(); m1.setwheels(4); m1.setColor("White"); m1.carFeatures(); m1.setStart(); } }
出力:
上記のコードと同様に、Car は、Maruti クラスのスーパークラスです。つまり、Car には次のものを含めることができません。マルティ車の一部であり、マルティはその一部としてMarutiEngineを使用しています。 Malti が存在しない場合、MarutiEngine も終了しません。このように、MarutiクラスとMarutiEngineクラスは構成関係を記述します。
Java での関連付けの使用:
上で見たように、コードの再利用を可能にするために関連付けが必要です。たとえば、上記の 2 つのクラス、Customer クラス、Order クラス、OnlineStore クラスを使用して顧客情報を保持しているため、プログラマは同じコードを何度も使用する必要がありません。
Java では、オブジェクトを設定することによって 2 つのクラス間の関係である関連付けを確立します。関連付けの形式には、集約と合成があります。 Java での関連付けの主な目的は、コードの再利用性です。
以上がJavaでの関連付けの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。