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)的核心功能之一。