件名変えました。
>>関連する操作やデータをまとめる、というのは普通にモジュール化であって、
>>私が「疑りぶかい~」で書いたオセロの例の、Cでstaticで隠蔽を行った
>>board.cで達成していることでは?
>ここが重要です。
>構造化プログラミングの「モジュール化」は基本的にモジュール化した所でしか有効ではありません。
>1つの関数で考えた場合は分かりにくいかと思いますが、関連する複数の関数での場合を考えてください。
いや、だから私が例に出したboard.cにはちゃんと複数の関数があるんですけど。
http://kmaebashi.com/programmer/object/othello.html
もうSEさんが何を言いたいのかさっぱりです。
>オブジェクト指向の
>利点は「再利用性が高まる事」=「変更がしやすい、変更しても壊れにくい」。
>本質は「抽象化」
>だと言う事です。
「抽象化」なんてのはおよそあらゆるプログラミングパラダイムの目的みたいなもので、
それだけでは何がなんだかさっぱりです。
>774RRさんの言う通り、「対象読者層が異なる」というだけの話のようです。
>つまり「インスタンスが複数あっていい」というあたりを理解していないプログラマ向けの文書で、
>私の指摘は「インスタンスが複数あるのは当たり前」と理解しているプログラマの視点という事です。
私もそう思っていたのですが、ちょっと疑い始めているところです。
>棋譜をセーブデータとして残すために、コンストラクタかセッターにファイル名を渡すと
>言うならボードクラスに入れるのはいいと思いますが、
>名人戦の障害発生対応が違うかもしれないので、エラーログクラスを受け渡すと言うのは
>おかしいと思います。
まあそのへんは要件次第で、エラーログならstaticでよいという考え方もあるでしょう
(Boardが持つのは「おかしい」と言われると、それは何故かと聞きたくなりますが)。
ええと、しかも、「コンストラクタかセッターに『ファイル名を』渡す」んですか?
棋譜をファイルに吐かず、こっちの画面に出したい、とかの場合はどうするんですか?
もともとLoggerの話は、SEさんの[1269]における
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1269&range=1
>これを次のように変更します。1行で済みます。
とか、
[1273]における
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1273&range=1
>遠くの所でnewした特有の処理の入ったクラスを、引数で使い回すのは、
>構造化のスタンプ結合的で、オブジェクト指向的には良くない設計です。
とかの話から出てきたものです。Loggerを引数で引き回そうが、staticで保持しようが、
遠いところでnewされたオブジェクトを、その実際のクラスがわからない状態で
使用するということに変わりはありません。そのとき、うまく使えばポリモルフィズムで
動きが変えられるというのがよく言われるオブジェクト指向の利点です。
その点、SEさんのUpperStackは、使う側がUpperStackであることを意識して使わなければ
ならない(リスコフの置換原則を破っている)のでダメだ、と言っているわけです。
CばっかりずっとやってきたプログラマにJavaで設計させると、機能単位でクラス分割は
するものの、
(1)何もかもstaticフィールドとメソッドで作ってしまう。
(2)staticメソッドにしない代わりに、毎回オブジェクトをnewして、いくつか
メソッドを呼んだら使い捨てにしてしまう。
このどちらかの設計にしてしまうことがあります。
正直なところ、SEさんはこの(2)のタイプの人に見えてしょうがないんですが。