[ホームへ戻る] [前へ] [上へ] [次へ]

意図的に自由度を狭める

複数の人数でアプリケーションを作る場合、通常、コーディングのための規約を設けます。規約とは、変数の命名、スタイル、フォーマットを定めたもので、規約と違う書き方は規約違反として禁止するのです。なぜ、このような自由度を狭める必要があるのかと言うと、形式を統一するためです。形式が統一されていると、整理されているため理解しやすく、また必要なものを探すのにも時間がかかりません。

これらの制約は、通常、開発のメンバーを教育して、徹底させます。規約が守られているかどうかは、他のメンバーの目視によって、あるいはツールによってチェックします。とはいえ、人手の作業なので、特に規約が広範囲になると、規約を守り通すのは難しく、チェックする側も大変です。

そこで、言語の持っている制約を使って規約を遵守させるのです。例えば、privateとpublicの違いは、外のクラスから呼び出し・参照できるかできないかの差です。そんなものを使わなくて、publicを使っても、ルールを決めて、外からはアクセスしないように守らせれば別にあえてprivateを使う必要はありません。きちんとルールを守ればいいだけのことで、privateとpublicの区別など言語が持っている必要はないのです。

しかし、ルールを守れない、忘れてしまうのが人間です。規則を意識的に守り続けるのは大変なことで、規則違反があったとしても見落としてしまうかもしれません。もともとコンピューターは人間の能力不足を補うために出てきたものです。いちいち人間がそういうことに気を払わなくて済むように、マシンの側でチェックするのです。不可能を多く作ることで、規約を遵守させるのです。

これが結果的にはいろいろなメリットを生むことになります。何か問題があったとき、privateであれば、外からアクセスされる心配はないので、そこはチェックしなくてよいことになります。こうして問題が発生したときに、バグの原因を絞り込むことが可能になります。

また、例えば、abstractメソッドを作ることで、サブクラスには必ず実装させます。そうしないとコンパイルが通らないようにするのです。そうやって強制的に規則を守らせます。

C言語はオブジェクト指向言語ではありませんが、オブジェクト指向の設計を反映させて、オブジェクト指向的にソースを記述することができます。こうすると、別にオブジェクト指向言語でなくてもいいじゃないか、となります。確かにその通りで、オブジェクト指向言語は全く別次元だとことさら騒ぐ必要はないのです。しかし、これは規則を作って人為的に守らせるのであって、やはり先の問題は付きまといます。オブジェクト指向言語では最初からその仕組みが用意されています。規則を守らなければ、コンパイルではじかれるので、そうやって規則を守らせることができるのです。もちろん、言語だけでは規則が足りないので、人が意図的に守る努力をしなければならない部分はあるのですが。

さらに世の中にはルールを守れない人間ばかりではなく、意図的にルールを破る人間もいます。開発プロジェクトに入っているプログラマが悪さすることはないでしょうが、外にはクラッカーと呼ばれる人たちがいます。例えば、サーバーに対してこのようなフォーマットでデータをリクエストとして上げることによって、正しい結果を得るとします。ここで悪意ある人は、不正なフォーマットのデータを送りつけて、破壊行為をしたり、マシンを乗っ取ったりするのです。対策としては不正なフォーマットをはじくことです。これは、クラスにおけるprivateとpublicの区別とは別次元の話となりますが、要は制約を作ることで、セキュリティを確保することもできるということです。






この内容についてご意見をください

 
   役に立った    まあまあ    つまらない    難しい    疑問がある

コメント(質問・指摘・要望なんでもどうぞ)
  
メールアドレス: 

  

Copyright Dayan All rights reserved. Last Update: 2004.08.31