Objective-c-data-encapsulation

提供:Dev Guides
移動先:案内検索

Objective-Cデータのカプセル化

すべてのObjective-Cプログラムは、次の2つの基本的な要素で構成されています-

  • プログラムステートメント(コード)-これはアクションを実行するプログラムの一部であり、メソッドと呼ばれます。
  • プログラムデータ-データは、プログラム機能の影響を受けるプログラムの情報です。

カプセル化は、オブジェクト指向プログラミングの概念であり、データとデータを操作する機能を結び付け、外部の干渉や誤用から安全に保ちます。 データのカプセル化により、*データ隠蔽*という重要なOOPコンセプトが生まれました。

  • データのカプセル化*は、データとそれらを使用する機能をバンドルするメカニズムです。*データの抽象化*は、インターフェースのみを公開し、実装の詳細をユーザーから隠すメカニズムです。

Objective-Cは、 classes と呼ばれるユーザー定義型の作成を通じて、カプセル化とデータ隠蔽のプロパティをサポートします。 たとえば-

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

変数totalはプライベートであり、クラスの外部からアクセスできません。 これは、プログラムの他の部分ではなく、Adderクラスの他のメンバーのみがアクセスできることを意味します。 これは、カプセル化を実現する1つの方法です。

インターフェイスファイル内のメソッドはアクセス可能で、スコープ内でパブリックです。

*extensions* を使用して記述されたプライベートメソッドがあります。これについては、今後の章で学習します。

データのカプセル化の例

パブリックおよびプライベートメンバ変数を使用してクラスを実装するObjective-Cプログラムは、データのカプセル化とデータの抽象化の例です。 次の例を考慮してください-

#import <Foundation/Foundation.h>

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

@implementation Adder
-(id)initWithInitialNumber:(NSInteger)initialNumber {
   total = initialNumber;
   return self;
}

- (void)addNumber:(NSInteger)newNumber {
   total = total + newNumber;
}

- (NSInteger)getTotal {
   return total;
}

@end

int main(int argc, const char *argv[]) {
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   Adder *adder = [[Adder alloc]initWithInitialNumber:10];
   [adder addNumber:5];
   [adder addNumber:4];

   NSLog(@"The total is %ld",[adder getTotal]);
   [pool drain];
   return 0;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

2013-09-22 21:17:30.485 DataEncapsulation[317:303] The total is 19

上記のクラスは数値を加算し、合計を返します。 パブリックメンバー addNum および getTotal は外部世界へのインターフェイスであり、ユーザーはクラスを使用するためにそれらを知る必要があります。 プライベートメンバー total は、外部からは隠されていますが、クラスが適切に動作するために必要です。

戦略の設計

私たちのほとんどは、実際にクラスメンバーを公開する必要がない限り、デフォルトではクラスメンバーをプライベートにするという苦い経験を​​通じて学んでいます。 それはちょうど良い*カプセル化*です。

データのカプセル化は、Objective-Cを含むすべてのオブジェクト指向プログラミング(OOP)言語のコア機能の1つであるため、データのカプセル化を理解することが重要です。