ある日いきなりアクセスが増え始めた。まぁ、どうせ一時的なものだろうから、今のうちに何かと書いておこう。
オブジェクト指向入門書で一番の問題は、動物クラスから派生したキリンクラスとかいう説明をすることだ。もしくは、だった。こういった例は実に説明しやすい。多重継承だって完璧だぜ。ポリーモルフだって、dog->bark()でOKだ。じゃあ何が問題なのか?どっかのだれかが一般システム思考というのはよろしくないといっていたが、それと同じことだ。
こういった本を読みオブジェクト指向に入っていった人は勘違いする傾向が多い。何でもかんでも一般化してしまいたがる。だから、役にも立たないクラスをたくさん作ることになる。フレームワークで規定されているなら仕方がない。フレームワークとはそういうものだからだ。そうでもないのに、getter setterしかないクラスをたくさん作ってどうなるというのだ。直接アクセスをさせないから安全?それは明らかに間違っている。
class Human{
private:
String name;
String address;
public
String getname()
String getAddress()
String setname()
String setAddress()
}
human.name と書くことが、human.setnameと書くよりどれだけ安全だというのだ。
そしてこれはカプセル化では決してない。何一つ隠蔽していないでしょ。データ構造を見せずに処理を行ってこそカプセル化なわけだ。だから単純なgetter setterしかないのならばカプセル化とは完全に無関係だ。犬や猫に限らず、現実世界から想定したものをデザインに加えると、ほとんどのクラスがスカスカのgetter setterのみになる。だから僕らは現実世界から想定したクラスを作成するべきではないのだ。
もう一度クラス作成のメリットを思い出そう。データとその操作を一緒くたにできることだ。だから、クラスを作成するのに一番役に立つのは、個別メンバにいちいちアクセスさせるのは面倒であるような構造をもったデータ型がある場合だ。XXTreeとかXXMatrixなんてものだと最適だろう。
だから間違ってもDBから表を作って画面に出すだけなのに、DBの内容をわざわざ人間クラスやらに再構築して、画面で再構成などしてはいけない。そのDBに人間が直感的に理解できる現実世界の意味などないかもしれないが、表という構造にはそれ以上の確実な価値があるからだ。インピーダンスミスマッチなどというものは実際存在せず、仕事もしないおたく連中が作り出した妄想に過ぎない。
オブジェクト指向入門書で一番の問題は、動物クラスから派生したキリンクラスとかいう説明をすることだ。もしくは、だった。こういった例は実に説明しやすい。多重継承だって完璧だぜ。ポリーモルフだって、dog->bark()でOKだ。じゃあ何が問題なのか?どっかのだれかが一般システム思考というのはよろしくないといっていたが、それと同じことだ。
こういった本を読みオブジェクト指向に入っていった人は勘違いする傾向が多い。何でもかんでも一般化してしまいたがる。だから、役にも立たないクラスをたくさん作ることになる。フレームワークで規定されているなら仕方がない。フレームワークとはそういうものだからだ。そうでもないのに、getter setterしかないクラスをたくさん作ってどうなるというのだ。直接アクセスをさせないから安全?それは明らかに間違っている。
class Human{
private:
String name;
String address;
public
String getname()
String getAddress()
String setname()
String setAddress()
}
human.name と書くことが、human.setnameと書くよりどれだけ安全だというのだ。
そしてこれはカプセル化では決してない。何一つ隠蔽していないでしょ。データ構造を見せずに処理を行ってこそカプセル化なわけだ。だから単純なgetter setterしかないのならばカプセル化とは完全に無関係だ。犬や猫に限らず、現実世界から想定したものをデザインに加えると、ほとんどのクラスがスカスカのgetter setterのみになる。だから僕らは現実世界から想定したクラスを作成するべきではないのだ。
もう一度クラス作成のメリットを思い出そう。データとその操作を一緒くたにできることだ。だから、クラスを作成するのに一番役に立つのは、個別メンバにいちいちアクセスさせるのは面倒であるような構造をもったデータ型がある場合だ。XXTreeとかXXMatrixなんてものだと最適だろう。
だから間違ってもDBから表を作って画面に出すだけなのに、DBの内容をわざわざ人間クラスやらに再構築して、画面で再構成などしてはいけない。そのDBに人間が直感的に理解できる現実世界の意味などないかもしれないが、表という構造にはそれ以上の確実な価値があるからだ。インピーダンスミスマッチなどというものは実際存在せず、仕事もしないおたく連中が作り出した妄想に過ぎない。