一般化(=継承)
定義#テイギ#
一般化は別のカプセル化です
現実に見られる問題
果物->バナナ、りんご、梨、オレンジの共通概念(要約)
バナナ、りんご、梨、オレンジ
일반화했을 경우
それぞれの果物の種類を気にする必要がなく、果物全体を処理する手段を得ることができます.
「今、冷蔵庫には果物がいくつ入っていますか?」
일반화의 개념이 없는 경우
どの果物も面倒な質問をしなければならない.
「冷蔵庫には今りんごがいくつありますか?」「冷蔵庫には今何個の梨が入っていますか?」「冷蔵庫にバナナは何個入っていますか?」「冷蔵庫の中にオレンジがいくつありますか?」
가격 총합 = 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
この問題について(一般化(=継承)), 我々は、より多くの情報をここで見つけました https://velog.io/@y_dragonrise/객체지향-설계-일반화Generalization상속テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol