4.1 目標と方針

前章ではマクロとデータを分離するマクロの例を作ってみました。マクロとデータを分離することで、マクロとデータの結合が弱くなり、メンテナンスが容易になります。その意味で、前章で扱った方法論は一般的にも適用可能であるといえます。

しかし、前章で作成した実装は、ある一つのデータに対応したマクロです。そのため、再利用するにはあちこち書き換えなければなりません。一つのマクロで、複数のブックを操作することが出来ないなど、柔軟性にも問題があります。そこで、このマクロを再利用するには、様々な場合に柔軟な変更が可能になるように修正する必要があります。本章では、今の議論をふまえ、マクロとデータを分離するための再利用可能なマクロ=フレームワークを作成していきます。

再利用可能なフレームワークに必要なのは、ありうる変更を容易にすることと、必要な枠組みをきちんと実装しておくことです。すなわち、実装する機能を、

の2つに分離することが必要です。前章で扱ったプログラムでは、各Decoratorクラスに、共通の機能(初期化など)と、固有の機能(foo.xlsを認識する、など)が混在しています。そこで、各Decoratorから、固有の部分を別クラスDelegateに委譲します。そして、2章で扱った動的継承もどきを利用し、おのおののDelegateをDecoratorとリンクさせることで、固有の機能と共通の機能をうまく扱うことが出来ます。本章は、この「共通機能と固有機能の分離」を核にして進んでいくことになります。

この章では、「共通機能と固有機能の分離」を実現するために、2章で扱った委譲先の組み合わせによる多態性もどきをテクニックとして多用します。特に、同じ名前のメソッドを実装した固有機能のクラスをいくつか用意して、それを共通機能のクラスから呼び出すことにより、メソッドをあたかも動的継承したかのように見せることが多くあります。普通のオブジェクト指向の言語では、メソッドを動的継承するためには、そのクラスを継承し、メソッドを動的メソッドとして定義して実装を書くだけですみます。それに比べ、VBAでは継承が使えないので、メソッド名をコピー&ペーストすることにより、あたかも継承したかのように見せています。そこで、今後このコピー&ペーストによる継承もどきのことを「疑似継承」と呼び、「class1を疑似継承したクラスを〜」という表現を使わせていただきます。この用語は独自のものですのでその点誤解なきようお願いします。