2011-09-16 20 views
1

私の知る限り、Objective-CはObject Oriented Programming Langugeであり、CategoriesはObjective-Cによって提供される機能です。など対象機能のカテゴリー機能はどのOOPS機能にありますか?

だから私はそのカテゴリ機能がコンセプト

  • をOOPSその下に来ている知っていただきたいと思い抽象
  • ポリモーフィズム
  • カプセル化
  • 継承、事前に

感謝。

カプセル化におそらく最も近いMrunal

+1

申し訳ありませんが、拡張性はOOPの概念ではありません。これはどの言語であってもコーディング機能です。コードは簡単に拡張できるように記述する必要があります。 – Mrunal

答えて

7

@アビザーンの答えが良いです。私はそのカテゴリを動的ディスパッチの一種であると付け加えます。特に、サブクラス化せずに既存のクラスを拡張するために使うことができます。言い換えれば、オブジェクト指向プログラミングは、一連の言語機能よりもデザイン哲学であると言われています。 "OOP機能はどのような後置インクリメントに対応していますか?"答えは「なし、それは言語機能です」カテゴリは主にOOPデザインを実装するために使用されるものではありません(ただし、上記のように時々あります)。彼らの元々の使用は大きな実装ファイルを分割することでした。彼らの後の使用は、言語の欠陥(@optionalの欠如)のために非公式なプロトコルを提供することでした。今日では、プラットフォーム固有のライン(NSString+UIStringDrawingNSString+AppKitAdditions)に沿ってコードを分割するために主に使用されています。

拡張機能はカテゴリに類似しており、主にOOPデザイン機能ではなく言語機能です。これらは、ある程度のカプセル化を容易にしますが、主にメソッドを使用する前に定義する任意のコンパイラ要件の副作用です(これは設計や開発者のニーズに関係なく、コンパイラを単純化するためです)。拡張は、いくつかの深いOOP要件と混同すべきではありません。

したがって、実行時に追加機能を追加するカテゴリを使用すると、動的ディスパッチが行われます。それを超えて、それはいくつかの非OOPのものに使用される単なる言語機能です。

1

、それは学術的なOOPの概念に来ます。しかし、これは実際にOOPの学術的定義とOOPデザインパターンの実用的な世界の違いを示しています。

3

Buck and YacktmanのCocoa Design Patterns bookによると、 カテゴリはそれ自体のパターンであり、Objective-Cプログラミング言語で直接サポートされているパターンです。

関連する問題