- 基本 Objective-C
- Objective-C - 主页
- Objective-C - 概述
- Objective-C - 环境设置
- Objective-C - 程序结构
- Objective-C - 基本语法
- Objective-C - 数据类型
- Objective-C - 变量
- Objective-C - 常量
- Objective-C - 运算符
- Objective-C - 循环
- Objective-C - 决策
- Objective-C - 函数
- Objective-C - 块
- Objective-C - 数字
- Objective-C - 数组
- Objective-C - 指针
- Objective-C - 字符串
- Objective-C - 结构
- Objective-C - 预处理器
- Objective-C - Typedef
- Objective-C - 类型转换
- Objective-C - 日志处理
- Objective-C - 错误处理
- 命令行参数
- 高级 Objective-C
- Objective-C - 类和对象
- Objective-C - 继承
- Objective-C - 多态性
- Objective-C - 数据封装
- Objective-C - 类别
- Objective-C - 摆姿势
- Objective-C - 扩展
- Objective-C - 协议
- Objective-C - 动态绑定
- Objective-C - 复合对象
- Obj-C - 基础框架
- Objective-C - 快速枚举
- Obj-C - 内存管理
- Objective-C 有用资源
- Objective-C - 快速指南
- Objective-C - 有用的资源
- Objective-C - 讨论
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 类的其他成员访问,而不能由程序的任何其他部分访问。这是实现封装的一种方式。
接口文件内的方法是可访问的并且在范围内是公共的。
有一些私有方法,它们是在扩展的帮助下编写的,我们将在接下来的章节中学习这些方法。
数据封装示例
任何使用公共和私有成员变量实现类的 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是与外界的接口,用户需要知道它们才能使用该类。私有成员总数是对外界隐藏的,但对于类的正常运行是必需的。
设计策略
我们大多数人都通过痛苦的经历学会了默认将类成员设为私有,除非我们确实需要公开它们。这就是很好的封装。
了解数据封装非常重要,因为它是包括 Objective-C 在内的所有面向对象编程 (OOP) 语言的核心功能之一。