前回は、Scratchのオブジェクト指向プログラミング(OOP)について、アラン・ケイの定義や「おとうさんスイッチ」を用いて説明した。

 簡単に振り返ってみると、その本質は、オブジェクト(スプライト)へのメッセージ送信(メッセージング)だった。メッセージを受け取ったスプライトは、対応するスクリプトを実行する。そして、スプライトの例としてネコを用い、「i」のキーが押されると、「『い』が押された」というメッセージが放送(ブロードキャスト)され、それを受け取ったネコが一回転するスクリプトが実行された。

 このとき、ネコは1匹しかいなかったが、もしネコがたくさんいたらどうなるだろう。今回はこのような並行プログラミングについて考える。

ネコのクローン

図1●スタンプ、ハサミ、拡大縮小ボタン
図1●スタンプ、ハサミ、拡大縮小ボタン

 では、さっそくネコを増やしてみよう。スプライトは何個でも複製(クローン)を作ることができる。複製を作るには、ステージの上にあるスタンプボタンを使う(図1)。これをクリックすると、カーソルがスタンプの形に変わるので、ネコのスプライトの上で再度クリックする。すると、ネコのクローンがステージに現れる。このとき、見た目だけでなく、その操作(スクリプト)と属性(変数とその値)も一緒にコピーされている。ただし、名前は「スプライト1」から「スプライト2」に変わる。

 Scratchにはクラスがなく、新しいオブジェクト(インスタンス)はもとのオブジェクトを原型(プロトタイプ)としてクローニングで生成する。つまり、Scratchはインスタンスベース(プロトタイプベース)である。

 ここで、スプライト2のネコの色を変えてみよう。ステージの下のスプライト一覧から「スプライト2」をクリックして選択し、「見た目」カテゴリーにある「色の効果を(25)ずつ変える」をクリックすると、色相を変えるメッセージが送られて黄緑色になる。オリジナルのスプライト1は変化しない。このように属性値はスプライトごとに独立である。

並行処理とポリモーフィズム

 では、「i」のキーを押してみよう。2匹のネコが同時に1回転したはずだ。同じメッセージを受け取ったスクリプトは、何もしなくても並行に動作する。

 今度は、スプライト2のスクリプトを変えてみる。 [(10)度回す]の10を20に変更するとどうなるだろうか。「i」キーを押すとスプライト1は1回転、スプライト2は2回転する。

 このように、同じ「『い』が押された」というメッセージが送られても受け取るレシーバーによって振る舞いが違う。これが多態性(ポリモーフィズム)だ。

 ピタゴラスイッチのコーナー「おてつだいロボ」は、おとうさんスイッチの逆で、子供ではなくおかあさんがスイッチを押して、子供に「おもちゃを片付ける」などのメッセージを送る。このとき、子供は何人いてもよい。子供たちはそれぞれ自分なりの方法でおもちゃを片付ける。

 Scratchで並行プログラミングが可能なのは、技術的な理由ではなく、そちらの方が子供にとって、私たち大人にとっても、自然だからだ。ゲームやアニメのキャラクターも並行に動いている。逆に、一列に並んで順番に処理を進める方が特殊なのかもしれない。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら