オブジェクト指向のはじめの一歩

広告

プログラミングを勉強していると、
オブジェクト指向 という言葉が出てきます。

少し難しそうに聞こえますね。

でも、最初から完璧にわかろうとしなくて大丈夫です。

まずは、次のことだけを考えてみましょう。

現実のものを、プログラムで使いやすい形にする

これが、オブジェクト指向を理解するための第一歩です。

ここからは、「門」と「学生」を例にして考えていきます。

イラストでは、次の流れを一枚にまとめています。

現実のもの
↓
必要な特徴だけ取り出す
↓
プログラムで使いやすい形にする

まずは細かい言葉を覚えるより、
この流れをなんとなくつかむことを目標にしましょう。

まず「門」で考えてみる

「門」という漢字があります。

この漢字は、本物の門を写真のようにそのまま描いたものではありません。

本物の門には、いろいろなものがあります。

学校の門。
お寺の門。
家の門。
お城の門。

大きさも違います。
色も違います。
形も少しずつ違います。
木でできた門もあれば、鉄でできた門もあります。

でも、私たちはそれを見て、

「これは門だ」

とわかります。

なぜでしょうか。

それは、いろいろな門に、共通する特徴があるからです。

たとえば、門には次のような特徴があります。

入口がある
左側に柱のようなものがある
右側に柱のようなものがある
上に横木のようなものがある

細かい違いはあっても、
このような特徴があると、私たちは「門だ」と考えます。

必要な特徴だけを取り出す

門を、ものすごく簡単に表すと、次のようになります。

門
{
    入口
    左の柱
    右の柱
    上の横木
}

これは、本物の門ではありません。

色は書いていません。
大きさも書いていません。
材質も書いていません。
どこにある門なのかも書いていません。

でも、「門らしさ」は残っています。

つまり、全部をそのまま表すのではなく、
必要な特徴だけを取り出しています。

このように、細かい違いをいったん置いておいて、
大事な特徴だけを取り出すことを、抽象化 といいます。

難しい言葉ですが、まずはこう考えてください。

抽象化とは、必要な特徴だけを取り出すこと

です。

次に「学生」で考えてみる

今度は「学生」で考えてみましょう。

現実の学生には、たくさんの情報があります。

名前。
年齢。
住所。
身長。
性格。
好きな食べ物。
得意な科目。
苦手な科目。
テストの点数。

でも、成績を管理するプログラムを作るとします。

そのとき、必要な情報は何でしょうか。

たとえば、まずは次の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#のルールで書き直したものです。

まとめ

オブジェクト指向は、最初は難しく感じるかもしれません。

でも、最初に考えることはシンプルです。

現実のもの
↓
必要な特徴だけ取り出す
↓
プログラムで使いやすい形にする

門なら、

門
{
    入口
    左の柱
    右の柱
    上の横木
}

学生なら、

学生
{
    名前
    点数
}

このように考えます。

そして、プログラムでは、この「形」を作って使います。

クラス     = 共通の形
オブジェクト = その形から作った具体的なもの

最初から難しい言葉を全部覚えなくても大丈夫です。

まずは、

必要な特徴だけを取り出して、形にする

という感覚をつかみましょう。

訪問数 25 回, 今日の訪問数 25回

広告

C#

Posted by hidepon