プログラミングでのクラス
「クラス」(英単語の綴りは class) と聞くと、学校や習い事の教室や学級を思い浮かべる人がほとんどだと思います。インスタンス
言葉の意味は合っていますが、「クラス」にはそれとは別に、種類・階級という意味があります。
IT やプログラミングで「クラス」というと「種類」を指します。
「種類」は「似た者同士」をひとまとめにして分ける組のことです。
さらに、種類をひとまとめにすることを「概念」と言います。
日常生活でもよく種類分けされています。
身近な例としては、「男・女」「朝食・昼食・夕食」「犬・猫・鳥・ヘビ」等が挙げられるでしょうか。
これはそれぞれ「似た者同士」で分けたクラスで分類されます。
日常的なクラス (概念) の例「クラス」は最初から定義されているものではありません。
概念 種類 人間 男・女 食事 朝食・昼食・夕食 ペット 犬・猫・鳥・ヘビ
設計者が概念を定義する必要があります。
プログラムの根幹をクラスで構成するほど開発効率が良くなりますが、その代わり後戻りができなくなります。
開発効率が良いと不具合が発生しにくくなるので、システム全体の安定動作に貢献します。
プロジェクトやプログラム構成を大局的に分析する能力が必要となります。
よほど勘が鋭い人や分析力のある人でないと、クラスを使いこなすことができません。
クラスをいい加減に設計すると、後で大変なことになります。
クラスは概念であり、種類をまとめて「ひな形」にしたものなので、それだけでは何もできません。最近の高水準言語はオブジェクト指向を導入している
ひな形から実体を生成する必要があり、その実体に対して操作を行います。
この「実体」を「インスタンス」と呼びます。
スポーツにおいて、ルールだけでは何もできず、ルールに従う選手がプレイすることと似ています。
サッカーのルール、野球のルール、テニスのルールがあり、それぞれにサッカー選手、野球選手、テニス選手がいます。
概念をひな形として定義し、インスタンスを操作することによりプログラミングする考え方を「オブジェクト指向」と呼び、
オブジェクト指向が全面的に取り入れられたプログラミング言語を「オブジェクト指向言語」と言います。
(「オブジェクト指向」には、様々な定義がありますが、現在はこの考え方が主流になっています)
オブジェクト指向という考え方・機能は 1967 年には既に存在し、これを極めた Smalltalk という環境が作られましたが、可搬性が悪く実用にはなりませんでした。実例
実用でオブジェクト指向を広めたのは 1985 年に登場した C++ 言語です。
その後、1996 年に Java 言語が登場すると、オブジェクト指向がさらに一般化されました。
どちらも、大規模プロジェクト用のプログラミング言語です。
現在では、ほとんどのプログラミング言語にオブジェクト指向が導入されています。
- Python はオブジェクト指向言語です。
- 十進 BASIC はオブジェクト指向言語ではありません。学術目的で JIS Full BASIC の仕様に従っているためそうなっています。
- VB (Visual Basic) や VBA (Visual BASIC for Application) はオブジェクト指向がサブセットで取り入れられています。
ここでは 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()); //「わん」 インスタンスを操作 } }