『インターフェイス指向設計』読み終わったよ

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

特に目新しいことは書いていないけど、キレイにまとまってていて良い本だと思う。薄いからすぐ読めるし。
内容を簡単にまとめると、継承使うな、インターフェイスを積極的に使っていこう、といった感じ。自分の好みにも合致していて気持ちいい。

例えば、JavaでInputStreamは継承関係で実現されている。

public abstract class InputStream { 
  public InputStream(){ ... }
  public void close(){ ... }
  public int read(byte[] bytes){ ... }
  public int read(byte[] bytes, int offset, int length){ ... }
  public long skip(int n){ ... }

  public boolean markSupported(){ ... }
  public void mark(int limit){ ... }
  public void reset(){ ... }
}

pubilc class FileInputStream extends InputStream{ 
  // markはサポートしない
  ... 
}

public class ByteArrayInputStream extends InputStream{ 
  // markをサポートする
  ...
}

これだと、mark()を使う前にmarkSupported()を呼び出して、使えるかどうかチェックしないといけない。

これをインタフェースで書き直すと、Markableインターフェイスを実現しているかどうかで、mark()を使えるかどうかが明白になる。

public interface InputStream {
  public void close();
  public int read(byte[] bytes);
  public int read(byte[] bytes, int offset, int length);
  public long skip(int n);
}

public interface Markable{
  public boolean markSupported(){ ... }
  public void mark(int limit){ ... }
  public void reset(){ ... }
}

public class FileInputStream implements InputStream{
  ...
}

public class ByteArrayInputStream implements InputStream,Markable{
  ...
}

本の内容とは関係ないけれど、結構誤字が目立った気がする。「等幅インターフェイス(p36)」とか「nterface(p85)」とか。