第14回 クラスとインスタンス

今まで使ってきた「オブジェクト」について理解を深めます。

目次

オブジェクト

前回までの記事で、キーボードライブラリとスイッチライブラリを扱ってきました。

キーボードライブラリの場合はKeyboardというオブジェクトを使い、Arduino Microがキーボードとして振る舞う様子を確認しました。また、スイッチライブラリの場合は、自分でスイッチのオブジェクトを作ってスイッチ制御をしました。

ところでこの「オブジェクト」という呼び方は、他の呼び方がされることもあります。

そこで今回はオブジェクト以外の呼び方についても確認しておきます。

キーボードライブラリとスイッチライブラリの違い確認

これから「オブジェクト」の理解を深めていきますが、もう一度キーボードライブラリとスイッチライブラリの違いを確認しておきましょう。

項目 キーボードライブラリ スイッチライブラリ
ヘッダファイル #include <Keyboard.h> #include <avdweb_Switch.h>
オブジェクト作成 不要 必要
Switch hidariSwitch(23);など
メソッド Keyboard.begin();など hidariSwitch.poll();など

この2つのライブラリの大きな違いは、オブジェクトを作る必要があるかどうかです。実は、オブジェクトを作る必要があるライブラリが一般的です。逆にオブジェクトを作る必要がないライブラリはかなり特殊なライブラリです。

そこで、これから一般的なライブラリであるスイッチライブラリについて詳しく説明します。スイッチライブラリの説明が終わった後に、キーボードライブラリがなぜオブジェクトを作る必要がないライブラリないのかについて説明します。

クラスとインスタンス

スイッチライブラリでは自分でオブジェクトを作りました。具体的には以下のようにオブジェクトを作成しましたよね。

Switch hidariSwitch(23);

この文法は以下のような意味合いを持っています。

クラスとインスタンス1

例えば、クッキーを作るときって、クッキーの型を使って、クッキー生地を型抜きしますよね。Switchはクッキー型のようなもので、hidariSwitchは型抜きしたクッキー生地のようなものです。

ところでこの文法ですが、次のような呼び方もあります。

クラスとインスタンス2

前回までの記事ではhidariSwitchのことを「オブジェクト」と呼んでいましたが、クラスから生成されたオブジェクトのことを「インスタンス」と呼ぶこともあります。

また、クラスからインスタンスを作ることを「クラスからインスタンスを生成する」とも言われています。今後は「インスタンス」という言葉を主に使っていくことにします。

クラスとインスタンス3

スイッチライブラリのインスタンス生成

このシリーズではこれからキーボードを製作していくわけですが、当然ながらスイッチは複数個使用します。具体的には、以下の3つのスイッチをキーボードのキーとして使用します。

使用する複数のスイッチ

この3つのスイッチを制御するために、以下のようにそれぞれのスイッチに対して、スイッチクラスからインスタンスを生成してプログラミングします。

スイッチのインスタンス

具体的なプログラムとしては、たとえば以下のようにそれぞそのスイッチに対応するインスタンスを生成します。

Switch hidariSwitch(23);  // 左スイッチのインスタンス
Switch chuoSwitch(22);  // 中央スイッチのインスタンス
Switch migiSwitch(21);  // 右スイッチのインスタンス

このようにSwitchクラスのインスタンスを生成しておけば、例えば中央のスイッチ状態を調査する場合は、chuoSwitch.poll();と書けば調査することができます。

このようにスイッチライブラリを使用する場合、製作するものによってスイッチの個数や接続ピンが異なりますので、インスタンスは自分で生成する必要があります。

キーボードライブラリのインスタンス生成

ところで、キーボードライブラリを使った時を思い出すと、#include<Keyboard.h>でヘッダファイルをインクルードしたあと、すぐにKeyboard.begin();というようにキーボードのインスタンスが使えるようになっていましたよね。

実は、キーボードライブラリでは、ヘッダファイルの中でKeyboardクラスからKeyboardインスタンスを生成しているため、プログラマがスケッチの中でキーボードインスタンスを生成する必要がなかったんです。

では、なぜヘッダファイルでキーボードクラスのインスタンス生成をしてくれているのでしょうか。

先ほどのスイッチライブラリでは、製作するものによってスイッチの個数や接続ピンが異なりますので、あらかじめライブラリ側でインスタンスを生成しておくことはできないですよね。

一方で、キーボードの機能はArduino Microの中に1個しか作ることはできません。

キーボードインスタンス

Arduinoボードでキーボード機能を実現する場合、プログラミングできるキーボードは1個だけです。

あらかじめヘッダファイルで「Keyboard」という名前のインスタンスを生成しておけば、使う人の余計な手間が必要なくなるだろう、というようにライブラリを開発した人は思ったのでしょう。実際にキーボードライブラリのヘッダファイルには、最後にキーボードクラスからKeyboardインスタンスを生成するように書かれています。

今回はオブジェクト、クラス、インスタンスという用語を整理しましたが、ちょっとややこしかったですよね。この後の記事でも出てきますので、多く経験することによって慣れていくようにしてください。

更新履歴

日付内容
2021.9.23新規投稿
2022.2.27導入部分説明補足
通知の設定
通知タイミング
guest
0 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
目次