10-3 「動くもの」フォーム

継承を駆使すると、プログラミングが楽になり、楽しくなります。何しろ、新しい機能を付け加えるときもその差分だけをプログラミングすればいいのですから…。こうして継承によって色々なフォームを作ったら、それを図で表すとより理解しやすくなります。例えば、【応用課題 10-1】で次のような継承関係を構築した人もいるかもしれません。

各種インベーダーの継承関係

既に皆さんは「既存のフォームを継承して新しいフォームを作る」ということができるようになっています。一方、これまでのフォームを見直すことによって、よりおおもとの (上の図で言えば、インベーダーよりさらに上位の) フォームを作ることもできます。

例えば、インベーダーフォームには y 座標のスピンエディットがあり、弾フォームにも y 座標のスピンエディットがあります。これらをまとめた「動くもの」フォームをあらかじめ作っておき、そこから継承させて、弾フォームとインベーダーフォームを作ることもできます。

「動くもの」フォームとの継承関係

継承図

インベーダーフォームと弾フォームを更に見比べると、「飛んでいる」チェックボックスと「生きている」チェックボックスは (名前は違っても) 同じ機能を持っていることがわかります。このため、これらのチェックボックスも「動くもの」フォームへと移すことができます。また、他のコンポーネントでも移すことができるものがあります。

しかし、すでにインベーダーフォームと弾フォームを作ってしまった後に「動くもの」フォームを作る作業は、かなり大変です (1つ1つのコンポーネントについて、移しても大丈夫かどうか確かめる必要があります)。プログラミングが楽になるために継承があるのに、継承を使うことによって大変な作業が増えてしまうとは、何が間違っていたのでしょうか。

実は、このような継承図の設計 (クラス設計とも呼ばれます−ここでは「クラスとはフォームのこと」と考えて結構です) は、実際のプログラミングを始める前に充分に検討しておくべきだったのです。どんなフォームが必要なのか、効率的にプログラミングするにはどういう継承関係を作るか…。継承図の出来の良し悪しによって、その後のプログラミングの効率が何倍も違ってきます。継承図を作ることがプログラミングの過程の半分以上を占める、と言っても過言ではありません。