スマート駄目リーマンの忘備録

旅行記、キャリア論、世相分析など思ったことを書き連ねます

エクセルでオブジェクト指向を簡単に理解

 

 

初心者が躓くオブジェクト指向

 プログラミングを学び始めた人が、ポインターの次に躓きやすいと言っても過言ではないだろう。

 オブジェクト指向とは特定の機能を有するプログラムをクラスという集合体として扱い、そのクラスの特性をプロパティによって定義して、インスタンス化する。そして、その振る舞いをメソッドとして定義する。さらにクラスの基本的な特性はポリモーフィズムで継承される。プログラミング初心者にとっては、一連の説明は?????だろう。

 それも無理はない。プログラミング初心者は、とりあえずfor文の繰り返しや、if文の条件分岐を習得したばかりなのだ。自分で書いたプログラムに、そもそもオブジェクト指向が必要な場面はほとんど無い。

(初心者レベルのプログラミングでは、オブジェクト指向を用いなくても、同じようなプログラムをゴリゴリ書けば、とりあえず動いてしまう。)

 

一般的なプログラムの本では説明が分かりにくい

 プログラミングの本では、オブジェクト指向は何故便利なのかについての説明が全く抜け落ちている。配列の説明が終わった辺りに、いきなり、オブジェクト指向の説明が来るので面食らって挫折しまう初心者が後を絶たない。

 また、オブジェクト指向の具体的な説明もいまいちパッとしない。クラスとは一般的な動物を指す。プロパティは動物の大きさだったり、毛並みといった特徴である。メソッドとはその動物がジャンプするのか、泳ぐのかといった動作である。

 このような例えを用いて説明されても、初心者は全く分からないだろう。ゲームアプリを開発しているプログラマーになって、実際にコードをガンガン書くようになった場合のみ、初めて納得できるのではないだろうか?

 実は中途半端な例えを用いるよりも我々にとって大変身近なエクセルのセルを用いて説明すると非常に分かりやすい。今回はエクセルのセルを例にオブジェクト指向を簡単に説明したい。

オブジェクト指向の有用性

 オブジェクト指向の有用性を本当に認識できるのは、プログラミングを仕事として行って、複数人で手分けして大規模プログラミングの改修や追加機能の実装を行う段階になってからである。オブジェクト指向のクラスを利用すれば、Aという機能は田中さん、Bという機能は山田さん、Cという機能は鈴木さん、といったように機能ごとの役割分担が可能になる。そして、それを持ち寄って、メインプログラムでクラスを呼び出せば、大規模なシステム開発が効率よく行える。

 もしオブジェクト指向のクラスを用いないと、全員が膝を突きわせて一つのプログラムにかかりっきりになり、あるメンバーが特定の機能のプログラムの記述が終わるまで、他のメンバーは手待ちの状態になっていまう。さらに不具合が発生したときに、不具合個所の切り離しがほぼ不可能になっていまう。

 このようにオブジェクト指向は、大規模プログラムを効率的に行うための必要性から生まれたと考えるのが自然かもしれない。

 

クラスとは?

 エクセルに例えると、これは何も入力も色付けもされていない、真っ新なセルの事である。しかしそのセルはただの真っ新な空欄では無く、色付けを行ったり、文字を入力したり、計算出来たりする機能を有している。つまり、このような機能を秘めた真っ新な箱モノがクラスだ。

 

プロパティとは?

 セルに着色などが可能であるが、セルに着色できる色の種類、セルに入力できる文字の種類のことがプロパティ(特性)というものだ。

 

インスタンスとは?

 セルに色などのプロパティを付加させた状態にしたものだ。

 Range("A2").Interior.ColorIndex = 3     ''色パレットの3番(赤色)を設定

 エクセルマクロだと上記のプログラムで、A2のセルを赤色に着色したものがインスタンスである。インスタンス化とは上記のプログラムで色を指定することである。

f:id:yasuyankun:20220325110150p:plain

 

メソッドとは?

 色が付いた状態のままのエクセルのセルをコピーする動作のことである。エクセルのマクロだと以下のようになる。xlPasteAllでセルの特性を含めた全てを貼り付ける指令となる。xlPasteValueだと値のみのコピーになる。

 Range("A2").Copy      ''A2のセルをコピー
Range("B3").PasteSpecial(xlPasteAll) ''A2セル全特性を含む状態で貼り付ける
Application.CutCopyMode=False ''コピーモード解除

 

f:id:yasuyankun:20220325110239p:plain

 

ポリモーフィズム(クラスの継承)とは?

 エクセルのセルはどの場所のセルであろうと全く同じことが実現できる。簡単に言うとこの機能の均一さがポリモーフィズムである。(どこのセルにも基本的な機能や特性が継承されている)

 

クラスを作成するとは?

 セルの基本的な機能を定義することである。セルには文字が入力できる。着色できる。コピーが出来る。こういった基本的な機能をプログラムで構築する作業がクラスの作成に相当する。

 よって我々はマイクロソフトの社員が開発したセルというクラスを利用しているのだ。

 

カプセル化とは?

 前段で述べたように我々は、セルがどのようなプログラムで構築されているか知らない。しかし、皆はそれをエクセル上で自由に使いこなせている。つまり、クラスを適切に構築出来れば、その中身が分からなくても自由に使えることがカプセル化を意味する。

 

もしクラスが無かったら?

 セルに色を付けたり、コピーするときにセル一つ毎にセルの機能を定義して、それを走らせるためのプログラムをしなくてはいけない。実際のセルを用いた操作まで作業にまでたどり着くことは出来ないだろう。ただ途方に暮れるしかない。

 

まとめ

 実はエクセルにはオブジェクト指向の重要なエッセンスが盛り込まれており、セルが何かを理解することで、オブジェクト指向の本質が理解できたのではないだろうか?

 プログラミング初心者がオブジェクト指向を乗り越えて、有能なプログラマーに成長してくれることを願って止まない。

yasuyan.net