[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: CADのクラス構造




前橋です。

えんどう さん:
>> ・Shapeの各サブクラスのデータメンバは、全部publicにするかア
>>   クセサを付けるかして「まる見え」にしなきゃいけない。
>
>アクセッサーがあると「丸見え」という理由が良く分かりません。
>public メンバーにするのとは意味が違うと思うのですが。

クラスのデータメンバについて、各々getterとsetterを書いたら、
publicメンバにするのと実質同じで「丸見え」ですよね。若干の整
合性チェックが入れられるとか、デバッガでブレークポイントをか
けるのが楽とかいう違いはあるとはいうものの、たいした違いでは
ないように思います。

setterなしのgetterのみ、という実装にすれば、他所から破壊され
ている、という危険は回避できますが、それもそれとして。

問題は、データメンバとアクセサが1:1の関係になっている場合、
「抽象度」という点では同じになってしまう、ということです。

たとえば、「楕円弧」を表現する方法は、

・中心/開始角/終了角/偏平率
・中心/開始角/描画角/偏平率
・左上の座標/右下の座標/開始角/終了角
...

などなど色々ありますが、

draw()がShapeの中にいれば、どんな表現形式になっていようと外
からは知らずにいられるけれど、draw()を外に出すとそういうわけ
にはいかない。アクセサを付けたって、1:1じゃ「まる見え」でしょう? 
ということを言いたかったわけです。

>> ・いざ描画するときには、長〜いelse ifの連なりで、いちいち
>>   instanceofでクラスを調べるの?
>
>メソッド・オーバーライドを使って区別するのかもしれません。

draw()をShapeの外に出した場合、メソッドオーバライドが
*素直には* 使えなくなる、ということを言いたかったのですが。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------