現実世界云々
も1つおまけに、現実世界をどうのこうの、っていう考え方について*1。
現実世界をモデリング、っていうのは、オブジェクト指向の解説として多いように思う。それも否定はしないけど、それは最善の方法じゃない。
というのも、現実世界をモデリングした場合、継承を機能の強化として使ってしまいがちだと思うからだ。例えば、Statementインターフェイスを継承したPreparedStatementインターフェイスを継承したCallableStatementインターフェイスとか。
これは、現実世界そのものをモデリングしているわけじゃないけど、考え方としては同じようなものだと思う。これの何が問題かというと、PreparedStatementオブジェクトをStatementオブジェクトとして使うことなんてないだろう、というところ。
まぁJDBCは全体的に褒められた設計をしているわけじゃないけど、この部分は特に変だと思う。あ、一番変だと思ってるのはあれか、ステートメントを抽象化しているにも関わらず、その結果を抽象化していないところかも。検索系のSQLと更新系のSQLでなんでメソッドを分けないといけないんだよ、と。
あと、上の2つよりは軽いけど、ResultSetがIterableじゃないところとか、ConnectionもStatementもResultSetもcloseメソッドを持っているのに、共通のインターフェイスを持ってないとか、未だに整数定数を列挙のために使っているところとか*2、java.util.Dateクラスを継承したjava.sqlパッケージに存在する日付関連のクラスとか*3。
書いてて感じたけど、これは現実世界どうのこうのとは直接関係ないか。Javaで差分プログラミングの乱用はやめてくれ、ってことで*4。