Objective-c-data-encapsulation
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つであるため、データのカプセル化を理解することが重要です。