2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

最近のトラックバック

無料ブログはココログ

« 2012年8月31日 | トップページ | 2012年11月11日 »

2012年9月30日 (日)

namespaceで名前を短縮

 現在、OuDiaのソースコードのクラスを、namespace で整理しています。

 namespace は、C++言語の言語仕様の一つです。日本語では名前空間と訳されます。namespaceを使うことにより、クラス名や関数名・グローバル変数名を、階層構造で表現することができます。

 OuDia程度の規模のソフトであっても、クラス名は100以上になります。これらのクラスに個別に適切な名前をつけるのは、ソフトの規模が大きくなるにつれて徐々に大変になってくるんですね。しかも、クラスはバラバラに存在しているわけではなく、いくつかのクラスがグループを形成しています。そういったグループ関係をも表した名前をつけようとすると、クラス名がいつのまにか長大な名前になってしまうのです。現に、今やOuDiaでは、以下のような長大な名前のクラスが横行するようになってしまいました。

  • CconvDcdPosOnZone_PosOrgAndRate
  • CDedRosenFileData_CEditCmd_DedRosenFileDataProp
  • CWndDcdGridJikokuhyouState_Ressyasentaku

これらは一部の例です。これはもちろん、僕自身の名前付けのまずさもあると思います。しかし、OuDiaのコーディングを本格的に始めてからすでに7年以上です。7年経っても問題が一切発生しないようなルールをあらかじめ決めるような先見性は、僕にはなかったようです。

 このたびの namespace によるクラスの整理は、この名称長大化問題に対する思いつきです。

 namespace という言語仕様は、C++に最初から備わっていた仕様ではなく、後から追加されたものです。このためか、7年前にOuDiaのコーディングを始めた当時は、namespace について解説しているようなC++の入門書はありませんでした。このため、僕自身もnamespaceについての詳しい理解をもっていませんでした。

 また、OuDia開発開始当初は、僕はVisualStudio6.0 という開発環境を使っていました。しかし、やはりnamespaceという仕様は新しかったためか、VisualStudio6.0 は、 namespace の利用に向いていませんでした(namespace に収録されたクラスに対しては、「クラスビューに表示されない」、「ClassWizardによるコード生成ができない」、「コード補完機能が正しく動作しない」、などの問題のある振る舞いを示していました)。

 こういったこともあって、当時の僕は namespace という仕様を、「何が嬉しいのか分からない言語仕様」と認識してしまいました。

 この認識を改めて変えるきっかけになったのは、最近になってC# .NET のプログラムを作成する機会が回ってきたことでした。.NET Frameworkでは、namespace を大々的に利用して、多量のクラスを階層化して整理しています。これを見て、namespace の利点の一端を知ることができました。加えて、現在の開発環境(といっても、VisualStudio2008ですが)なら、namespace を使ったクラスに対する支援もあり、 namespace が無理なく利用できるらしいことも分かってきました。これらの要素があったため、今回のnamespace 導入に踏み切りました。

« 2012年8月31日 | トップページ | 2012年11月11日 »