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

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

  • Program statements (code) −これは、アクションを実行するプログラムの一部であり、メソッドと呼ばれます。

  • Program data −データは、プログラム機能の影響を受けるプログラムの情報です。

カプセル化は、データとデータを操作する関数を結合し、外部からの干渉や誤用から安全に保つオブジェクト指向プログラミングの概念です。データのカプセル化は、次の重要なOOPの概念につながりました。data hiding

Data encapsulation データとそれを使用する関数をバンドルするメカニズムであり、 data abstraction は、インターフェイスのみを公開し、実装の詳細をユーザーから隠すメカニズムです。

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 外の世界からは隠されているものですが、クラスが適切に機能するために必要です。

設計戦略

私たちのほとんどは、本当に公開する必要がない限り、デフォルトでクラスメンバーをプライベートにすることを苦い経験から学びました。それはいいですencapsulation

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