C#はオブジェクト指向言語と言われています。
オブジェクト指向とは?とか検索すると「カプセル化、継承、多態化」とかいうキーワードが出てきます。
C#ではこれを、以下の機能で実現しています。
キーワード | 必要な要件 | C#の機能 |
---|---|---|
カプセル化 | ・必要なものだけを組み合わせたデータ型を作る仕組み ・必要なものだけを外部に公開する仕組み | クラス(ユーザー定義型)の定義 プロパティ、アクセシビリティ |
継承 | 定義したデータ型(クラス)を再利用する仕組み | クラスの継承 |
多態化 | 同じ命令に対して異なる動きをできるようにする仕組み | メソッドのオーバーロード メソッドのオーバーライド インターフェース ジェネリック |
このようにC#では各キーワードを実現する機能をもっているのでオブジェクト指向言語ということになります。
ただこれはオブジェクト指向の考え方をC#言語の仕様としてサポートしているというだけで、他の考え方(手続き型など)でもプログラムを書くことができます。
オブジェクト指向とは?(答えるとは言ってない)
オブジェクト指向とは?で検索したら明確な答えはないと書いてあったので、
自分はこういう風に理解してるよという話をします。
誤解している可能性もあるので、その時は指摘してください。
とりあえずオブジェクト指向とは、
「こういうふうにクラスを定義していけば、いい感じにプログラミングできるよ」という考え方です。
考え方なので必ず使えというものではありません。
もう少し言うと、オブジェクトを使って問題を解決しようというのがオブジェクト指向だと思っています。
・こういう風に書けば簡潔に表現できる
・バグを出しにくくするにはこういう工夫をしよう
・ソースコードが膨大になったとしても修正がなるべく小範囲になるようにしよう
など、プログラマーやプログラム(システム)に関わる人の負担を減らすための考え方の1つがオブジェクト指向だと思っています。
オブジェクトってなに?
次にオブジェクトって何かといえば、
関連のある要素「データ(変数)と動作(メソッド)」を1つにまとめたものがオブジェクトです。C#でのオブジェクトはクラスの定義を元に作られたインスタンスのことです。
3つのキーワード
で、最初にでてきたキーワードがでてきます。
「関係のあるデータ、メソッドをクラスにまとめ必要なものだけ外部に公開しよう。そしてデータの変更はメソッドを使って行おう」という考え方がカプセル化、
「定義したクラスの機能を受け継いで新しいクラスの定義をつくれば共通な部分を残しつつ固有な機能を追加することができるよ」というのが継承、
「あらかじめクラスに定義できるメソッド名を決めておいてメソッドの中身はそれぞれ定義するときに書けば関連のある要素をまとめやすくなるな」というのが多態化です。
自分的に一番大事なのはカプセル化だと思っています。必要なものだけを集めたデータ型を作ると、動作(メソッド)で起こる影響(値の変化)を内部だけに閉じ込めることができます。こうするとメソッドを使う側は渡すパラメーターと返ってくる結果だけが分かればよくなりますし、動作を修正する場合にそのメソッドだけを直せばいい、ということになります。
この考え方はオブジェクト指向だけというわけではなく基本的な考え方の1つです。
それぞれのキーワードについての詳細は別記事で紹介予定です。
と、思ったけれどとてもわかりやすい解説動画があったのでそちらを紹介。
いいたいことはすべて動画のずんだもんが言ってくれています。
作成者様に感謝!!
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント