私は数年前からJava開発者であり、約1年前にAndroid開発に移行しました。Androidに取り組んだ後、iOSで運試しをしました。これまでのところ良いですが、私はまだ「代表者」のアイデアに非常にかすんでいます。私はここでいくつかの記事を読みましたが、まだそれらについての最良のアイデアを持っていません。私には、インターフェースや抽象クラスの使用など、Javaの継承に似ているように見えます。
誰かが私が理解できるという観点で明確にすることができますか?
前もって感謝します。
私は数年前からJava開発者であり、約1年前にAndroid開発に移行しました。Androidに取り組んだ後、iOSで運試しをしました。これまでのところ良いですが、私はまだ「代表者」のアイデアに非常にかすんでいます。私はここでいくつかの記事を読みましたが、まだそれらについての最良のアイデアを持っていません。私には、インターフェースや抽象クラスの使用など、Javaの継承に似ているように見えます。
誰かが私が理解できるという観点で明確にすることができますか?
前もって感謝します。
いいえ、それは継承の同じ概念ではありません。
これは、AWT/Swingで使用されているリスナーアプローチのようなものだと思います。例えば:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) { ... }
}
myComponent.addActionListener(new MyActionListener);
これは、ObjCでのデリゲートアプローチでは次のようになります。
@class MyActionListener : NSObject<NSActionListener>
-(void) actionPerformed:(NSEvent*)event;
@end
myComponent.delegate = [[[MyActionListener alloc] init] autorelease];
実際には、クラスの動作の一部を、コンポジションで使用される(継承ではなく)特定の他のオブジェクトにデリゲートして、必要なときにデリゲートメソッドが呼び出されるようにします(コールバック、特定の実装などを提供するため)。
オブジェクトを使用する場合、そのクラスからいくつかのコールバックメソッドを継承できます。基本的に、そのオブジェクトにイベントがある場合に応答できます。
オブジェクトクラスは、そのイベントをクラスインスタンスに「委任」しています。