2011-01-30 8 views
0

は私に、次のOOPの概念の名前を誰かを与えることができます:OOPの概念とは何ですか? (それは確かにある場合、すべてのOOPの概念を!)

私は2つのクラスがあります& B.を両方とも、たとえば異なる2つの方法ごと(すべてを持っています)。今、私は第三のクラスを作成し、C。今、私はCに& Bのすべてのメソッドを公開するここでは、デモのいくつかの並べ替えです:

class A 
    int method_in_A_one() { 
    } 

    int method_in_A_two() { 
    } 
end 

class B 
    int method_in_B_one() { 
    } 

    int method_in_B_two() { 
    } 
end 

class C 
    C() { 
     A an_instance_of_a; 
     B an_instance_of_b; 
    } 
} 

Now I want to be able to do this: 

C instance_of_c = new C; 

insance_of_c.method_in_A_one(); 
insance_of_c.method_in_A_two(); 
insance_of_c.method_in_B_one(); 
insance_of_c.method_in_B_two(); 

私は本当にまだこのための使用を持っていないが、私はそれを扱っている特定のコンセプトを確信しています。事前にありがとう、ell。

+0

私はB an_instance_of_bを意味すると思います。 B an_instance_of_cの代わりに; ? – Roger

+0

ええ、申し訳ありませんが、私は今、おかげでそれを修正します:) – Ell

答えて

3

これについてobject compositiondelegationされています。あなたのクラスが他のクラス(例では - CABによって構成されて)によって構成されている場合

  • 物組成物である
  • ときそこ方法委任があります所有クラスで代理人を作成するクラスのメソッドに

n私が知っている言語であれば、委譲は手動で行われます。Cでメソッドを宣言し、基礎となるオブジェクトのそれぞれのメソッドを呼び出す必要があります。

これを達成する別のオプションがあることに注意してください。複数の継承がありますが、あなたの例はそれを正確に示していません。これは、CABの両方であることを意味します。しかし、一部の言語では禁止されています。オブジェクトの構成は、とにかく優れた方法です。

0

複数の継承のようなサウンド、または共通のインターフェイス。しかし、AとBの両方をCでカプセル化していて、どちらかを基本クラスとして公開しているわけではありません。

3

ここにはいくつかのことがあります。あなたのCタイプはの構成のAとBタイプで作成されました。これはサブクラス化の一般的な代替方法です。

Cの意図が、AとBを扱うためのより簡単なインターフェースを提供することであれば、ファサードパターンの例になります。

Cは、デコレータパターンの例になるように、ラップされたオブジェクトに追加の機能を提供する場合(たとえば、method_in_A_oneの実装にラップされたオブジェクトで呼び出す前にいくつかの追加作業を行うことによって)

CがA/Bのコンセプトを、別のライブラリが期待するフォームに変換する場合(例:NSDictionaryサブクラスでC++ std :: mapをラッピングしてCocoaで使用する場合)、アダプタパターンになります。

+0

潜在的なパターンの良い説明、および組成! – XIVSolutions

関連する問題