現実世界云々

も1つおまけに、現実世界をどうのこうの、っていう考え方について*1


現実世界をモデリング、っていうのは、オブジェクト指向の解説として多いように思う。それも否定はしないけど、それは最善の方法じゃない。
というのも、現実世界をモデリングした場合、継承を機能の強化として使ってしまいがちだと思うからだ。例えば、Statementインターフェイスを継承したPreparedStatementインターフェイスを継承したCallableStatementインターフェイスとか。
これは、現実世界そのものをモデリングしているわけじゃないけど、考え方としては同じようなものだと思う。これの何が問題かというと、PreparedStatementオブジェクトをStatementオブジェクトとして使うことなんてないだろう、というところ。


まぁJDBCは全体的に褒められた設計をしているわけじゃないけど、この部分は特に変だと思う。あ、一番変だと思ってるのはあれか、ステートメントを抽象化しているにも関わらず、その結果を抽象化していないところかも。検索系のSQLと更新系のSQLでなんでメソッドを分けないといけないんだよ、と。
あと、上の2つよりは軽いけど、ResultSetがIterableじゃないところとか、ConnectionもStatementもResultSetもcloseメソッドを持っているのに、共通のインターフェイスを持ってないとか、未だに整数定数を列挙のために使っているところとか*2java.util.Dateクラスを継承したjava.sqlパッケージに存在する日付関連のクラスとか*3


書いてて感じたけど、これは現実世界どうのこうのとは直接関係ないか。Javaで差分プログラミングの乱用はやめてくれ、ってことで*4

*1:書いてるうちにJDBCに対する愚痴に・・・

*2:これは互換性があるから仕方ないといえば仕方ないか

*3:java.sql.Dateは名前からしてやめてくれ、なクラス。SqlDateとかでいいじゃん・・・

*4:それとは関係ないJDBCに関する愚痴も多いけど