在程序化程序中,代码为王,数据为从属。换句话说,您的程序对数据起作用,而且它们通常没有紧密绑定。
在 OO 世界中,对象是最重要的东西。一个对象由数据和允许作用于该数据的代码组成,它们之间的联系非常紧密。就是封装的概念,信息的隐藏。
举个例子,假设你有一个数字,你想把它加倍。这样做的程序方法是:
n = n * 2
这里的代码非常明确地将 n 乘以 2 并将结果存储回 n。
这样做的OO方式是向数字对象发送一个“消息”,告诉它自己加倍:
n.double();
这样做的好处叫做多态性。当您决定要能够将“bob”之类的字符串加倍时会发生什么。在程序世界中,您必须提供更多代码来进行加倍,但您还必须以不同的方式调用该代码。
使用 OO,您可以创建一个字符串对象,该对象也可以接收“双重”消息。将字符串加倍的代码属于字符串对象,因此它知道它必须与数字对象不同。如果它决定 "bob" * 2 是 "bobbob",那么代码将类似于:
class number: class string:
int n char array s
procedure double: procedure double:
n = n * 2 s = string_join(s,s)
然后,无论 x 是什么实际类型(数字或字符串),您都可以调用 x.double(),它会知道要运行哪个代码 - 这大大简化了您的代码。您可以在显示器上加倍整数、字符串、矩阵、复数、实数、窗口大小以及各种不同的东西。
你是对的,可以让 C 库看起来有点像对象。经典的例子是stdio.h - 你从不关心FILE* 实际指向的什么,只是它会以某种方式运行的事实。 FILE*、fopen()、fclose() 和其他函数是代表 C 的 I/O 能力的一类。