派生先が派生元の機能を使用しなければ
そのクラスツリーはいつでも必要なときに簡単に分割できる

以下で、Aの派生クラスがAのprotectedなメンバーを参照していない場合は
f と x は派生先への影響をあまり考えることなく、カプセル化を妥協することなく、BとCに分割できる

class A {
int a, b;
public:
void f() { g(a); }
void x() { y(b); }

private:
virtual void g(int&) = 0;
virtual void y(int&) = 0;
};

class B {
int a;
public: void f() { g(a); }
private: virtual void g(int&) = 0;
};

class C {
int b;
public: void x() { y(b); }
private: virtual void y(int&) = 0;
};