»オブジェクト指向は現代プログラミングにおいては強力な手法だが、高度に抽象化された概念を伴うため理解するには適切な学習と訓練が必要である。プログラミングにより、具体的な例をあげて、オブジェクト指向を説明してみよう。フォーム上にボタンがあり、ボタンの大きさをスライダの操作によって変化させるようなプログラムを考えよう。ツールボックスにボタンコントロールとトラックバーが用意されているので、マウス操作だけでフォーム上に配置することができる。トラックバーで変化させる値の範囲を、0から300にしよう。プロパティをプロパティウィンドウで変更する。次にトラックバーをマウスでダブルクリックし、トラックバーのスクロールイベントを作成する。ここに次のコードを書こう。すると、スクロールバーを動かすことでボタンの高さの値と幅の値がスクロールバーの値になるので、大きさが変化する。動くプログラムができる。いうボタンのサイズは大きすぎるので、スライダを右端によせればボタンがフォームからはみ出すようになる。範囲に留まるようにプログラムを書き換えよう。これで求める動作をするアプリケーションが得られる。オブジェクト指向では、こう考える。範囲に留まるのは操作をする側で調節するのではなく、ボタン自体の性質にするべきだと考える。以上にする指示を無視するように実装するのだ。オブジェクト指向でやってみよう。それにはもともと用意されたボタンオブジェクトに変更を加える必要がある。そこでオブジェクト指向の「継承」という概念を用いる。「継承」は、あるオブジェクトの性質を引き継ぐ別のオブジェクトを作る方法である。何もコードを付け加えていないので、このままでは単なるボタンと同じである。自分のサイズを変更するメソッドを定義する。ようにしてサイズを変更できるようになる。場合のみ受け付けるようになる。メソッドを利用して「大きさ変われ」と指示を出し、それを受けたカスタムボタンオブジェクト自身が指示通り動くかどうかを判断して動くようになる。値しか受け付けないので、それ以外の指示を出しても無視する挙動をする。オブジェクトにふるまいを実装することで、値の指示範囲を主プログラム側で気にする必要がなくなるのだ。移動すると、プログラム全体はより見やすくなる。オーバーロードという概念があり、同じ名前のメソッドでも引数の型が異なれば重複して実装することができる。大きさになれmyCustomButton.changeSize(180);ミッドサイズの大きさになれmyCustomButton.changeSize(“mid”);といった指示を出すように書くことができるようになる。このことでオブジェクトのふるまいがオブジェクト自身に記述され、プログラム全体が見やすく、また合理的にコントロールできるようになる。Platform1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。C#プログラミング、IoTなどのコンピュータ教育を行う。Professional)を受賞し、現在14回目の連続受賞。MIEE)を受賞し、現在3回目の連続受賞。»プログラミング教育において「オブジェクト指向」を学ぶことは重要だが、もちろん小学生にオブジェクト指向を教えろと言っているのではない。将来的に小学校のプログラミング教育にオブジェクト指向が取り入れられることになれば、それは歓迎すべきことだが、今すぐそうはならないだろう。近い将来にオブジェクト指向ではない別のアプローチがプログラミングの主流になるかもしれない。現代プログラミングにおいてはオブジェクト指向は強力な手法であり、およそ個人レベルで使われるアプリケーションのほとんどがオブジェクト指向によって作られているといえる。このことから高等学校レベルではオブジェクト指向を身につけることをプログラミング教育の目標のひとつにしたい。発達段階に応じたプログラミング教育を考えたとき、小学校では手続き型のプログラミングに留めるべきだろう。キーボードから文字入力をするコーディングではなく、ブロックを視覚的に組み合わせてプログラムを作る、いわゆる「ブロック型」の開発環境が望ましいだろう。構造化プログラミングとしてまとめられる「順次構造、繰り返し構造、条件分岐」を理解しプログラミングができること、センサやアクチュエータをマイコンボードやロボットで制御し、入出力を体験的に理解し活用できること、などが目標になるだろう。小学校の先生はオブジェクト指向を知らなくてよいのかといえば、そうではない。小学校の先生もオブジェクト指向を理解するべきである。発達段階がすすむにつれ、どこかの段階で身につけさせたい概念である。小学校の授業では教えなくても、これを知っているのと知らないのとでは教材の作り方や教え方が違ってくるだろう。数学なら、中学校では連立方程式を学習する。ある問題として「予算が290円あります。鉛筆は1本30円、消しゴムは1個50円です。予算を全部使って7人に渡すには、鉛筆と消しゴムをそれぞれ何個ずつ買えるでしょう。個として連立方程式を作って求めるだろう。小学生にとって連立方程式は抽象化度が高いので学ばないが、小学校6年生では「文字と式」の単元で数字を○や□にあてはめた計算方法を学習する。「鉛筆を1本だけ買った場合、2本買った場合、3本買った場合・・・」と実際の数をあてはめながら答えを求めることもさせる。これは、中学校で連立方程式を学ぶ前段階として位置づけられている。教師は中学校では連立方程式を学習することを知っており、それを前提に授業を組み立てる。学問は系統だっており、学習も発達段階に応じて系統的に組み立てられるからだ。したがって小学校の先生がプログラミング教育を行う時も、学習の先にオブジェクト指向があることを知っているのと知らないのとでは授業のアプローチも違うはずだ。その意味でも、小学校の先生もオブジェクト指向を理解しておくべきだ。オブジェクト指向は難しいと言われるが、すぐれた教材と学習メソッドがあれば理解できる。小学校からプログラミング教育を、と言われて奮闘する小学校の先生には頭が下がる思いであり、先駆的な実践を始めている先生方は子どもたちの未来を切り開く希望の星だと言えるが、そこを、あえて、さらに質の高いプログラミング教育を実現するために、オブジェクト指向を学んでいただきたいと望んでいる。Platform1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。C#プログラミング、IoTなどのコンピュータ教育を行う。Professional)を受賞し、現在14回目の連続受賞。MIEE)を受賞し、現在3回目の連続受賞。教材オブジェクト指向は宗教ではない。プログラミングを合理的にする重要な手法のひとつである。オブジェクト指向は難しくない。よき学びの環境がないだけだ。»オブジェクト指向が語られるとき、ときに「宗教論争になる」と言われることがあるが、そうではない。宗教論争においては他の宗教を認めず自分の宗教の正しさのみ主張し、相手の宗教を否定する。オブジェクト指向は他のプログラミング手法を否定するものではなく、ただ単にプログラミングを合理的にする手法のひとつである。それは現代プログラミングにおいては重要であり、かつ広く実際に利用されている。一般的なパソコンユーザーが利用するアプリケーションのほとんどがオブジェクト指向によって作られている。すべてのプログラミングをオブジェクト指向によって作る必要はない。オブジェクト指向ではないプログラミング言語もあり、それらも当然意味がある。オブジェクト指向プログラミングにおいても手続き型の考え方が不要なわけではない。プログラミングを合理的にするためにオブジェクト指向は極めて有効である。オブジェクト指向を説明するときに、動物や物に例えられることがある。場合それは、なんとなく説明になっているようでなっていない。それはオブジェクト指向というものが、そもそも現実世界をプログラミングに持ち込むために考えられたのではなく、プログラミングという抽象的な世界で効果的に機能するために考え出されたものだからだ。オブジェクト指向は抽象的なプログラミングの世界をさらに高度に抽象化したものといえる。したがって現代プログラミングにおいてオブジェクト指向を知らないことは損である。知っていて使わないことと知らないから使えないことは意味が違う。オブジェクト指向を用いると圧倒的に合理的にできるプログラミングが、知らなければその恩恵にあずかることはできない。そもそも言語体系がオブジェクト指向を前提としているにもかかわらず、それができないことは圧倒的に不利であると同時に、言語の持っている潜在能力を生かせないことになる。言語仕様がオブジェクト指向であるとき、プログラミングではオブジェクトを操作することになる。オブジェクトを操作するだけでは、たとえ動くコードを書けたとしても、それはオブジェクト指向のプログラミングではない。求める機能を実装したオブジェクトを設計し、全体のコードの中で効果的に使うことができてはじめてオブジェクト指向プログラミングをしたといえる。オブジェクト指向は難しいと言われる。確かに筆者もオブジェクト指向を理解し、自然に使えるようになるには時間がかかった。プログラマーを自任している人でも、実際のところオブジェクト指向を理解し、使いこなしている人がどれだけいるか、いささか疑問に感じることも多い。いうのも、世にあふれる初心者向けのプログラミング解説書を読んだとき、どうやらオブジェクト指向を理解していないのではないかとおもわれるふしが多々あるのだ。オブジェクト指向は難しくない。よき学習の機会が少ないからだ。それは書籍でもWebの記事でもそうである。クラスやインスタンスを説明しても、なぜ、そうするのか、どこがオブジェクト指向なのかが説明されていない。オブジェクト指向でプログラミングした場合と、そうでない場合とを比較し、だからオブジェクト指向でやるのだ、というような明確な解説が少ない。オブジェクト指向を理解することは、例えば自転車に乗る、跳び箱を飛ぶ、鉄棒で逆上がりをするといったようなものだ。こつがわからなければ何度やってもうまくいかない。練習しても一生できないのではないか、と子どもなら思うところだが、一度できれば忘れない。子どもは、自転車に乗る、跳び箱を飛ぶ、鉄棒で逆上がりをする、といった体験をしながら達成感を得て成長する。すぐれた教育者は、どの子も自転車に乗れ、跳び箱を飛べ、鉄棒で逆上がりができるようなメソッドを身につけて指導する。オブジェクト指向も高度に抽象化されたプログラミング手法であるが、高校生レベルなら身につくはずである。教科「情報」の教員なら、まず自らオブジェクト指向を身につけ、すぐれた教育メソッドを開発すべきである。Platform1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。C#プログラミング、IoTなどのコンピュータ教育を行う。Professional)を受賞し、現在14回目の連続受賞。MIEE)を受賞し、現在3回目の連続受賞。真似をするなら自己責任で。電解コンデンサを交換して壊れたパソコンの電源を修理する。INSERTトリガを利用するメインギターになりそう。お疲れの時は充分に休むのが吉。体が欲しているんですよ。いい音楽を聴きましょう。