これってどんなプログラム言語?

C#ってなんだ?


ジャップ「はじまりました!C#講座!」
しー「初めましての方は初めまして!初めましてじゃない方はこんにちは!」
ジャップ「え!ボクたちのこと知ってる人いるの!?」
しー「世の中にはね・・・見えないものが見える人達が大勢いるんだよ・・・」
ジャップ「しーちゃんがなんのことを言ってるか分からないよ!」

しー「ところでジャップくん、C#ってなぁに?」
ジャップ「良い質問だね、しーちゃん。C#っていうのはねプログラミング言語のことなんだよ。」
しー「つまり、C#っていうのはシンプルかつ強力で、タイプ セーフのオブジェクト指向言語であり、C# が備えている多数の革新的な機能を使用すると同時に、C 形式の言語が持つ表現力と簡潔さを維持しながら、アプリケーションを迅速に開発できるMicrosoft社が提供している.NET Framework で動作する幅広いアプリケーションを構築するようにデザインされたプログラミング言語ってことなの?」
ジャップ「めちゃくちゃ詳しいね!しーちゃん!」
しー「えへへー」
ジャップ「でもそれじゃコレをみてくれてるボンクラどもが理解できないから、もっと分かりやすく説明してみようか!」
しー「これを打ってるヤツ最初C#のことをC++を勘違いしてくらいだからねー」
ジャップ「ウケルー」

しー「えーとそれじゃあ、C#をより簡単に分かりやすく、なおかつセクシーに要約したらどういう言語なの?」
ジャップ「さっき、しーちゃんが説明してくれた『Microsoft .NET環境向けソフトウェアを開発するためのオブジェクト指向プログラミング言語』のことなんだよ。(cv.山ちゃん)」
しー「わぉ、セクシー!で、Microsoft .NETって?」
ジャップ「詳しく説明するとこれも長くなるから、とりあえずは『Microsoft社が提唱しているシステム開発技術』の総称のことなんだよ。」
しー「具体的には?」
ジャップ「javaのようにプラットフォームを選ばずに、『.NET Frameworkさえインストールされていれば、どんなOS上でもアプリを動作可能出来る技術』のことだよ」
しー「つまりは良太郎のライナーフォームみたいなもの?」
ジャップ「そうだね、それ言うとデンオウベルトがOSでライダーパスが.NET Frameworkってことになるね。」

しー「なるほどー。じゃあオブジェクト指向型プログラミング言語って?」
ジャップ「オブジェクト指向型っていうのはね、操作手順よりも操作対象に重点を置く考え方。オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方なんだよ。」
しー「よくわからないよぅ・・・」
ジャップ「関連するデータの集合と、それに対する【手続き(メソッド)】を【オブジェクト】と呼ばれる一つのまとまりとして管理し、その組み合わせによってソフトウェアを構築する。」
しー「もうちょっと具体的にー」
ジャップ「そうだねぇ。この【オブジェクト】っていうのはね、現実世界のモノになぞえられているから【オブジェクト指向】って呼ばれてるんだよ。」
しー「モノ?」
ジャップ「たとえばしーちゃんは愛車オロチでよくドライブを楽しんでるけど、車の中で具体的にどういう仕組みで車が働いているかがわからなくても、運転方法さえ理解していれば車を扱うことができるでしょ?」
しー「うん」
ジャップ「つまり「車」という【オブジェクト】は自身を動作させる【手続き】を知っていて、その【手続き】を使用するするためには、外部から指示を与える。つまりこの場合はしーちゃんが命令するだけで車を動かすことができるっていうことだね。」
しー「その考えた方が【オブジェクト指向】なの?」
ジャップ「そういうこと。何らかの【データ】と、それを操作するための【手続き】の組み合わせが【オブジェクト】っていうこと。あと【手続き】は用語で【メソッド】って呼ばれてるんだよ。」
しー「じゃあ、もともと用意されたパッケージの組み合わせでプログラムを組むってことなんだね。」
ジャップ「そうそう。」

しー「【オブジェクト指向】のことはだいたい理解できたよー。でも他の言語もオブジェクト指向なんだよね?」
ジャップ「うん、CやC++もオブジェクト指向だね。」
しー「じゃあ、CやC++とC#は何が違うの?」
ジャップ「C#は、『C言語やC++言語をベースに拡張しつつ、Java風の機能や表記などが盛り込まれていて、Visual Basicと同等以上の動作速度を持つアプリケーションを開発できる』と言われているんだよ。」
しー「なんだか胸焼けしそうなくらい良い所取りをしているんだねー」
ジャップ「C++言語よりも『メモリ管理の自動化によりコーディングが手軽に』。javaよりも『より現実的でどんな処理も容易に書ける』。Visual Basicよりも『データ型が厳密に扱われ、コンパイラがバグを見つけやすい』んだよ。」
しー「なるほどー。ハイセンスでかつスタイリッシュでアナーキーなエクスタシーをセンセーションしているだね!」
ジャップ「てきとーにも程があるよ、しーちゃん!まぁここいらはのちのち理解していったらいいよ。」
しー「らじゃー」
ジャップ「簡単に一通り説明したけど分かった?」
しー「うん、イネス先生ばりの説明で理解できたよ。」
ジャップ「じゃあとりあえず今日はこれくらいにしておこうか」
しー「りょうかいーありがとうございましたー」
しー・ジャップ「えんいー」



クラスとインスタンスはどんなものか?


