14-对实现的说明
11.5.3 对实现的说明
前几节介绍的实现在Vector对象中存储了矢量的直角坐标和极坐标,但公有接口并不依赖于这一事实。所有接口都只要求能够显示这两种表示,并可以返回各个值。内部实现方式可以完全不同。正如前面指出的,对象可以只存储x和y分量,而返回矢量长度的magval()方法可以根据x和y的值来计算出长度,而不是查找对象中存储的这个值。这种方法改变了实现,但用户接口不变。将接口与实现分离是OOP的目标之一,这样允许对实现进行调整,而无需修改使用这个类的程序中的代码。
这两种实现各有利弊。存储数据意味着对象将占据更多的内存,每次Vector对象被修改时,都需要更新直角坐标和极坐标表示;但查找数据的速度比较快。如果应用程序经常需要访问矢量的这两种表示,则这个例子采用的实现比较合适;如果只是偶尔需要使用极坐标,则另一种实现更好。可以在一个程序中使用一种实现,而在另一个程序中使用另一种实现,但它们的用户接口相同。