所有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
上面的類將數字值相加並返回總和。 公共成員addNum
和getTotal
是外部介面,用戶需要知道它們才能使用該類。 私有成員total
是對外界隱藏的東西,但是此類需要正常運作。
2. 設計策略
除非真的需要公開它們,否則大多數人都會通過經驗來學習默認情況下將類成員設為私有。 這只是很好的封裝。
瞭解數據封裝非常重要,因為它是所有面向對象編程(OOP)語言(包括Objective-C)的核心功能之一。
上一篇:
Objective-C多態性
下一篇:
Objective-C類別