1

私はbadaを使用しており、ここから始まるチュートリアルを参照してください。

    class MainForm:
       public Osp::Ui::Controls::Form,
       public Osp::Ui::IActionEventListener,
       public Osp::Ui::ITouchEventListener
    {

パブリックAPIを削減するために、最近パブリック指定子を削除したコードを実行しています。これらのインターフェースを実装する関数は、すべてが公に宣言されていることがわかります。私はその必要性を認識せず、非公開にしました。自分のインターフェイスを実装するときに、これらのインターフェイスが私の具体的なクラスの通常のクライアントが受け取るよりも多くのアクセスを提供する可能性がある場合は、ためらうことなくこれを行います。

それらを公開する理由は何ですか、私は何が欠けていますか?

拡張性を支援することが提唱されていると思いますが、ライブラリではなくアプリを作成する開発者にとって、私はこの知恵に挑戦します。

4

2 に答える 2

4

FormIActionEventListenerあり、すでに多くの使用可能なメソッドをサポートしている場合ITouchEventListener、ほとんどの場合、それらを非表示にするのはなぜですか? 反対に、それらを非表示にした場合、将来誰かがそれらを必要とする場合、それらを再度提供する必要があるため、クラスを維持することが難しくなります。

親のメソッドを非表示にする必要がある場合は、これを行う別の方法があります。継承する代わりに、新しいクラスのフィールドとして「親」を囲みます。

C# などの一部の言語では、パブリック継承が唯一のオプションです。

于 2012-01-21T10:18:12.377 に答える
0

私にとって、「インターフェース」の個人的な継承は意味がありません。

オブジェクトのインターフェイスは、そのパブリック メソッドのセットです。llya が言ったように、クラスによって提供される機能を内部で使用する場合は、オブジェクト構成を使用します。インターフェイスのサブセットを提供する場合は、より制限的なインターフェイスを作成するか、単に宣言します。

「インターフェース」と、このインターフェースからオブジェクトを取得する関数がサードパーティのライブラリにある場合、開発者がすべてのメソッドを強制的に実装することを望んでいたため、それらを提供する必要があります。

于 2012-01-21T10:30:04.673 に答える