リファクタリング―プログラムの体質改善テクニック

リファクタリング―プログラムの体質改善テクニック リファクタリング―プログラムの体質改善テクニック
マーチン ファウラー (2000/05)
ピアソンエデュケーション
この商品の詳細を見る

正誤表はこちら

オブジェクト指向における再利用のためのデザインパターンがプログラマの共通語彙としての「デザインパターン」を確立した書籍だとすると、 Martin Fowler氏のファクタリング―プログラムの体質改善テクニックは「リファクタリング」という共通語彙を確立させた歴史的な名著ということになります。

本書はJavaの本ではありますが、リファクタリングの本質は特定のプログラミング言語に限ったものではありません。GoF本と共に全てのプログラマ必読の書です。

人気blogランキングへ にほんブログ村 IT技術ブログへ FC2ブログランキングへ

派生禁止クラス

Problem
あるクラスの派生を禁止したい場合、どのようにすれば良いでしょうか?

Solution
次のコードを見てください。
class FinalClass {
public:
  FinalClass() {}
};

int main()
{
  FinalClass object;
  return 0;
}
通常、FinalClassを継承することで派生クラスを作成できます。
class FinalClass {
public:
  FinalClass() {}
};

class DerivedClass : public FinalClass {
public:
  DerivedClass() {}
};
このような派生クラスを禁止したい場合、どのようにすれば良いでしょうか?

答えは簡単です。publicコンストラクタをprivateコンストラクタに変更します。

これで派生クラスからは基底クラスのコンストラクタが呼び出せなくなり、その結果、派生クラスではコンパイルエラーが引き起こされます。
class FinalClass {
private:
  FinalClass() {}
};

class DerivedClass : public FinalClass { // error!
public:
  DerivedClass() {}
};
しかし、これだけではFinalClassのインスタンス化が行えません。
よって、FinalClassにCreation Methodを追加します。
class FinalClass {
public:
  static FinalClass createInstance() { return FinalClass(); }
private:
  FinalClass() {}
};

int main()
{
  FinalClass object = FinalClass::createInstance();
  return 0;
}

人気blogランキングへ にほんブログ村 IT技術ブログへ FC2ブログランキングへ

« 前頁へ移動する  | HOME |  次頁へ移動する »

ブログ内検索


このサイト内ウェブ全体
この検索は「緑のgoo」を利用しています

カテゴリー

未分類 (0)
C++ (24)
Books (11)
Bookmarks (1)

最近のエントリ

移植性の高いコードを書くためには (02/16)
ハッシュコンテナ - Part3 (01/10)
ハッシュコンテナ - Part2 (10/29)
日本語によるC++0xに関する記事 (10/23)
foreach (08/03)

Books

C++
プログラミング
デザインパターン
オブジェクト指向

RSSフィード

最新記事のRSS
最新コメントのRSS
最新トラックバックのRSS

アーカイブ

2008年02月 (1)
2008年01月 (1)
2007年10月 (2)
2007年08月 (1)
2007年07月 (2)
2007年06月 (1)
2007年05月 (2)
2007年04月 (1)
2007年03月 (2)
2007年02月 (2)
2007年01月 (3)
2006年12月 (4)
2006年11月 (8)
2006年10月 (6)

連絡先

email.png

Amazon