2012-03-26 5 views
2

私はECMAScriptのバックグラウンド(非常にC/C++であるようです)から来ています。したがって、クラス,オブジェクト、そして多型のようなクールなものを含む古典的なC++スタイルの継承を学びました。継承の代わりにコンポジションを使用

最近、AndroidとiOSの開発が好きです。 JavaはCベースのように見えるので、そこにあるCベースのルールの大部分を使っても問題ありませんが、iOSは私のアプローチでは気になりません。特にオブジェクト継承のようなものがあります。

構成に強い意見があるようですのでお尋ねします。これまでのコンポジションで見たことから、のファンではなく、プロジェクトで作業する必要があります。

あなたはObj-C/iOSの開発者ですが、古典的な継承を超える構成をお勧めしますか?それとも、それは状況的なことですか?

+1

これは、潜在的に議論の余地のある質問のように思えます。事実上の回答につながるものではありません。 –

+1

構成はhas-a関係です。継承はis-a関係です。 has-a関係はis-a関係よりも優れたモジュール性を有するように見える。 – michex

+5

「してください」 - あなたの*投稿の** **第4の言葉*は***は必要ありません******************************************************** 'Backticks' **は**' code'のためのものです。 –

答えて

5

Objective-Cのオブジェクトモデルは、C/C++/Javaとはかなり異なります。これはメッセージベースであり、C/C++/Javaのようにメソッドを呼び出すのではなく、メッセージに応答するオブジェクトに重点を置いています。

ココアライブラリへのアプローチは、平坦オブジェクトの継承階層を支持し、フラットなそれらのオブジェクト階層を維持するために、カスタマイズのためのデリゲートパターンに依存しています。なぜこれを行うのですか?ライブラリの多く、特にGUIは、階層が肥大化し、どのクラスから継承するのかがはっきりしないため、複雑な問題を抱えています。例えば、私の専門知識産業であるビデオゲームの現代のオブジェクトシステムは、実際にはより柔軟で維持しやすいように、混合動作によってオブジェクトが構築される合成パラダイムを使用します。

私はココアのライブラリのような構成モデルを使用すると言うのではなく、はっきりとモデル - ビュー - コントローラのエリアの一つに仕切られたクラス間の相互作用を使用し、カスタマイズのための委任を使用しないでしょう。カスタマイゼーションをコア機能とは別に保つことで、複雑さや階層がより平坦になります。

0

新しいクラスは、一般的にそれが由来だというクラスへのLiskov Substitution Principleを以下の場合は、継承を使用し、それ以外は、合成/凝集を好みます。それは互いに反対ではなく、どちらも広く使われています。

0

私にとって、これはあなたが使っているクラスの問題です。アップルの中核となる基盤やUIライブラリを使用している場合は、サブクラス化を避けることをお勧めします。これらのクラスの多くは具象クラスではなく、むしろクラスクラスタです。これらのクラスでは、osは実行時に実際に使用するクラスを決定することがあります。

一般に、私はサブクラス化する非常に説得力のある理由がない限り、組成を好む。私がサブクラス化すべき魅力的な理由がある場合でも、私はしばしば元のクラスのメソッドのカテゴリを作成することを選択します。

関連する問題