ジャップ「今回は【クラス】と【インスタンス】について説明しようっぷー」
しー「語尾が急に変わるなんてまだキャラが安定してないだね!」
ジャップ「それは言わないのが華だよしーちゃん。とりあえず【クラス】と【インスタンス】っていうのはねC#のオブジェクト指向機能の中核をなすものなんだよ」
しー「大事なものなんだね!」
ジャップ「そうそう。【クラス】っていうのは『設計図として機能する図面』みたいなもので、【インスタンス】っていうのは『設計図に従って製造される製品』と考えると分かりやすいかな。」
しー「んーちょっとむずかしいなー」
ジャップ「例えばね、車の機能を持った【クラス】があったとして、それに「car」という名前が付いているとするよ。そして、実際に製造された時計は【クラス】carの【インスタンス】って呼ばれるんだ。」

────────────────────────────────────
例:名前(name)と年齢(age)の情報を含むhannyaというクラスを作ってみる。

1:class hannya
2:{
3:  public string name;
4:  public int age;
5:}

  • 【class】名前を定義
  • 括弧内にクラスの内容を記述
  • 記述内容は変数nameと変数ageを作成
  • それぞれ文字列型と整数型を指示
  • 二つの変数に【public】というアクセス修飾子を記述。
 ※プログラムの内外どこからでもアクセスが可能という意味

────────────────────────────────────

しー「っていう例を作ってみました!」
ジャップ「例が怖いよ!何のことを言ってる分からないけどボクはすっごい好きだよ!」
しー「おちけつー」
ジャップ「とりあえず、上の例はあくまで『クラス内の変数宣言なので実際はまだ変数は作成されていない』んだよ。」
しー「つまり、【クラス】は設計図みたいなものだから、だね」
ジャップ「そういうこと。『変数を作りなさい、という指示を書き込んだものであって、変数そのものを作れっていう指示ではない』からなんだ。よってこの変数が本当に作成されるのは、『クラスの【インスタンス】が作成されたとき』ってわけさ。」


ジャップ「じゃあ次に、【インスタンス】を作る方法を説明するね」
しー「サー」

例:
1:void test()
2:{
3:  hannya tamura;
4:  Console.WriteLine(tamura.name);
5:}

しー「こんな感じー?」
ジャップ「なまえー!あってるけどなまえー!」
しー「はちみつくま」
ジャップ「それ以上しゃべるんじゃねえ!先にすすめるよ、しーちゃん!上のはtest()って【メソッド】の中で、hannyaという【クラス】を利用した例だね!」
しー「でも全力全開だして記述したのに機能しないよー?ちなみに[Console.WriteLineメソッドは文字列が出力します!って意味だよー」
ジャップ「・・・そうだね。これだと【コンパイル】する段階で、『未割り当ての変数tamuraにアクセスされました。』ってエラーメッセージが出力されるだけだね。」
しー「どうしてなのなの?」
ジャップ「・・・。「hannya tamura;」って書いて実際に実行されるのは、『hannyaクラスの【インスタンス】を参照する入れ物としての変数が用意されるだけ』であって、hannyaクラスの【インスタンス】が作られるわけではないんだよ。」
しー「うーん・・・ややこしいなぁ・・・少し頭を冷やさないとふっとーしてきちゃいそうだよー」
ジャップ「hannyaクラスのインスタンスを作成するためには【newキーワード】を記述する必要があるんだ」
しー「にゅー?」
ジャップ「例を作ってみるね」

────────────────────
例:
1: void test()
2: {
3: hannya tamura;
4: tamura = new hannya();
5: Console.WriteLine(tamura.name);
6: }

────────────────────

ジャップ「3行目で変数は作られるけど、中身が入っていないのは理解?」
しー「りかいりかい」
ジャップ「そして4行目で【クラス】hanyaの【インスタンス】が【newキーワード】により生成されるんだよ。」
しー「生成された【インスタンス】はアクセスすることはできるの?」
ジャップ「そのために『空の変数nameに【インスタンス】への参照を代入(=)する』んだ」
しー「なるほどー。そうすれば変数nameを経由して、生成された【インスタンス】にアクセス出来るんだね!」
ジャップ「そうそう。ちなみに5行目の[tamura.name]は変数tamuraを通して、nameというクラス内の変数(メンバ変数)を

参照するって記述でもあるんだよ。」
しー「4行目がなかったから、変数nameの中身は空っぽで【インスタンス】も生成されなんだね!」
ジャップ「いえーす」

しー「これで出力するプログラムは完成なのかな?」
ジャップ「んーこれだとまだ実行はできないんだよ。変数nameに文字列を入れるコードがないから、変数nameが空のま

ま出力されてエラーになっちゃうんだ。」
しー「どうすればいいの-?」

──────────────────────
例:
1:static public void test()
2:{
3:  hannya tamura;
4:  tamura = new hannya()
5:  tamura.name = "田村";
6: tamura.age = 34;
7: Console.WriteLine(tamura.name);
8:}
──────────────────────

ジャップ「何度も同じことといっちゃうけど、5,6行目の代入は3,4行目の間に移動させると機能しないんだ。」
しー「この時点で入れ物としての変数tamuraは存在するけど、【インスタンス】が作られていなからだね!」
ジャップ「」

メモ
1.クラスを定義
2.クラス内に変数作成
3.メソッドを定義
4.メソッド内(?)でクラスのインスタンスのための変数を用意
5.newキーワードでクラスインスタンスを作成し、前項のインスタンスのための変数に代入
6.変数に出力するデータを代入
7.Console.WriteLine () で出力を指示。(※printfみたいなもの?)。


メソッドって関数と違うの?

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年10月27日 21:21
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。