ひみつノート 2
〜 クラス 〜
2024-01-11 作成 福島
TOP > asob > note02
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob ]

プログラミングでのクラス

「クラス」(英単語の綴りは class) と聞くと、学校や習い事の教室や学級を思い浮かべる人がほとんどだと思います。
言葉の意味は合っていますが、「クラス」にはそれとは別に、種類・階級という意味があります。

IT やプログラミングで「クラス」というと「種類」を指します。
「種類」は「似た者同士」をひとまとめにして分ける組のことです。
さらに、種類をひとまとめにすることを「概念(がいねん)」と言います。

日常生活でもよく種類分けされています。
身近な例としては、「男・女」「朝食・昼食・夕食」「犬・猫・鳥・ヘビ」等が挙げられるでしょうか。

これはそれぞれ「似た者同士」で分けたクラスで分類されます。
日常的なクラス (概念) の例
概念種類
人間男・女
食事朝食・昼食・夕食
ペット犬・猫・鳥・ヘビ
「クラス」は最初から定義されているものではありません。
設計者が概念を定義する必要があります。

プログラムの根幹をクラスで構成するほど開発効率が良くなりますが、その代わり後戻りができなくなります。
開発効率が良いと不具合が発生しにくくなるので、システム全体の安定動作に貢献します。

プロジェクトやプログラム構成を大局的に分析する能力が必要となります。
よほど勘が鋭い人や分析力のある人でないと、クラスを使いこなすことができません。
クラスをいい加減に設計すると、後で大変なことになります。
インスタンス
クラスは概念であり、種類をまとめて「ひな形」にしたものなので、それだけでは何もできません。
ひな形から実体を生成する必要があり、その実体に対して操作を行います。
この「実体」を「インスタンス」と呼びます。

スポーツにおいて、ルールだけでは何もできず、ルールに従う選手がプレイすることと似ています。
サッカーのルール、野球のルール、テニスのルールがあり、それぞれにサッカー選手、野球選手、テニス選手がいます。

概念をひな形として定義し、インスタンスを操作することによりプログラミングする考え方を「オブジェクト指向」と呼び、
オブジェクト指向が全面的に取り入れられたプログラミング言語を「オブジェクト指向言語」と言います。
(「オブジェクト指向」には、様々な定義がありますが、現在はこの考え方が主流になっています)
最近の高水準言語はオブジェクト指向を導入している
オブジェクト指向という考え方・機能は 1967 年には既に存在し、これを極めた Smalltalk という環境が作られましたが、可搬性が悪く実用にはなりませんでした。
実用でオブジェクト指向を広めたのは 1985 年に登場した C++(しーぷらすぷらす) 言語です。
その後、1996 年に Java(じゃば) 言語が登場すると、オブジェクト指向がさらに一般化されました。
どちらも、大規模プロジェクト用のプログラミング言語です。

現在では、ほとんどのプログラミング言語にオブジェクト指向が導入されています。
実例
ここでは Python と Java で、クラス「ペット」を定義して、実体の生成と操作を実行してみます。
(プログラミング言語は異なりますが、同じ処理を記述しています)

Python の場合
class ペット:  # クラス「ペット」を定義
    def __init__(self, foots, sound):
        self.手足の数 = foots
        self.鳴き声   = sound
    def 鳴き声は(self):
        return self.鳴き声


たま = ペット(4, "にゃあ") # インスタンス「たま」を生成 みけ = ペット(4, "にゃあ") # インスタンス「みけ」を生成 ポチ = ペット(4, "わん") # インスタンス「ポチ」を生成 ぴーちゃん = ペット(2, "ぴよぴよ") # インスタンス「ぴーちゃん」を生成 print(たま.鳴き声は()) #「にゃあ」インスタンスを操作 print(ポチ.鳴き声は()) #「わん」 インスタンスを操作

Java の場合 (Java はクラスなしでは記述できない)
my_pet.java
class my_pet {

    static class Pet {  // クラス「ペット」を定義
        private int foots;
        private String sound;

        Pet(int foots, String sound) {
            this.foots = foots;
            this.sound = sound;
        }

        String get_sound() {
            return this.sound;
        }
    }


public static void main(String[] args) { Pet tama = new Pet(4, "にゃあ"); // インスタンス「tama」を生成 Pet mike = new Pet(4, "にゃあ"); // インスタンス「mike」を生成 Pet pochi = new Pet(4, "わん"); // インスタンス「pochi」を生成 Pet pichan = new Pet(2, "ぴよぴよ"); // インスタンス「pichan」を生成 System.out.println(tama.get_sound()); //「にゃあ」インスタンスを操作 System.out.println(pochi.get_sound()); //「わん」 インスタンスを操作 } }