- 面向对象 C 基础
- 面向对象 C - 主页
- 面向对象 C - 概述
- 面向对象 C - 环境设置
- 面向对象 C - 程序结构
- 面向对象 C - 基本语法
- 面向对象 C - 数据类型
- 面向对象 C - 变量
- 面向对象 C - 常量
- 面向对象 C - 运算符
- 面向对象 C - 循环
- 面向对象 C - 决策制定
- 面向对象 C - 函数
- 面向对象 C - 代码块
- 面向对象 C - 数字
- 面向对象 C - 数组
- 面向对象 C - 指针
- 面向对象 C - 字符串
- 面向对象 C - 结构
- 面向对象 C - 预处理器
- 面向对象 C - 类型定义
- 面向对象 C - 类型转换
- 面向对象 C - 日志处理
- 面向对象 C - 错误处理
- 命令行参数
- 高级面向对象 C
- 面向对象 C - 类和对象
- 面向对象 C - 继承
- 面向对象 C - 多态
- 面向对象 C - 数据封装
- 面向对象 C - 类别
- 面向对象 C - 装扮
- 面向对象 C - 扩展
- 面向对象 C - 协议
- 面向对象 C - 动态绑定
- 面向对象 C - 复合对象
- Objective-C - 基础框架
- 面向对象 C - 快速枚举
- Objective-C - 内存管理
- 面向对象 C 有用资源
- 面向对象 C - 快速指南
- 面向对象 C - 有用资源
- 面向对象 C - 探讨
面向对象 C 数据封装
所有面向对象 C 程序都由以下两个基本元素组成 −
程序语句(代码) − 这是程序执行操作的部分,称为方法。
程序数据 − 数据是受程序函数影响的程序信息。
封装是一种面向对象编程概念,将数据和用于处理数据的函数捆绑在一起,并保护它们免受外部干扰和误用。数据封装促成了 数据隐藏 这个重要的 OOP 概念。
数据封装 是将数据与其使用函数捆绑在一起的一种机制,而 数据抽象 是一种仅公开接口并向用户隐藏实施细节的机制。
面向对象 C 通过创建称为 类 的用户定义类型来支持封装和数据隐藏特性。例如 −
@interface Adder : NSObject {
NSInteger total;
}
- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;
@end
变量 total 是私有变量,我们无法从该类外部进行访问。这意味着它们只能由 Adder 类其他成员访问,不能由程序的任何其他部分访问。这是实现封装的一种方式。
界面文件内的函数可以访问且其作用域是公共的。
还有私有方法,通过 扩展 编写,我们将在下一章节中进行了解。
数据封装示例
任何实施了公共和私有成员变量的类的面向对象 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 是对外界的接口,用户需要了解这些接口才能使用该类。私有成员 total 是对外界隐藏的,但类需要它来正常运行。
设计策略
我们大多数人通过惨痛的教训了解到,除非我们真的需要公开类成员,否则应默认将其设为私有。那才是好的 封装。
了解数据封装很重要,因为它是面向对象编程 (OOP) 语言的一个核心特性,面向对象 C 也包括在内。
广告