[1278] Re:>(ぱ)こと管理人さん
投稿者:(ぱ)こと管理人
2009/05/21 00:40:14
>大文字小文字の例が悪かったのか、話がそこから進まないようです。
では、よい例を出してもらえませんか。具体的な例なしでこの手の話をしても
意味がありません。
774RRさんへの返信に
>例えば総合試験で性能目標に達しなかった場合、従来の方法では普通は大変更に
>なりますが、オブジェクト指向の場合、一部のクラスの取得処理を変更しただけで
>修正できた例もあります。
とありますが、これも具体的にどういうケースだったのかわかりません。
普通に考えて、どこかの処理がボトルネックになっていたのなら、そこだけ
書き直せば速くなるでしょう。もちろん、その処理がプログラムのあっちこっちに
コピペされていれば大変更になるでしょうが、関数等に切り出されて一箇所に
まとめられていれば修正するのは一箇所です。ここまではオブジェクト指向は
関係ありません。
オブジェクト指向であったがゆえにうまくいった、とのことなので、
関数化ではうまくいかないケースだったのでしょう。どういう理由で、関数化では
うまくいかず、オブジェクト指向(実装継承?)でうまくいったのでしょうか。
仕事のソースをここに貼ることができないのはわかっていますが、概要だけでも
教えてもらえませんか。興味深いので。
>遠くの所でnewした特有の処理の入ったクラスを、引数で使い回すのは、
>構造化のスタンプ結合的で、オブジェクト指向的には良くない設計です。
オブジェクト指向の最大の特徴のひとつであるポリモルフィズムは、遠いところで
newしたオブジェクトのメソッドを呼ぶと、呼ぶ側が意識しなくても、
そのオブジェクトに応じたメソッドが呼び出される、というものですよね?
デザインパターンなどでは生成に関するパターンだけでいくつもあって、
うちいくつかは、具体的なクラスが何であるかを意識させないようにするための
ものですし、DI(Dependency Injection)なんかも考え方はそっち方面です。
まあ、この手のことは、当面用途もないのに調子に乗って柔軟性を求めると
ソースが追えなくなってしまうので、私はあまり好きではないのですけれど。
ありがちな例では、たとえばログを出力するLoggerクラスをabstractクラスもしくは
interfaceとして作って、それを継承またはimplementsしてファイルに吐くLoggerや
syslogに吐くLoggerを作ったりしますが、これは、遠く離れたところでnewした
Loggerを引数等で持って回ることになると思うんですが。
>オブジェクト指向の場合は処理は関連するデータと共にクラスに
>まとめられるため、その引数を必要とするメソッドを、引数のクラス内
>に実装できるか検討すべきです。
意味がわかりません。
さっきのLoggerの例で言えば、Loggerクラスを引数として受け取るメソッドは
Loggerを使うアプリケーションですが、アプリケーションのメソッドを
Loggerクラスの中に作れ、という主張……ではないですよね。
>>ひとつ伺いたいのですが、SEさんはどんな本でオブジェクト指向の勉強をされたの
>>でしょうか。
こくぼさんからも質問が出ていますが、私もSEさんが「比較的マシ」だと思ってる
本やWebページを教えていただきたいです。