1.1 对象的概念
面向功能的软件设计的局限性:难于应对需求的变更,
维护成本会比较高。对象有属性,并且能够接收消息来进行相应的处理。属性指的是对象的性质和所具有的信息。基于面向对象的软件开发,比较接近于人的思考方式,更善于应对需求变更。
消息是对象之间通信的唯一手段。对象收到消息后,会解析并处理消息。具体的处理方法和这个对象的内部实现叫做方法。送信的对象称为发送者,收信的对象称为接收者。通过消息协调各个对象之间的消息发送,使其作为一个整体运行,这就是面向对象的软件运行模式。
使用对象的概念对问题进行抽象化的方法叫作面向对象。抽象化指的是尽可能地不考虑相关细节,只关注对象的核心和本质。
对象的属性一般被定义为指向其他对象的指针,这个指针叫做实例变量或者变量。变量可能指向一个空的对象,也可能不是一个指针,可以是数值对象。对象和对象之间一般是通过一个对象的某个属性是另外一个对象的变量来建立关系的。没有引用关系的两个对象之间无法发送消息。
把具备相同变量和方法的对象提炼出来,做成“模版”,之后使用“模板”来创建各个具体对象。这种“模板”就是类。类包含了一组特定对象的共有特性。用类创建对象的过程叫做实例化,生成的对象叫做实例对象,或简称为实例。方法是在类中统一定义的,同一个类不同实例对象的方法都是相同的。
1.2模块和对象
软件开发中模块也是一个功能单位,构成一个软件的各个相互独立的部分叫做模板。一个模块由变量、方法甚至其他模块构成。所以模块具备层次性。
独立性高(低耦合、高内聚)的模块划分是最佳的划分方式。模块的独立性指的是每个模块之间的交集应该尽可能地小。减少模块辩护时的影响,降低维护成本。一个独立性高的模块会把what和how清楚的分开,声明和实现是分开的,只要保持声明一致,具体的实现可以随时被更换成性能更高的实现,提高软件的可维护性。
模块独立性的划分原则是只对外提供最小限度的接口信息,内部实现不对外公开。这个原则叫做信息隐蔽或封装。
绝大多数基于面向对象语言开放的程序中,对象是由类的定义来描述的,实例对象是在程序运行的时候动态生成的。类的定义和实现文件就是构成程序的模块。
类是由实例变量和方法构成的。类公开给外部的、关于如何使用这个类的信息叫做接口。
一个设计良好的类只会把必须公开的信息记录在接口中,这样才能够加强独立性。
为了高效率地实现进程间通信,OC特别定义了一种接收方无需返回应答的消息。