delegate とは何か(4)

ところで、丸をタッチしたら・・・という記述をしたいので、UIViewController.m の touchesBegan に記載を行いましたが、よく考えてみると、丸に関する記述なので、丸の class に記述を行うのが正しい姿なのではないだろうかと思いませんか。

オブジェクト指向とは何か?という議論は様々なところでなされていますが、そういった解説を読みオブジェクト指向に詳しい人ほど強くそう思うでしょう。

この考えは正しくて、丸の挙動に関する記述なので、丸の class に動作を書くべきです。

一方、UIViewController.m に記述することもあります。

それは、丸の特例として UIViewController.m だけで特殊な動作をさせたい、あるいは、この場合に限って丸の動作を拡張したいといった場合です。

今回の事例ではそのような特例の考慮は必要なく、丸に関して常に同一の動作でよく、換言すると、丸固有の動きとして規定したいので丸の class に記述することが妥当だということになります。

つまり、丸をタッチしたらどのような動きをしてほしいか、丸について統一的に規定しておきたい、ということです。

動作はこうなります。

・ユーザは丸をタッチし動かす

・動かした量に応じて丸を移動する

これを実現するには、次のような記述になります。

・ユーザが丸をタッチすると、丸の calss の touchesMoved が反応する

・ユーザが丸の移動を終えると、UIViewController が反応し、丸を移動し再描写する

通常、method はオブジェクトに対して message を送るなどと形容されます。

上記の例では、丸の class から UIVewController に対して message を送るような形をとります(厳密には、オブジェクトを指定せず通知を送っている)。

では、具体的にどのように記述するのでしょう。

 

続く。