>単刀直入に言うと
>「ゴチャゴチャ長ったらしい。いずれわかるものを余計にわからなくしてるんじゃないか」
繰り返し確認ですが(3回目くらいかしら)、これは、私が書いた
「疑り深いあなたのためのオブジェクト指向再入門」
http://kmaebashi.com/programmer/object/index.html
に関する言及ですか? (Y/N)
>で、ちょっとこう説明すればいいんじゃないかってのを書いたんで見てください
>
http://kill.s31.xrea.com/object.html
で、こっちの説明のほうが、「疑りぶかい~」の説明よりも優れている、という
主張であると。
まあねえ、初心者向けにどんな説明がよいか、なんてことは、実際に初心者を大量に
連れてきてアンケートでもしないとわからないことなので、どっちが優れているかは
私にはなんとも言えませんが。
まあ、初心者としての感想は初心者の人に任せるとして、一応初心者ではないつもりの
私の目から、norgeさんの説明を見ると。
>結論:クラスは構造体としても使える
12~13年前のC++の入門書では、こういうふうに、クラスを構造体の拡張として
説明しているものが多かったですね。
で、getterとsetterをつけて、「ほらカプセル化できてるでしょ」とやるわけです。
が、この説明じゃ、norgeさん自身が書いているように、
>実際はこんなバカな事は誰もやらないだろうが、
と思われるだけでしょう。ていうか私がPointの例で言っているように、
setterを解放しといてカプセル化もクソもないもんだ。
おそらくnorgeさん自身そう思うからこそ、getter/setterの話より先に、
>構造体ではなくクラスを使う意味
として、
>public int attack() {
> return power + weapon; //攻撃力と武器の攻撃力の和を返す
>}
これを出したんでしょうが…
「なぜattackすると整数値が返ってくるの?」
[258]の例:
>public int run (int gas) {
> return (gas * this.mileage);
>}
「なぜrunすると整数値が返ってくるの?」
「オブジェクト指向的に考えてこんなメソッドはおかしい」的な議論は私自身
嫌いなわけですが、そんな私から見ても、こんな設計、仮に仕事で若いのが書いてきたら
コードレビューの段階で却下します。
void attack(Enemy)
ならともかく。
だいたい、attack()みたいなメソッドをCharcterに入れるのは、ポリモルフィズムを
期待するのでもない限り無意味で、「char1.power + char.weapon」をあちこちに
分散させるのが嫌なら
void attack(Character, Enemy)
という「関数」を作ってもいいはずだから、「
>結論:簡単に記述できるようになる
にはなりませんね。