質問: new CChildTest(); cout << Test->TemplateMethod( 1, 2 ) << endl; delete Test; return 0; } ``` のような感じの方がイメージしやすいのです。 ( サンプルでは 「何らかの処理」ってありますが、例の例なので省いています。実際にはちゃんとした式かなんかが書いてあるとします。 ) その手の学校に行けば学べると思いますが、私は趣味で独学でやっているのでその方法は無理です。 書籍を買う方法もありますが、できれば無料でできたらなぁと。 言語は できれば C/C++ ( C++ ) がいいですが、 Javaでも OK です。 宜しくお願い致します。
回答: すごく大雑把に言うと、データを渡してデータを戻すのは関数指向。 データはオブジェクトが保持し、データの操作はメソッドで行うというのがオブジェクト指向。 僕もデザインパターンを学ぶのが手っ取り早いと思いますね。 デザインパターンはオブジェクト指向のテクニック集だと思うので。 tomohiro_obaraさんが紹介している本は僕も読みました。 説明に使われている言語はJavaです。 当時からこの本はすごく評価が高くて、その流れで読んでみたのですが、 特別分かりやすいなぁとか、説明に工夫されてるなぁとかは思いませんでした。 けっこう気合いを入れないと読めない本でしたね。 ただCD-ROMがついていて、そこに本で使われているコードが入っているので、 それを動かしながら僕は進めました。 「なるほど」と思うことが多くありました。 できれば無料で学びたいとのことですが、本は1冊読んだ方がいいと思います。 デザインパターンには、独学では中々思いつかない領域の思想があります。 センスがある人であれば、たどりついちゃうのかもしれないですけど。 あとは、オープンソースのSDKなどを読んだりするのもいいですね。 例えば、Javaのioパッケージは、デコレーターパターンが使われていて、とても汎用的にできています。 ``` new BufferedReader(new InputStreamReader(System.in)) ``` みたいなやつですね。 使いづらい、分かりづらいと悪評の多いパッケージですが、 設計思想としてはとても良く出来ていると思いますし、僕は好きです。 ただ、よく使われる組み合わせは、組み合わせた状態のものを 専用クラスで最初から用意してくれくれよな。。とは思います。 java7からはFilesが用意されて、ファイル操作はけっこう楽になりました。 「関数とユーティリティクラスは禁止」「関数はオブジェクト指向では不要」は 軽く見てみましたが、色々考え方があるんですねぇ。。。僕は同意しかねますが。 状態を持つ必要がなく、繰り返し何度も利用したい処理ってのは絶対にありますからね。 状態とは、ようはインスタンス変数のことですね。 ユーティリティクラスも作りますし、privateなメソッドも使います。 ただ、ユーティリティクラスはオブジェクト指向に反する存在だと理解はしておくべきです。 そもそもこのサイトは、関数は作っちゃダメとかコテコテのオブジェクト指向の説明をしているわりに、 説明に使っている言語がJavaの時点で何とも言えない感じはします。 Javaは純粋オブジェクト指向言語ではないので。 やっかいなプリミティブ型がいますし、= や + などは演算子であってメソッドではないですからね。 配列も「配列オブジェクト」ではないですし。 だから配列操作をマシにするために、java.util.Arrays のようなユーティリティクラスが 標準で用意されているのでしょう。 賛否両論ありそうですが、なんなら最初は全てprivateなスコープで作っていき、 必要なものを後からpublicにしていけば、カプセル化されたそれっぽいものができると思いますよ。