SEさんが何をおっしゃりたいのかますますわからなくなっていくのですが、
>ちなみに簡単に変更できた例は、
>メモリ上で頻繁に検索するデータが100件から6万件に変わった時の事でした。
>検索にキャッシュやヒストリー機能などあらゆる機能を組み込み高速化しましたが、
>修正したクラスは1つです。もしCの構造化で組んでいたら、修正箇所と影響範囲を
>調べるだけで嫌になっていたと思います。
関連する操作やデータをまとめる、というのは普通にモジュール化であって、
私が「疑りぶかい~」で書いたオセロの例の、Cでstaticで隠蔽を行った
board.cで達成していることでは?
http://kmaebashi.com/programmer/object/othello.html
「疑りぶかい~」を書いたときの私の認識は、
「Cなどでプログラムを書いている普通のプログラマは、staticで情報隠蔽するような
モジュール化は普通に行っているだろう。でもそれは、オブジェクト指向ではない。
オブジェクト指向(C++流の)といえばカプセル化、継承、ポリモルフィズムと言われるけれど、
カプセル化は普通のCプログラマも理解していそうだし、継承やポリモルフィズムに
至る前にマルチプルインスタンスを理解しなければいけないのに、世間にあふれる
オブジェクト指向の説明からはそこがすっぽり抜けている。
多くの人がここで引っかかるように思うので、このミッシングリンクは埋めておく
べきではないか」
というものです。
この認識がズレている、という批判ならお受けしますけれども。
マルチプルインスタンスのさらに手前の事例を持ってきて、オブジェクト指向の
成果だと言われても…… 継承の話はどこにいったんでしょうか。
いや、「世間のCプログラマはstaticで実装を隠蔽するような気の効いたことは
していない。だからお前の認識はズレているのだ」ということならそうなのかも
しれませんけど(1ソースファイル1関数、という規約のプロジェクトとかって、
今でもあるんでしょうか)。
>普通のLoggerは、staticのフィールド変数として作成して直接使用するため、Logger自体を
>メソッドの引数にして使用する事は少ないと思います。
うーん、Loggerくらいならstaticでもかまわないとは確かに思いますけれど、
私ならアプリケーションのインスタンスのフィールドに持ちますね。
オセロの例なら、Boardクラスで障害発生時とかのログを残すとして、Loggerは
Boardに持たせます。名人戦のBoardだけ障害発生時の対応が違ったりするかも
知れませんし。よって、BoardのコンストラクタかsetLogger()メソッドの
引数でLoggerを渡すことになります。
>敢えてLoggerを例にするとすると、
>void write(Logger l){}
>なら、
>class Logger{
> void write(){}
>}
>にすべきと言う事です。
ええと、write()メソッドがログを吐くメソッドなら、
>class Logger{
> void write(){}
>}
となるのは当たり前だと思うんですが……