Diary?::2006-06-27

21:08

また面白そうなネタを檜山さんが書かれている (クラス、オブジェクト、型; なんだか変じゃない? ) 。とりあえず各設問にはこう答えるかな。

この継承は変な感じ
3D は 2D の役割を完全に担っているわけではない。例えば moveTo は Point2D では XY 軸上の動作のために二引数のメソッドとして定義されているが、同じ事を Point3D でやろうとすると破綻する ((X, Y), (Y, Z), (Z, Y) の三通りの可能性があるため ) 。 LSP (サブクラスはスーパークラスで置換可能でなければいけないというセオリー) に違反しているので没。
こういう型をクラスで定義したいのだけど
どれも String や Integer の継承で表現するべきではなく、インターフェースや共通の基底クラスで実現されるべきもの。だと思う。あとは演算子のオーバーロードさえあればプリミティブ型などと透過的にそれらのクラスを使えてハッピーなのだけど。
こういう型達の関係は
例に出されているのは protected メンバなんだよなあ。これじゃサブクラスで書き換えられちまう。アスペクトで対応するべきもの? くそっ、 Python なら対応できるのに。
UserID, UserHandle, UserNumber の継承関係は、UserID を残り二つの共通のスーパークラスでいいような。ユーザー ID を返す getID があったとして、それは ID ならその数値、ハンドルならそのハッシュ値を返すように実装するかな。
どっちに味方しますか
この問題考えてたらテキストエディタを作りたくなってきたじゃないですか! という冗談はさて置き、さてどうしよう。俺なら継承なんてさせないかも (やっぱり共通インターフェース) 。というかそもそも表示と変更は全く別の役割のような。つまりあれだ、表示部分は全然別に持っておいて、編集モードと閲覧特化モードにすると。というかそれは殆ど vi だ。

出題者の期待している答えとは違うかも。まあいいや、いい頭の体操になった。

22:01

風邪をひいたのか疲れているだけなのか、どうにも調子がでない。今日は早いとこ寝よう。

Written by Kuwata Chikara
Creative Commons