Java >> Java tutorial >  >> Java

Association, aggregation og komposition i Java

Denne artikel er fokuseret på tre af de vigtigste OOP-begreber i Java, nemlig association, komposition og aggregering . Selvom de er beslægtede begreber, er der nogle forskelle i den måde, de bruges til at forbinde to klasser på. Association er forholdet mellem to klasser, der er baseret på deres objekter. Både aggregation og sammensætning er to typer foreninger.

Forening i Java

Association i Java er forholdet etableret mellem to klasser, der er muliggjort gennem deres objekter. Dette forhold kan være én til én, én til mange, mange til én og mange til mange.

For eksempel er en organisation og en medarbejder to forskellige enheder, men forholdet mellem organisationen og medarbejder er én til mange fordi en organisation kunne mange ansatte. Dette forhold mellem de to enheder kaldes association.

Eksempel på tilknytning i Java

import java.util.ArrayList;
import java.util.List;
public class Main {
  public static void main(String[] args) {
    Organ organization = new Organ();
    organization.setOrganizationName("Michel Page");   
    Empl empl1 = new Empl();
    empl1.setEmployeeName("Manoj");
    Empl empl2 = new Empl();
    empl2.setEmployeeName("Raghav");   
    List<Empl> empList = new ArrayList();
    empList.add(empl1);
    empList.add(empl2);   
    organization.setEmployees(empList);   
    System.out.println(organization.getEmployees()+" are Employees of "+
        organization.getOrganizationName());
  }
}
class Organ {
  private String organizationName; 
  List<Empl> empl1;
  public String getOrganizationName() {
    return organizationName;
  }
  public void setOrganizationName(String organizationName) {
    this.organizationName = organizationName;
  }
  public List<Empl> getEmployees() {
    return empl1;
  }
  public void setEmployees(List<Empl> empl1) {
    this.empl1 = empl1;
  }
}
class Empl {
  private String employeeName;

  public String getEmployeeName() {
    return employeeName;
  }
  public void setEmployeeName(String employeeName) {
    this.employeeName = employeeName;
  }
  @Override
  public String toString() {
    return employeeName;
  }
}

Output

[Manoj, Raghav] are Employees of Michel Page

Hvorfor bruge Association i Java?

Association bruges til at etablere en relation mellem objekter af to separate klasser, der kan være to helt forskellige enheder. Dette forhold indikerer, at en bestemt klasse er opmærksom på en anden klasse og har en reference til den klasse.

Hvornår skal du bruge Association i Java?

Association anvendes, når to klasser skal interagere med hinanden gennem deres objekter for at opnå et bestemt resultat. Det etablerer en måde at forbinde et eller flere objekter med objekter i andre klasser.

Disse multidirektionelle forbindelser udføres med succes gennem to af Associations former:

  • Komposition
  • Aggregation.

Aggregation i Java

Det er en særlig foreningsform, der bruges til at udvikle et envejsforhold mellem to klasser. Det kaldes også en ensrettet association og bruges til at repræsentere etHAR-A-forhold .

Eksempel på aggregation i Java

// Example code of Aggregation:
public class Main {
  public static void main(String[] args) {
    Add add = new Add();
    add.sethouseno("110");
    add.setsociety("Gokuldham");
    add.setCity("Chandighar");
    Emp emp = new Emp();
    emp.setId(475);
    emp.takeName("Rhagvendra");
    emp.setAdd(add);
    System.out.println("Employee Details :: " + emp);
  }
}
class Emp {
  private int id;
  private String name;
  // define employee's address
  private Add add; 
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String takeName() {
    return name;
  }
  public void takeName(String name) {
    this.name = name;
  }
  public Add getAdd() {
    return add;
  }
  public void setAdd(Add add) {
    this.add = add;
  }
  @Override
  public String toString() {
    return "Employee{" + "id=" + id + ", Name=" + name + ", Address=" + add + '}';
  }
}
class Add {
  private String houseno;
  private String society;
  private String city;
  public String gethouseno() {
    return houseno;
  }
  public void sethouseno(String houseno) {
    this.houseno = houseno;
  }
  public String getsociety() {
    return society;
  }
  public void setsociety(String society) {
    this.society = society;
  }
  public String getCity() {
    return city;
  }
  public void setCity(String city) {
    this.city = city;
  }
  @Override
  public String toString() {
    return "Address{" + "doorNo=" + houseno + ", society=" + society + ", city=" + city + '}';
  }
}

Output

Employee Details :: Employee{id=475, Name=Rhagvendra, Address=Address{doorNo=110, society=Gokuldham, city=Chandighar}}

Eksempel 2) Aggregation kan også bruges til genbrug af kode.

