統制と自治:オブジェクト指向

iOS のアプリを Objective-C で作っています。オブジェクト指向の言語なので、delegate とか、仕組みが提供されているものなので、知っていればればその恩恵を受けられます。今回は、自作した機能でオブジェクト指向の恩恵を受けることができた典型的な事例があったので書き記しておこうと思います。

作ろうとしているのは、月曜日から日曜日のアイコンを表示し、それぞれの曜日をタッチするとクイズが始まる・・・といった機能です。曜日のアイコンは、その曜日にならないとタッチできません。曜日アイコンの演出は、回答できるのにまだ回答していない曜日のアイコンは目立つように少し大きく・小さくを繰り返すアニメーションを実装し、また、すでに回答してしまった曜日には、肩に花をつけようとしました。

こういったことをやろうとすると、まず考えつくのは、曜日アイコンを表示している view に、各曜日のアイコンを規定し、各曜日それぞれの状態を調べ、状態に応じて演出を実装するという方法です。controller を実装するということでしょうか。各日付のオブジェクトを統制しようとする方法です。これ、結構大変で、記述する量がものすごく多くなるのは避けられません。量が多いという事は後から見てよくわからなくなる可能性が高いのと、記述している最中でも、途中でデバッグする際に苦労するでしょう。これしか方法を知らなければ、文句も言わず(いや、言いながらか)書くしかないのです。今、月曜日から日曜日の 7 つのオブジェクトを統制するためのコードを書いていますが、よく言われるのが、1 日から 30 日までに拡張するとどうなるか・・・これ、かなりきついと思います。学校の教室で教師が何人の生徒を見ることができるか、多くなるほど大変ですよね、それと同じ事です。

せっかくオブジェクト指向の言語を使っているのだから、もっと自治的な方法はないか考えてみました。曜日のアイコンを class にしてそこに制御を描くようにするとコードの記述量は減るし、管理するのは基本的に一つのオブジェクトなので、全然楽です。

かなり今更ですが、オブジェクト指向のよい点は何?と問われたとき、すぐに思い浮かぶ典型的な例だったので、備忘のため書いておきました。