JR的软件构造博客(第1篇)

本次博客是关于老师的讲课内容的学习笔记!因为ADT设计的后半部分比较重要所以需要记录一下。

属性的设置->数据结构课会涉及

涉及到r空间与a空间

R空间>对用户不可见

A空间>用户看到的

哪一个s属性的值是满足这个RI的

从小到大,允许出现重复字符

左上角,一看前四个就可以,后边的就8行

左下那个字符串对应的结果和tv是一样的

设计时尽量避免两个r’空间对应同一个a空间值,后面会涉及。要是非单射还要设置自己的一套规则

设计自己的ADT按照的顺序

先确定属性类(选择具体的数据类型,结构)

相同的AF可对应不同RI,同理RI可对应不同AF。

需要把AF和RI的选择详细记录在代码注释中(方便记忆代码)

把它们记下来。程序员自己用的。客户不可见

Q:哪些程序员能看到,哪些用户能看到?

所有这些程序员都可以看到。与属性沾边的,方法实现都是不可见的。

用户可以看到A空间的值。可以看到方法声明,看不到方法实现。

用户可见的包括前两项,中两项的声明和规约。

哪一个是合理的RI?

把RI理解为一条判定规则

只要有一句话是与属性相关的判定,那就是一条RI;第三条肯定不是一个判定了。

第一二句,第五句->

这些AF和RI哪些能够支持这个方法

Q:哪个方法违背

方法不能违反RI。

增加一个字符的操作->所有跟排序相关的全部违反

也只有最后一个能够支持。隐含了一个字符串长度大于0的要求

(4)

2.删掉一个字符,跟顺序相关的就不会出问题

字符串长度限制为偶数的就出问题了

对长度有要求的不支持。

(1)(3)

给一个字符,看集合里是否存在于集合里面

只有通过区间形式描述集合的支持、通过集合判断字符是否在区间里

设计有理数类

把af设计为分子/分母

并且设置一些限制,分母大于0这些,为了简洁设置一定是约分后的形式(可以砍掉,但是删除可能造成,分子分母其实不一样,但用户看到的值一样,不满足单射)后面还有例子

右边是具体实现。多了检测是否满足ri的检测

Check尽快地检测程序的错误,把错误尽早暴露

对应刚才的设计,满足满射和单射;但由于ri包含更多不需解释的值,不为双射(考试会出分析题)

不经过检测,在调用方法的时候才会报错。上图为checkrep具体使用方法

四类方法,前三类都需要对属性值进行更改,observer可以不用,它不进行更改,但是为了安全还是建议加一个

有的必须要加有的可以不加

对于check和afri设计的一些具体例子

9.有益的改变

Mutable多给了一个方法可以改属性值

给两个对象判断是否相等,肯定是判断a空间的值,站在用户的角度看。

Immutable可以允许的改变->改变了属性值,但在用户看来的结果是不变的

允许包含一种方法在r空间内改变对象的属性值,并不是说属性值绝对不允许改变。

A空间里是A,对应R空间里有a1,a2…只要在a空间不变,在r空间可以随便改。考试比较喜欢考这些极端情况。

Af和ri设计影响具体方法的实现。他俩简单会导致方法复杂

有益的改变->immutable的ADT内部表示的R空间中的取值则可以是变化的。

10.如何记录AF和RI,以及防止表示暴露(封闭性)

一些方法,下面是具体例子

表示暴露的安全性

用private和final进行限制,这两个值改不了了

只能看到不能改->immutable类型

Return的时候不返回mutable类型,通过函数改成immutable进行返回

考试:分析代码是否存在表示暴露,要求分析,找到错误,或修改代码

(但是100%会考)

出现了map和set,所有修改操作都可能出现问题

修改形式1.右上作defensive copy

形式2,返回immutable类型的set

经验总结:规约应该说什么

规约->给用户看的接口文件

用户看到的只能用A空间的特征(“值”)去描述,看不到R空间的属性

规约不只包含注释,还包含方法声明,也就是代码部分。

不能绕过类来更改类的属性,属性的引用表示mutable类型的引用(immutable的只能看不能改的)这种引用不能直接提供给用户。

对于独立性的探测,问一个adt是否合理,就从这三个标准来看

  • 直角三角形的判断

检测它对属性值有没有改变操作

这里面没有对任何属性进行直接改变,都是创建新的值然后返回。这个就很棒。

考试就给一个类让你分析,是否符合

11. ADT不变量替换preconditions

在方法中增加用户输入检查

或者用户输入,程序负责修改,改成排完序的集合

把用户承担职责变小

这个是一个改变形式。

把限制放在程序里->创建新的类,把限制都放在类的RI里面

Usename的限制,创建一个类,把限制放进RI,程序负责对要求进行检测

Precondition是用户需要满足的要求,用程序进行检测,用户可以随意输入

这个过程就是一个ADT不变量替换负责Precondition过程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值