从习题和实验的设计流程中回首ADT与OOP

1.分析需求。

        ADT全名为Abstract Data Type ,其设计的核心思想就在于abstract——抽象。如何将实际需求抽象为一个数据类型,这是ADT设计的第一步,也是OOP流程的第一步。

        在这里我们学习过的抽象方法即为“词语提取”。我们知道ADT包括fields和methods。从需求分析中提取出的名词,可作为一个ADT的名字,或一个ADT内部的field,这需要设计者进一步的设计;从需求分析中提取出的动词,可作为ADT的一个method(或function)。

2.遵循原则设计ADTs。

        通过上述的分析,我们大致可以分析我们需要哪些类,然后我们来设计Interface,abstract class, class之间的关系。并结合上一步的分析,我们可以得到ADT diagram,得到一个或多个“继承树”。

3.撰写spec。

        spec是实现者与客户端程序员之间的契约,在撰写spec的过程中,实现者也能对每个方法的功能更深一步的了解:

        3.1.spec的撰写需要我们事先约定好这个方法属于{creator, producer, observer, mutator}中的哪一个,这决定着我们后续的测试的策略,以及实现该方法时的细节设计。

        3.2.撰写spec时还要注意spec的强度,(更弱的前置条件或更强的后置条件会是spec变强)因为某类或接口的spec被还要考虑到其子类的spec。

        3.3.spec的设计、撰写应该是自顶向下的,也就是按照从共性到个性的方向设计。

4.接口。

        在设计ADT diagram时,最顶层的通常都是接口Interface,设计时要注意Interface与class之间的区别:

        4.1interface更像是一个方法的标识,interface内部只有方法的声明,而没有实现;

        4.2在interface中没有fields/constructor(用staitc工厂方法来代替constructor),接口更像是一本方法的使用手册!

        4.3所以,Interface是不可能直接应用的,需要子类来继承接口,并在子类中实现;

        4.4在interface中可以有static和default方法的实现体。

5.编写测试。

        在规定好spec之后,我们便可以依据spec来编写测试策略与测试代码。测试的原则:等价类划分、边界值检查。

6.实现类。

        类与接口不同的是,类需要具体的实现。虽然我们在软件构造的初期不在意实现的细节,但是还是有工程上的约定和限制。由于我们在接口已经写好了spec,所以在类中,我们更关心的是其RI/AF/Rep exposure。

7.重载和重写。

        overwrite发生在继承中。父类中拥有的子类所共有的方法,子类可以重写使其与自己的应用场景适配(在immutable的类中需要重写hashCode和equals);overload应用于多态的情况,可以发生在方法返回类型不同,或参数不同(参数种类不同,参数数量不同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值