3

OOP (AS3) に関して、グーグルの方法がわからないというかなり単純な理論的な質問があります。

依存クラスが次のようなインターフェイスを実装する必要がある抽象クラスのようなものが必要です。

Interface ISomething
{
   public function somethingize(otherThing:type):void;
}

abstract public class AbstractSomething implements ISomething
{
   public function AbstractSomething()
   {
        // ...
   }

   public function doSomething():void
   {
       //code here
       // ...
       this.somethingize();
       // ...
   }
}

そのようなことを達成する唯一の方法は、「抽象」キーワードを削除し、somethingize を(「未実装の例外」をスローする実装を使用して)SomethingWrapper に移動することですか、それともそれをモデル化するためのより良い方法がありますか?

4

2 に答える 2

3

ActionScript は抽象クラスをサポートしていません (残念ながら)。

抽象化を試みて模倣するためのテクニックがいくつかあると思いますが、私の方法は、抽象クラスにエラーをスローして、それらが直接使用されないようにすることです。たとえば、次のようになります。

public class AbstractSomething implements ISomething
{
    public function AbstractSomething()
    {
        throw new Error("this is an abstract class. override constructor in subclass");
    }

    public function doSomething():void
    {
        throw new Error("this is an abstract class. override doSomething in subclass");
    }
}
于 2013-02-28T02:44:56.927 に答える
0

特定の実装に関する詳細情報がなければ、この場合は継承よりも合成、特に依存性注入を優先ます

public interface ISomething {
    function somethingize(thing:*):void;
}

public class SomeWorker {

    private var _something:ISomething;

    public function SomeWorker(something:ISomething) {
       this._something = something;
    }

    public function doSomething():void {

        // work
        this._something.somethingize(obj);
        // more work

    }
}

SomeWorker の継承されたクラスは、実行する必要がある作業のために ISomething の正しい実装を挿入するか、その依存関係を別の場所で解決することができます。

于 2013-02-28T02:54:33.590 に答える