一般化(=継承)


定義#テイギ#


一般化は別のカプセル化です
  • 一般化関係(=オブジェクト向けプログラミングの観点での継承関係)
  • の属性または機能の再利用については、ほとんどの場合->一般化関係を非常に限られた視点で見る
  • である.
  • 「一種の関係」は
  • を設立しなければならない.
    現実に見られる問題

  • 果物->バナナ、りんご、梨、オレンジの共通概念(要約)

  • バナナ、りんご、梨、オレンジ
  • 일반화했을 경우

  • それぞれの果物の種類を気にする必要がなく、果物全体を処理する手段を得ることができます.
    「今、冷蔵庫には果物がいくつ入っていますか?」
  • 일반화의 개념이 없는 경우

  • どの果物も面倒な質問をしなければならない.
    「冷蔵庫には今りんごがいくつありますか?」「冷蔵庫には今何個の梨が入っていますか?」「冷蔵庫にバナナは何個入っていますか?」「冷蔵庫の中にオレンジがいくつありますか?」
  • 가격 총합 = 0
    while(장바구니에 과일이 있다){
      switch(과일 종류)
        case 사과:
          가격 총합 = 가격 총합 + 사과 가격
        case:
          가격 총합 = 가격 총합 + 배 가격
        case 바나나:
          가격 총합 = 가격 총합 + 바나나 가격
        case 오렌지:
          가격 총합 = 가격 총합 + 오렌지 가격
    }
    새로운 과일의 종류가 추가되었을 때
    가격 총합 = 0
    while(장바구니에 과일이 있다){
      switch(과일 종류)
        case 사과:
          가격 총합 = 가격 총합 + 사과 가격
        case:
          가격 총합 = 가격 총합 + 배 가격
        case 바나나:
          가격 총합 = 가격 총합 + 바나나 가격
        case 오렌지:
          가격 총합 = 가격 총합 + 오렌지 가격
        case 키위: // 추가된 항목
          가격 총합 = 가격 총합 + 키위 가격
    }
    =>新しいフルーツタイプを追加すると、頻繁なコード修正や柔軟な処理ができないという問題が発生します.
    int computeTotalPrice(LinkedList<Fruit> f){
      int total = 0;
      Iterator<Fruit> itr = f.iterator();
      
      while(itr.hasNext()){
        Fruit curFruit = itr.next();
        total = total + curFruit.calculatePrice();
      }
      return total;
    }
    =>calculatePrice法は実際の果物オブジェクトのタイプによって異なるため、たけいせいの概念に従うと考えられる.
    例えば、一般化関係は、サブクラスを外部世界にカプセル化(または非表示)する概念と見なすことができ、この場合、カプセル化概念は、1つのクラスにおける属性および演算のカプセル化に限らず、一般化関係によってクラス自体をカプセル化に拡張する.これらのサブクラスパッケージにより、外部クライアントが個別のクラスとは独立してプログラミングできるようになります.
  • 「ヒト」レベルの観点では、カプセル化(隠匿)により自動車の種類は見られない.
  • 代行運転は自動車の種類の影響を受けない
  • 一般化関係と委任


    クラスの一部の機能のみを再利用したい場合は、委任を使用して、自分で機能を実行するのではなく、他のクラスのオブジェクトに機能を実行できます.
    汎用(継承)を위임で置き換える
  • サブクラスに親インスタンスを参照するプロパティを作成します.この属性フィールドを
  • に初期化
  • サブクラスで定義されたメソッドごとに前回作成された委任属性フィールドを参照するように変更します.
  • サブクラスから一般化関係宣言を削除し、「委任属性」フィールドにスーパークラスオブジェクトを作成します.
  • サブクラスで使用されるスーパークラスメソッドに委任メソッドを追加します.
  • をコンパイルし、正常に動作していることを確認します.
  • Reference
  • 鄭仁相、蔡興錫、『JAVA対象設計モデル』、韓光メディア(2019.3.8)、68-73 p