[1303] Re:>(ぱ)こと管理人さん
投稿者:SE
2009/05/28 15:24:23
>関連する操作やデータをまとめる、というのは普通にモジュール化であって、
>私が「疑りぶかい~」で書いたオセロの例の、Cでstaticで隠蔽を行った
>board.cで達成していることでは?
ここが重要です。
構造化プログラミングの「モジュール化」は基本的にモジュール化した所でしか有効ではありません。
1つの関数で考えた場合は分かりにくいかと思いますが、関連する複数の関数での場合を考えてください。
つまり拡張を見越して単位を合わせてモジュール化しておく必要があると言う事です。
オブジェクト指向の場合はクラス単位でモジュール化されているような物であると言う事です。
つまり末端のクラスから上位のクラスまで、全ての単位でモジュール化されているため、
あらゆる単位で変更が可能だと言う事です。
つまり私の言いたいのは、
オブジェクト指向の
利点は「再利用性が高まる事」=「変更がしやすい、変更しても壊れにくい」。
本質は「抽象化」
だと言う事です。
利点は「見通しの良さ」
本質は「マルチプルインスタンス」
ではないと思います。
>いや、「世間のCプログラマはstaticで実装を隠蔽するような気の効いたことは
>していない。だからお前の認識はズレているのだ」ということならそうなのかも
>しれませんけど(1ソースファイル1関数、という規約のプロジェクトとかって、
>今でもあるんでしょうか)。
774RRさんの言う通り、「対象読者層が異なる」というだけの話のようです。
つまり「インスタンスが複数あっていい」というあたりを理解していないプログラマ向けの文書で、
私の指摘は「インスタンスが複数あるのは当たり前」と理解しているプログラマの視点という事です。
>うーん、Loggerくらいならstaticでもかまわないとは確かに思いますけれど、
>私ならアプリケーションのインスタンスのフィールドに持ちますね。
>オセロの例なら、Boardクラスで障害発生時とかのログを残すとして、Loggerは
>Boardに持たせます。名人戦のBoardだけ障害発生時の対応が違ったりするかも
>知れませんし。よって、BoardのコンストラクタかsetLogger()メソッドの
>引数でLoggerを渡すことになります。
棋譜をセーブデータとして残すために、コンストラクタかセッターにファイル名を渡すと
言うならボードクラスに入れるのはいいと思いますが、
名人戦の障害発生対応が違うかもしれないので、エラーログクラスを受け渡すと言うのは
おかしいと思います。