抽象
来源:互联网 发布:免费局域网通讯软件 编辑:程序博客网 时间:2024/04/29 04:41
为什么一个经过详细考虑并记录下来的抽象某型对于程序设计说很重要:
它有助于帮助其他人来理解如何使用你所涉及的类
抽象模型是你与你的用户之间的一个协议
在记录抽象模型的过程中,我们常常可以发现设计中的重要缺陷
清晰的抽象模型文档有助于其他人重新构造出你的类的新版本
一旦理解了抽象模型,我们就可以避免“以实现来驱动设计”的情况出现
有关电话号码的抽象模型:
我们应该怎么开始我们的第一步??一个不错的方法就是:用一句话来描述该对象是用来干什么的。这种描述方式应该尽可能的抽象,尽量不要涉及到对象的内部结构。
例如:“电话号码包括3位地区号码,后面紧接着3位交换机号码,最后是4位数字”。
修改就要稍微好一些:“一个电话号码指定了世界上的某一部特定电话”。
由于一个电话号码并不代表唯一一部电话,所以用“指定”不巧当。
为什么不应该出现在抽象模型中?
没有出现在模型中的东西和存在于模型中的一样重要。
抽象模型间的关系
一对一、一对多,多对一,还是多对多?
如何来保证关系会随着时间的改变而改变?
is-A,Has-A,还是Use-A?
is-a关系:其中一个类所描述的对象属于另外一个类所描述的对象集
has-a关系:在概念上事物A包含事物B,那么A也就拥有B。
use-a关系:没有一个对象会是另外一种对象,也没有一个对象包含另外一个对象,取而代之
的是,这两个对象仅在程序中某些点进行简单的联系。
关系式单向还是双向?
两个对象中是否有着多重同样的关系?
关系是否是必须得?
小结:
设计抽象模型和设计实现细节应该是两个独立且相关的行为
没有出现在抽象模型中的东西和出现在其中的东西一样重要
如果存在疑问,先不要考虑他。添加新功能通常都不会有兼容问题,,但是
去除一个已有的功能则可能会导致代码失效。
彻底地检测和记录下设计中的关键点。
设计是一个迭代的过程。
请考虑边界条件。
再设计的初始阶段使用crc卡片。