[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44439] Re: コンストラクタの引数について&インスタンス変数の持ち方について

From: Yukihiro Matsumoto <matz@...>
Date: 2008-01-05 03:37:56 UTC
List: ruby-list #44439
まつもと ゆきひろです

In message "Re: [ruby-list:44437] Re: コンストラクタの引数について&インスタンス変数の持ち方について"
    on Sat, 5 Jan 2008 12:05:10 +0900, Akira Hayakawa <ruby@i-mail.jp> writes:

|だから、アルゴリズム用にと、分かりやすい用に
|def to_array
|  [@x, @y]
|end
|と
|attr_accessor :x, :y
|の両方を定義しておくというのは、
|ソフトウェア工学的には反則ですか?
|1種類のプライベート変数に対して2種類のアクセサが存在するというのは。

使われ方や視点に応じて複数のアクセサを用意するのは珍しいこと
ではないように思います。たとえば「点」についても、ガウシアン
で扱いたい時のためのアクセサと極座標で扱いたい時のためのアク
セサの両方があっても、間違いではないと思います。もし両方で扱
うことが必要であれば。

|(1)クルマとタイヤについて
|確かに、クルマを作る時に、クルマがタイヤの直径を要求するのは意味的に気持ちが悪いですね。
|ぼくは動的言語は幅広く受けるのが正解だという理由で、
|外でインスタンスを作って、
|インスタンスをコンストラクタの引数の持ってくるのが正解なのかと思っていました。

「ソフトウェア工学的」には開発の生産性や将来の保守性が向上す
る設計が正解です。「気持ち悪い」というのは理由になりません。
で、この例題では「車クラス」の使われ方や前提条件などが不明な
ので、なにが正解なのかなんとも答えられません。そもそも「タイ
ヤのサイズだけを指定する車」という例題そのものがかなりいびつ
ですよね。

|でも、実際の社会では車メーカーはタイヤを作りませんね。

これは「オブジェクト指向プログラミング」学習の罠で、現実世界
を中途半端に反映した(正直に言うとあまり良くない)例題を導入し
てしまうと、現実世界の構造に引きずられて、必ずしも保守性の高
くない設計をしてしまう可能性があります。確かに、現実の社会で
は車メーカーはタイヤをはじめとした部品をみずから作らないかも
しれませんが、それを言い出すと、「正解」とは車オブジェクトを
生成するためには、それこそ無数にある部品一つ一つを外側で生成
して、newメソッドに渡してやることになりませんか。

しかし、そんなことをしたら無数のクラスを管理する必要がありま
すし、プログラムも必要以上に複雑になってしまいます。このよう
な設計はソフトウェア工学的には明らかに間違いです。

ユーザの観点から考えると、車がどんな業者のどんな部品から構成
されているかなんてことはどうでもよくて、とにかく車がほしいわ
けです。すると、必要なのはユーザが選択しうる条件、つまり、型
式であるとか、色であるとか、オプションとかを指定できればそれ
で十分ということになります。

|車の方については一応の答えは得られた気がします。

なんとなく、その「答え」は危険な答えのような気がします。繰り
返しますが、前提条件を抜きにした「一般的な正解」というものは
存在しません。

                                まつもと ゆきひろ /:|)

In This Thread