黑马程序员技术交流社区

标题: Objective-C 数据封装 [打印本页]

作者: ZXY66452    时间: 2015-12-9 21:04
标题: Objective-C 数据封装
所有的 Objective-C 程序有以下两个基本要素:
程序语句(代码):这是一个程序,执行相应的操作,他们被称为方法的一部分。
程序数据: 该数据是程序的信息,并且影响程序的功能。
封装是面向对象编程的概念结合在一起的数据和处理数据的功能,并保持既安全,不受外界干扰和滥用。数据封装导致数据隐藏重要的OOP概念。
数据封装是一种机制,捆绑的数据和使用它们的函数,和数据抽象是一种机制,仅暴露的接口,从用户隐藏的实现细节。
Objective-C的支持封装和数据隐藏通过创建用户定义的类型,称为类的属性。例如:
@interface Adder : NSObject
{
    NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;

- (void)addNumber:(NSInteger)newNumber;

- (NSInteger)getTotal;

@end
可变总量是私有的,我们不能从类的外部访问。这意味着,他们才可以访问Adder类的其他成员,而不是由任何其他程序的一部分。这是实现封装的一种方式。
接口内部文件的方法访问和公开范围。
有私有方法,这是书面扩展的帮助,我们将在接下来的章节中学习。
数据封装示例:
任何的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 和 getTotalare 向外界接口,用户需要知道他们使用的类。私有成员总数是从外面的世界,是隐藏的东西,但类正常运作所需要的。

设计策略:
我们大多数人已经学会了通过惨痛的经历,使集体成员私有默认情况下,除非我们真的需要公开他们。这只是良好的封装。
重要的是要了解数据的封装,因为它是所有面向对象编程(OOP)语言,包括Objective-C语言的核心功能之一。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2