ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

淡路島の電車の運行状況を取得する方法

2013-04-13 21:19:57 | PG(Java)

なんか面白い話題があったので参入してみる(笑)

megascusさんの『「淡路島の電車の運行状況を聞いた話」をシステム開発に置き換えてみるはただの設計ミス


僕は淡路島がget路線()メソッドを持っていても良いと思うんだよね。
淡路島クラスが地域インターフェースを持っているとして、地域インターフェースは以下の様になると考える。

public interface 地域 {
  public 鉄道路線 get鉄道路線();
  public バス路線 getバス路線();
  public 航空路線 get航空路線();
  public 船路線 get船路線();
}

この場合、地域によっては特定の路線が無いことも当然ありうるので、無いことを示す値(nullなりNullObjectなり)を仕様として決めて、呼び出す側がそれをチェックするのは当然だと思う。


ちなみにこれがScalaだと、(Scala初心者としては)以下の様にするかな。

trait 地域 {
  def get鉄道路線() : Option[鉄道路線]
  def getバス路線() : Option[バス路線]
  def get航空路線() : Option[航空路線]
  def get船路線() : Option[船路線]
}

val 運行状況 = new 淡路島().get鉄道路線().map(_.get運行状況())
→淡路島は鉄道が無いのでNoneが返る


で、地域インターフェースに各路線を全部入れるのではなく、個別のインターフェースを用意するとしたら、

public interface 鉄道路線 {
  public 運行状況 get運行状況();
}

地域 t = new 淡路島();
運行状況 u = (t instanceof 鉄道路線) ? ((鉄道路線)t).get運行状況() : null;

ってするかなぁ。
ただ、こういうインターフェースを増やしていくのは、必要以上に煩雑になる感じがして嫌だな…。


ちなみに最近Eclipseプラグインの勉強をしているんだけど、Eclipseプラグインの場合はアダプターという仕組みを使うようになっている。

IAdaptable a = new 淡路島();
鉄道路線 r = (鉄道路線)a.getAdapter(鉄道路線.class);
運行状況 u = (r != null) ? r.get運行状況() : null;


ドラクエ10をやりながら10分くらいで書こうと思ったら、30分くらいかかった^^;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする