重读了一下《Objective-C基础教程》,发现书中关于面向对象编程本质,有一章独特的解释。
什么是面向对象
OOP是一种编程架构,可构建由多个对象组成的软件。
想象对象就像软件中的一个个小机器人,它们各自完成特定的工作,并互相传递信息,完成多种合作的工作。
面向对象的目的
减少修改正常工作的代码
面向对象编程的核心是间接
间接并不神秘
变量就是一种间接
'''
for (int i = 1; i <= 10; i++) NSLog(@"%d", i);
'''
通过把10替换成count,输出范围的改变就再也不会导致循环方法的修改:
'''
int count = 10
for (int i = 1; i <= count; i++) NSLog(@"%d", i);
'''
文件名也是一种间接
通过文件名读取一个电话号码文件,文件内容的增减,比如从一个市号码扩展到全国号码不会导致处理方法的修改。
objective-c 类中的 self
对自身的一种间接访问,获得类内部的其它变量,而不用关心这些变量的实际存储。
因此对象是一种指针,是对数据及其操作的一种“间接”。
假设一个Shape类,[shape draw] 真正调用的方法,是由子类实现的draw方法决定的,如Circle 类,继承自 Shape,它的draw 能真正绘制一个圆形。
下面是一个方法执行的过程
1) 查询消息的目标对象属于哪个类。
2)对应的类查找代码块,获取方法的地址。
3)Objective-C运行该方法的代码。
“间接”实现了隐藏
设计一系列基本对象,对外公开抽象对象及其基本操作,并隐藏具体的实现细节。
那么问题来了,隐藏带来了什么好处?隐藏迫使调用者发布指令,而不是传递数据,完成功能的过程交给了对象本身。所以值得注意的是:对于一个绘图程序,一个只传递了三角形三点数据而不能绘制本身的“三角形对象”,是设计不良的对象。