http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7
http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6
http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5
http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4
http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3
http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2
http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1
の続きです。
どこからフォローすれば良いのかわからないので、先頭から順に行ってます。
今回は
オブジェクトって何?
というテーマです。
継承やオーバーライドまで語っておきながら、いきなり原点の話に戻ります。
オブジェクトというのは物体とか、集合体とか、そういう意味があるそうです。
つまり、皆さんが座っているイスもオブジェクト、机もオブジェクト、ノートPCもオブジェクト、Rさんもオブジェクト、わんくま同盟もオブジェクト、もちろん皆さん自身もオブジェクトです。
そんなオブジェクトを自由に生成したり、破壊できるというのは、どれだけ凄いことなのでしょうか?
簡単にいうと、皆さんが Visual Studio の開発環境を手にした瞬間から、皆さんは神様と同じ力を手にしたことになります。
神様は、世の中にいろいろなものを作ることができます。海や陸、山や川、草木や動物など、何でも作ったり、壊したりできます。
Visual Studio を使っても、これが可能です。
但し、作る場所はコンピューターの中の広大なメモリ空間です。
このメモリ空間においては Visual Studio ユーザーは、神様として君臨でき、大量のオブジェクトを作ったり壊したりと自由にできます。
早速、神様になって、天地創造をするプログラムを C# で書いてみましょう。
class 海 {}
class 陸 {}
class 山 {}
class 川 {}
void 創造するよーん() {
海 u = new 海();
陸 r = new 陸();
山 y = new 山();
川 k = new 川();
}
こんな感じです。
まあ、「創造するよーん」というメソッドの終了と同時に、世界が消滅しているところが笑えますね。
せめてフィールド変数にしてやれよ、などと思ってみたりします。
さて、神様などと大層なことを言った割には、たったこれだけのことじゃないかと思われたかたも多いでしょう。
しかし、以前僕は言いました。
オブジェクト指向が難しいのではなく、設計と実装が難しいのです。
神様は海や陸を作るだけでなく、海がどういうものなのか、陸がどういうものなのか、これを事細かく定義してあげなければ造ることはできません。
そう考えると、神様も大変ですよね。
同様に、海というクラスを、どう設計するのか、どういうメンバを実装して、そのメンバに何をさせるのかを決めるのも自分自身です。
海がどういうものなのか、山がどういうものなのか、海の絵が表示されれば良いのか、海図が表示されれば良いのか、海の音が聞こえれば良いのか、それはソフトウェアの目的に応じて変わってきますよね。
さて、コードの解説です。
上記のコードを見ていただくとわかる通り、 new というキーワードによって、型名と同じ名前のメソッドが実行されています。
つまり、オブジェクトとは、クラスのコンストラクタ、つまり生成子を実行することによって生成されたものがオブジェクトです。
例えば、R・田中一郎オブジェクトは、C# で書くと以下のようになります。
R・田中一郎 r = new R・田中一郎();
これによって、R・田中一郎オブジェクトが生成されます。
そして、そのオブジェクトへは r を通してアクセスできます。
r.自己紹介();
これで、コンソール画面にRさんの自己紹介が表示される訳ですね。