Objective-C數據封裝

所有Objective-C程式都由以下兩個基本要素組成 -

  • 程式語句(代碼) - 這是執行操作的程式的一部分,它們被稱為方法(函數)。
  • 程式數據 - 數據是受程式功能影響的程式資訊。

封裝是一種面向對象的編程概念,它將運算元據的數據和功能綁定在一起,並保護其免受外部干擾和誤用。 數據封裝導致了重要的OOP數據隱藏概念。

數據封裝是捆綁數據和使用函數的機制,數據抽象是一種僅暴露介面並從用戶隱藏實現細節的機制。

Objective-C通過創建用戶定義類型(稱為類)來支持封裝和數據隱藏的屬性。 例如 -

@interface Adder : NSObject {
   NSInteger total;
}

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

@end

變數total是私有的,因此無法從類外部訪問。只能由Adder類的其他成員訪問它們,而不能由程式的任何其他部分訪問。這是實現封裝的一種方式。

介面檔中的方法是可訪問的,並且在範圍內是公共的。

有一些私有方法,這些方法是在擴展的幫助下編寫的,我們將在後面的章節中學習。

1. 數據封裝示例

任何使用公共和私有成員變數實現類的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:15];
   [adder addNumber:14];

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

執行上面示例代碼,得到以下結果:

2018-11-16 02:19:46.326 main[52227] The total is 39

上面的類將數字值相加並返回總和。 公共成員addNumgetTotal是外部介面,用戶需要知道它們才能使用該類。 私有成員total是對外界隱藏的東西,但是此類需要正常運作。

2. 設計策略

除非真的需要公開它們,否則大多數人都會通過經驗來學習默認情況下將類成員設為私有。 這只是很好的封裝。

瞭解數據封裝非常重要,因為它是所有面向對象編程(OOP)語言(包括Objective-C)的核心功能之一。


上一篇: Objective-C多態性 下一篇: Objective-C類別