// show simple aggregation example HAS A relation between car and engine.
class engine{
   public void show(){
      System.out.println("The Engine is a main part of the car .");
   }
}
public class Main {
   public static void main(String args[]){
      //Engine class object in Car class
      engine obj = new engine();
      obj.show();
   }
}

Output

The Engine is a main part of the car.

Hvorfor bruge aggregation i Java?

Vi bruger aggregering, når vi ønsker at genbruge koden i vores program. For eksempel har Objekt A1 en reference til et andet objekt kaldet Objekt A2. De har et HAS-A-forhold mellem dem. Da Objekt A1 har reference til Objekt A2, kan funktionaliteterne af Objekt A2 bruges af Objekt A1. På samme måde kan enhver klasse, der har en reference til Objekt A2, bruge dens metoder.

Hvornår skal man bruge aggregation i Java?

Aggregation bruges primært til at forbinde to klasser, hvor den aggregerede klasse har en reference til en anden klasse. Denne klasse har ejerskabet af den anden klasse. Når vi vil undgå at have cykliske referencer mellem de to klassers forhold, bruger vi denne form for association.

Komposition i Java

En komposition er en begrænset form for aggregering, hvor de to objekter er meget afhængige af hinanden. Når en komposition eksisterer mellem to objekter, kan det sammensatte objekt ikke eksistere uafhængigt.

Eksempel på komposition i Java

I dette eksempel vil vi definere en klasse Dato til for at vedligeholde alle oplysninger om datoen, og derefter vil vi definere en klasse Medarbejder, som ikke kun vil indeholde medlemmers id, navn og visning () men vil også indeholde en referencevariabel hireDate for at henvise sammenføjningsoplysninger om objekterne i klasse Date som dets medlem, som vedligeholder medarbejderens ansættelsesoplysninger.

Efterhånden som udførelsen er færdig, vil emp.display ()-funktionen vise medarbejderens id, navn og hireDate . HireDate opnås som et implicit kald til Date klassens toString () metode .

// Example code of Composition
class date
{
  private int dy;
  private int mnth;
  private int yr;
  date(int dd, int mm,int yy)
  {
   System.out.println("Constructor is Called from date Class");
   dy=dd;
   mnth=mm;
   yr=yy;
  }
  public String toString()
  {
   return (dy+"/"+mnth+"/"+yr);
  }
}
 class Employee
{
  private int id;
  private String name;
  private date hiredate; //object of Data class
  Employee(int num,String n, date hire)
  {
   System.out.println(" Constructor is Called of Employee class");
   id=num ;
   name=n ;
   hiredate=hire;
  }
  public void display()
  {
   System.out.println("id = "+id);
   System.out.println("Name = "+name);
   System.out.println("Hiredate = "+hiredate);
  }
}
 public class Main
 {
   public static void main(String[] args)
    {
        date d = new date(31,03,2019);
        Employee emp = new Employee(10,"Rahul Tanwar",d);
        emp.display();
    }
 }

Output

Constructor is Called from date Class
Constructor is Called of Employee class
id = 10
Name = Rahul Tanwar
Hiredate = 31/3/2019

Eksempel 2)

package com.tutorial.javabasic;
 class Twowheelar {
  public String getDetails() {
  return "This is two wheelers details can be bike or scooter";
 }
}
 class bike extends Twowheelar {
}
 public class Main {
  public static void main(String[] s) {
 bike c = new bike();
 String details = c.getDetails();
 System.out.println(details);
 }
} 

Output:

This is two wheelers details can be bike or scooter 

Hvorfor bruge sammensætning i Java?

Sammensætning bruges, når vi ønsker at etablere en DEL-AF forholdet mellem to objekter og det ene skal være afhængigt af det andet.

Hvornår skal du bruge Composition i Java?

Sammensætning i Java bruges til at gøre koden genbrugelig, men koden bevares, og indkapslingen er ikke hæmmet. Derudover tillader sammensætning også bedre test af klasser, såsom enhedstest. I testdrevet udvikling vælges sammensætning ofte frem for arv på grund af dens anvendelighed.

Komposition vs. aggregation

Komposition

Aggregation

Her er de to objekter meget afhængige af hinanden. Den underordnede klasse kan ikke fungere uden den overordnede klasse.

Her kan to objekter eksistere uafhængigt af hinanden. En børneklasse kan arbejde frit uden forældreklassen.

Det er en form for stærk association.

Det er en form for svag association.

Den har en PART-OF forholdet mellem to objekter.

Det er et HAS-A forholdet mellem to objekter.

Oversigt

Alle de ovenfor diskuterede begreber bruges i Java baseret på deres type forhold, der skal etableres mellem to klasser. Men alle funktionaliteterne hjælper med at genbruge koden, der er skrevet én gang, og reducerer den overordnede kompleksitet.


Java tag