ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

Objective-Cでの継承とオブジェクトコンポジション(デレゲート)について

UIScrollViewが提供しているデレゲートUIScrollViewDelegateで定義しているメソッドを継承でいうフックメソッドと看做して、UIScrollViewを継承、デレゲートとして継承したクラス(仮にSubscrollViewと呼ぶ)を指定し実装するのは間違ったやり方だろうか?要は移譲先として自分自身になる。

 Javaの観点から見るとおかしなやり方かな?と思う。Effective Javaという本では、安全性のため、継承しては行けないクラスにはfinalを付けろと記載してある。Javaに例えるならこのやり方は継承を許容する場合にはクラスにはfinalを付けず、パブリック、プロテクトメソッドにfinalを付けるイメージになるだろう。

 と書いて、ラップするクラスを作ってその中でUIScrollViewを生成し、ラップするクラスを移譲先として設定、各メソッドを実装するのが自然なやり方だと感じた。継承元がUIViewであればUIViewオブジェクトとして普通に使えるし。

f:id:objectiveworker:20140914115948j:plain

追記 2014/10/4:やっぱり分からない。ケースバイケースかな?