有时 当你 使用 某一类物件时,你 可能会希望 添加 一些新的措施 适用于 这类物件。比如 适用于Fraction这类物件的措施 有 add:,但是 add:这项措施 只能将 两个比例 相加。因此 你 再 添加 三项措施 适用于 Fraction这类物件,从而 可以将 两个比例 相减、相减 和 相除。
有 一个很实际的解决法案 就是 类别。类别 使 你 很容易地 将 相关联的措施 模块化。同时 类别 也 使 你 很容易地 对 某类物件 进行扩展,而 你 却不需要 知道 这类物件的源代码,也 不需要 创建 属于这类物件的新的一类物件。
我们 先 来看看 Fraction这类物件的接口部分:
接下来 我 把 add:这项措施 从这里 移除,并且 将 其 添加 到新的类别中。添加到新类别中的措施 除了 add:之外,还有 另外三项措施 可以完成 减法、乘法 和 除法。下面 就是 MathOperations这个新类别的接口部分:
虽然 这 也是 接口部分,但 它 是 对已有的Fraction类型物件的接口部分的扩展。因此 你 必须导入 已有的接口部分文件,以便 让 编译器 知道 Fraction这类物件的构成。在#import后面 出现了 这样一行语句:
这行语句 告诉 编译器 MathOperations 是 Fraction这类物件的一个新类别。需要注意的 是 你 在这里 并不需要写出 Fraction这类物件所属的类型,因为 编译器 已经 从Fraction.h这个文件当中 得知了。你 也不需要写出 每个Fraction类型的物件所包含的变量。如果 你 写出 Fraction这类物件所属的类型 或者 每个Fraction类型的物件所包含的变量,编译器 就会发出 错误警告。
然后 我 把 MathOperations这个类别中所有的措施 和 主程序 一起 放 在一个文件main.m当中:
运行 这个程序,可以得到 这样结果: