オブジェクト指向のはじめの一歩
プログラミングを勉強していると、
オブジェクト指向 という言葉が出てきます。
少し難しそうに聞こえますね。
でも、最初から完璧にわかろうとしなくて大丈夫です。
まずは、次のことだけを考えてみましょう。
現実のものを、プログラムで使いやすい形にする
これが、オブジェクト指向を理解するための第一歩です。
ここからは、「門」と「学生」を例にして考えていきます。

イラストでは、次の流れを一枚にまとめています。
現実のもの
↓
必要な特徴だけ取り出す
↓
プログラムで使いやすい形にする
まずは細かい言葉を覚えるより、
この流れをなんとなくつかむことを目標にしましょう。
まず「門」で考えてみる
「門」という漢字があります。
この漢字は、本物の門を写真のようにそのまま描いたものではありません。
本物の門には、いろいろなものがあります。
学校の門。
お寺の門。
家の門。
お城の門。
大きさも違います。
色も違います。
形も少しずつ違います。
木でできた門もあれば、鉄でできた門もあります。
でも、私たちはそれを見て、
「これは門だ」
とわかります。
なぜでしょうか。
それは、いろいろな門に、共通する特徴があるからです。
たとえば、門には次のような特徴があります。
入口がある
左側に柱のようなものがある
右側に柱のようなものがある
上に横木のようなものがある
細かい違いはあっても、
このような特徴があると、私たちは「門だ」と考えます。
必要な特徴だけを取り出す
門を、ものすごく簡単に表すと、次のようになります。
門
{
入口
左の柱
右の柱
上の横木
}
これは、本物の門ではありません。
色は書いていません。
大きさも書いていません。
材質も書いていません。
どこにある門なのかも書いていません。
でも、「門らしさ」は残っています。
つまり、全部をそのまま表すのではなく、
必要な特徴だけを取り出しています。
このように、細かい違いをいったん置いておいて、
大事な特徴だけを取り出すことを、抽象化 といいます。
難しい言葉ですが、まずはこう考えてください。
抽象化とは、必要な特徴だけを取り出すこと
です。
次に「学生」で考えてみる
今度は「学生」で考えてみましょう。
現実の学生には、たくさんの情報があります。
名前。
年齢。
住所。
身長。
性格。
好きな食べ物。
得意な科目。
苦手な科目。
テストの点数。
でも、成績を管理するプログラムを作るとします。
そのとき、必要な情報は何でしょうか。
たとえば、まずは次の2つだけでよいかもしれません。
名前
点数
この場合、「学生」を次のように表すことができます。
学生
{
名前
点数
}
これは、現実の学生そのものではありません。
その人の性格は入っていません。
住所も入っていません。
好きな食べ物も入っていません。
身長も入っていません。
でも、成績管理に必要な情報は入っています。
つまり、成績管理のために必要な特徴だけを取り出した形です。
「門」と「学生」は同じ考え方
門の場合は、こうでした。
門
{
入口
左の柱
右の柱
上の横木
}
学生の場合は、こうでした。
学生
{
名前
点数
}
どちらも同じ考え方です。
現実のものを全部そのまま入れるのではありません。
必要な特徴だけを取り出して、
わかりやすい形にしています。
現実の門
↓
必要な特徴だけ取り出す
↓
門
{
入口
左の柱
右の柱
上の横木
}
現実の学生
↓
必要な情報だけ取り出す
↓
学生
{
名前
点数
}
この考え方が、オブジェクト指向の大事な入口です。
プログラムでは「形」を作る
プログラムでは、このような「形」を作ってから使います。
たとえば、
学生
{
名前
点数
}
という形を作っておけば、いろいろな学生を表すことができます。
たとえば、
学生1
{
名前 = 山田
点数 = 80
}
学生2
{
名前 = 佐藤
点数 = 92
}
学生3
{
名前 = 田中
点数 = 75
}
このように、同じ「学生」という形を使って、
何人分ものデータを作ることができます。
クラスとオブジェクト
ここで、少しだけ専門用語を出します。
プログラムで作る共通の形を、クラス といいます。
そして、その形から作った具体的なものを、オブジェクト といいます。
たとえば、
学生
{
名前
点数
}
これは、共通の形です。
つまり、クラスです。
一方で、
学生1
{
名前 = 山田
点数 = 80
}
これは、実際に作られた1人分のデータです。
つまり、オブジェクトです。
簡単にまとめると、こうです。
クラス = 共通の形
オブジェクト = その形から作った具体的なもの
全部を入れなくていい
ここで大事なことがあります。
プログラムでは、現実の情報を全部入れる必要はありません。
たとえば、同じ「学生」でも、作るプログラムによって必要な情報は変わります。
成績管理なら、
学生
{
名前
点数
}
でよいかもしれません。
出席管理なら、
学生
{
名前
出席回数
}
でよいかもしれません。
連絡先を管理するなら、
学生
{
名前
電話番号
メールアドレス
}
になるかもしれません。
同じ「学生」でも、何のために使うかによって、
取り出す情報は変わります。
これも大事な考え方です。
目的に合わせて、必要な情報だけを取り出す
これが、クラスを考えるときの基本です。
最後にC#で見る
ここまで日本語で考えてきました。
学生
{
名前
点数
}
これをC#というプログラミング言語で書くと、次のようになります。
class Student
{
public string Name;
public int Score;
}
いきなり見ると、少し難しく見えるかもしれません。
でも、日本語で考えた形と比べると、対応しています。
学生 → Student
名前 → Name
点数 → Score
つまり、C#のコードは、急に出てきた意味不明な英語ではありません。
先に日本語で考えた
学生
{
名前
点数
}
という形を、C#のルールで書き直したものです。
まとめ
オブジェクト指向は、最初は難しく感じるかもしれません。
でも、最初に考えることはシンプルです。
現実のもの
↓
必要な特徴だけ取り出す
↓
プログラムで使いやすい形にする
門なら、
門
{
入口
左の柱
右の柱
上の横木
}
学生なら、
学生
{
名前
点数
}
このように考えます。
そして、プログラムでは、この「形」を作って使います。
クラス = 共通の形
オブジェクト = その形から作った具体的なもの
最初から難しい言葉を全部覚えなくても大丈夫です。
まずは、
必要な特徴だけを取り出して、形にする
という感覚をつかみましょう。




ディスカッション
コメント一覧
まだ、コメントがありません