Wednesday, 26 December 2007
Java の続き
結局、はまりまくってますが... Java って、自虐的なところがある。
Object 指向の abstract class、interface、Generic、inheritance とかは、結局、アルゴリズムとは関係ない「コードの整理整頓」に過ぎない。でも、そういう掃除をしているのも楽しいと言えば楽しいんだよね。
A → B
↓ ↓
A' → B'
まぁ、矢印は extends でも implements でも良いんだけど、このあたりの整合性を取るのは大変。「良い設計をすれば」とかいう幻想もあるけど、最適解は、どうせNP困難なんでしょ? 適当なところで妥協するものです。
Generic も面白いんだけど、どっかで止めなきゃならないのがめんどくさい。二重にInstanticate していますとか言われると、どこどう直せば良いのか途方にくれるけど。結局、Generic で受けた型を知らないオブジェクトは、左から右に手渡すしかない。いや、<Hoge extends Fuga> で受けても良いんだろうけどさ...
Polymorphism で、狙ったメソッドではなくて、違うメソッドに飛ばされるのがめんどくさい。
class A extends B
で、
void method(A x) in class A
void method(B x) in class B
のどちらに飛ぶのかが良くわからない。@Override は付けてますが、
void method(A x) in class B
とか書くと、確実に A の method が Bのmethod を Override するわけなんだけど、それは変だよね。
class A' extends A implements B'
interface B' extends B
とかだと、さらにわかりません。でも、class A implements B を extends したければ、どうしてもそうなると思うんだけど。なんか間違っているのかな。出来るようになっているわけなんだから、そういう使い方もあるんだろうけどさ... とか言いながら、適当にいじっていると、動くには動くんだよな。
Smalltalk/Squeak/Perl だと、とりあえず動かして、messageDoesNotUnderstand とか Faild to AUTOLOAD で、止まったところから書くなんていう技もある。ad-hoc だけど、それはそれで「最短で動く」。 Java だと、テスト駆動とか言っても、やっぱり、コードをこねくり廻している時間が長い。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment