オブジェクト間の関係

Java オブジェクト/クラス間には、依存関係、関連付け、合成、集約、継承、実現という 4 つの関係があります。

1.依存性

依存関係:あるオブジェクトの機能は別のオブジェクトに依存します。

  • 例え: 人間は生き残るために食べ物と空気に依存しています

  • 実施形態: 依​​存関係は、依存関係のローカル変数パラメータ、および静的メソッドの呼び出しとして具体化されます。

  • 例:

    UML:

    コード:

    public class Human {
          
          
        public void live(Food food) {
          
          
            Air.breath();
            food.eat();
        }
    }
    
    class Air {
          
          
        public static void breath() {
          
          
            System.out.println("呼吸...");
        }
    }
    
    class Food {
          
          
        public void eat() {
          
          
            System.out.println("进食...");
        }
    }
    

2. 協会

アソシエーション (Association):クラスは、別のクラスの状況 (プロパティ、メソッド) を知る必要があります。これは双方向または一方向の場合があります。

  • 類似点: 人間は、食事の際に、その食品の賞味期限が切れているかどうかを知る必要があります。

  • リフレクション: 関連付けられたオブジェクトは通常、メンバー変数として使用されます。

  • 例:

    UML:

    コード:

    public class Human {
          
          
    
        private Food food;
        public void judge() throws ParseException {
          
          
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
            if (format.parse(food.getExpiration()).compareTo(new Date()) > 0 ) {
          
          
                food.eat();
            } else {
          
          
                System.out.println("食物已经过期");
            }
        }
    
        public Human(Food food) {
          
          
            this.food = food;
        }
    }
    
    class Food {
          
          
    
        private String expiration;
    
        public void eat() {
          
          
            System.out.println("食物安全,可以食用");
        }
    
        public Food() {
          
          
            this.expiration = "2023-04";
        }
    
        public String getExpiration() {
          
          
            return expiration;
        }
    }
    

3. 集計

集約:強い関連関係 (has-a)。関連付けのオブジェクトは同じレベルにあり、集約は全体と個々のコンポーネントの間の関係です。個体は異なる全体間で共有することができます。たとえば、水素分子も水素原子で構成されています。

  • 類似: 水の分子は水素原子と酸素原子で構成されています

  • 実施例:集約オブジェクトをメンバ変数として使用する

  • 例:

    UML:

    コード:

    public class WaterMolecule {
          
          
    
        private HydrogenAtom2 hydrogenAtom2;
        private OxygenAtom atom;
    
        public WaterMolecule(HydrogenAtom2 hydrogenAtom2, OxygenAtom atom) {
          
          
            this.hydrogenAtom2 = hydrogenAtom2;
            this.atom = atom;
        }
    }
    
    class OxygenAtom {
          
          
    
    }
    
    class HydrogenAtom2 {
          
          
    
    }
    

4. 組み合わせ

構成:集合体よりも強力な関連関係 (is-a) 構成関係では、集合関係で全体を表すオブジェクトが、個人/部分を表すオブジェクトのライフ サイクル全体に責任があることが必要であるため、構成関係を設定することはできません。共有全体を表すオブジェクトが破壊または破壊される場合、個人を表すオブジェクトもまた破壊または破壊されなければなりません。

  • 例え: 人間と人間の心臓、脳

  • 実施形態:メンバ変数としての個々のオブジェクト

  • 例:

    UML:

    コード:

    public class Human {
          
          
        private Brain brain;
        private Heart heart;
        private String status;
    
        public void sustainLife() {
          
          
            brain.control(status);
            heart.beat(status);
        }
    
        public Human(Brain brain, Heart heart, String status) {
          
          
            this.brain = brain;
            this.heart = heart;
            this.status = status;
        }
    }
    
    class Brain {
          
          
        public void control(String status) {
          
          
            if (status.equals("0")) {
          
          
                System.out.println("脑死亡");
            } else {
          
          
                System.out.println("大脑控制身体");
            }
        }
    }
    
    class Heart {
          
          
        public void beat(String status) {
          
          
            if (status.equals("0")) {
          
          
                System.out.println("心跳停止");
            } else {
          
          
                System.out.println("心脏跳动");
            }
        }
    }
    

5. 継承

継承 (拡張):オブジェクト間の最も結合された関係は、親と子の関係です。

  • たとえ: 父と子
  • 実施形態:サブクラス(派生クラス)と親クラス(基底クラス、スーパークラス)
  • 例:

    UML:

    コード:
    public class Tom {
          
          
    	public void farm() {
          
          
    		System.out.println("种地");
    	}
    }
    
    class Jack extends Tom {
          
          
    	@Override
    	public void farm() {
          
          
    		System.out.println("种地");
    	}
    
    	public void makeWine() {
          
          
    		System.out.println("酿酒");
    	}
    }
    

6. 達成する

実装:インターフェイスと実装クラスの間の関係実装クラスは、インターフェイスで宣言されたすべてのメソッドを実装する必要があります。

  • 例:

    UML:

    コード:

    public interface Animal {
          
          
        void live();
    }
    
    class Cat implements Animal {
          
          
        @Override
        public void live() {
          
          
            System.out.println("生存");
        }
    } 
    

おすすめ

転載: blog.csdn.net/m0_54355172/article/details/129030090