interfaceに物申す のコメントでちらっと出てきた NVI について。
NVI:non-virtual interface : 非仮想インタフフェイス
そこそこ名の通ったイディオムかと思うです。
class なにか {
public:
virtual void なにかする() { ... }
};
じゃなくて
class なにか {
public:
void なにかする() // non-virtual
{ あーする(); こーする(); }
protected:
virutal void あーする();
virtual void こーする();
};
てなスンポーで、公開メソッドをvirtualにしないってスタイル(イディオム)。
導出クラス側では直接 なにかする() を再定義すんじゃなく、
あーする() や こーする() を再定義するなり再利用するなりせぇ、と。
こうしておけば、後日なんらかの理由で なにかする() のインタフェースが変更に
なったとき、再定義された なにかする() の変更をこいつの導出クラス全員に
お願いして回らんでええわけや。
C++の場合、再定義させないkeyword: finalやsealedに相当するものを
持ち合わせてないのでその代わり、の意味もありますです。