RI
RI是指表示不变量,其实就是指类中的属性必须满足的一些条件。
eg1:
构建一个Person类的时候,我们不希望一个人名字为null,或者他的年龄为负数,所以我们可以像下图一样书写RI:
eg2:
Lab2中Edge类的实现(有向图的一条有向边),在spec中要求了每条边的起点和终点必须是非空的,并且这条边权重不能为负数。所以书写RI如下:
AF
AF:抽象函数,类似于一个映射。
如下图:
集合A为抽象空间,集合R为表示空间。
集合A是抽象值构成的空间:即client看到和使用的值。
集合R是表示值构成的空间:即实现者看到和使用的值。
用户(client)只关注抽象空间A,而ADT的实现者需要关注两个空间。(用户只用知道怎么用即可,具体内部怎么实现不需要关心。而ADT实现者必须对两个空间有清晰的把握)
如上图所示,这就是 “构造的程序的 ADT内部的量” ——> “客户想要操作的量” 这样一个映射。
AF一定是满射,不一定是单射,因此不一定是双射。
也就是R中的对象不一定能找到A,但是A中的抽象必须有R中对应的对象。(类比:客户要求的功能你必须要实现,但是你另外多写了什么没有关系)
eg1:
此ADT是要表示一条推文。