软件构造心得2

软件构造课程心得

继续我们的总结:

第四章

1.

2.静态类型语言:在编译阶段进行类型检查并发现错误,避免将错误代入运行阶段,提高了代码的正确/健壮性。  动态类型语言:在运行阶段进行类型检查。

3.检测bug:静态类型检查>>动态>>无检查。

4.静态检查无法检查出与变量值有关的错误。可以检查出:语法错误,类名/函数名错误,参数数目错误,参数类型错误,返回值类型错误。

动态检查能检查出:非法的参数值,非法的返回值,越界,空指针。

5.final类无法派生子类。Final变量无法改变值/引用。Final方法无法被子类重写。

6. 不变对象:一旦被创建,始终指向同一个值/引用。可变对象:拥有方法可以修改自己的值/引用

7.snapshot。双圈地址里的内容不可变。

不可变的引用:用双线箭头。

8.不可变类型,在修改时会频繁发生拷贝。但是可变类型可以很好的解决这个问题。例子如下:

9. 可变还是不可变:(1)看方法是否改变参数(2)看return是否是mutable类型(3)保证所有属性都是private,尽量加final

引用不可变但是指向的值是可变的,例子:

10.Arrays和list在迭代时被修改,就会抛出异常。

11.建议用iterator自带的remove方法。如果用list.remove删除元素,那么会和iterator发生不匹配的情况。

这次内容不多,后续会进行补充。

---------------------------------------------------------------------------------------------------------------------------------

补充来了

第五章

1.参数类型是否匹配,在静态类型检查阶段完成。返回值类型是否匹配,也在静态类型检查阶段完成。

2.精确的规约有助于划分责任,规约可以扮演防火墙的角色。只讲能做什么,不讲怎么实现。

3.通过规约判断方法的等价性。

4. 静态类型声明是一种规约,可据此进行静态类型检查static checking。

5.规约的分类:确定性 ,陈述性,强度(必考)。

6. spec变强:更放松的前置条件+更严格的后置条件。一旦规约1比规约2强,那么可以用规约1替换规约2。例子:

7.

第六章

1.抽象数据型由操作定义,与内部实现无关。

2.可变与不可变数据类型。可变可变类型的对象:提供了可改变其内部数据的值的操作。不变数据类型: 其操作不改变内部值,而是构造新的对象。

3. 必考

AF:映射

RI:属性在任何时间都要满足的限制条件

4. 构造器:可能实现为构造函数或静态函数。构造器被实现为静态函数,通常被称为工厂方法。工厂方法用于创建对象,属于静态方法;实例方法在创建对象后才能调用函数并且工作。

生产器:新产生的数据与旧的数据类型一致。

      观察器:数据类型不一致。

      变值器:改变函数内部对象属性的方法。变值器通常返回void则必然意

味着它改变了对象的某些内部状态。也可能返回非空类型。

5. 内部属性与实现变化,但用户操作未变。表示独立性:不暴露内部属性与实现方法

6. .size()限制了内部的属性,破坏了RI Representation Independence(表示独立性),People不能换成Set或其他了。

7.Invarient(保持不变性)类的属性从public改为private。Return 和Set不能直接返回数组名称。

8. 抽象值构成的空间:client看到和使用的值

9.表示空间R与抽象空间A的映射关系。满射,未必单射,未必双射。

10.RI与AF的书写:

11.RI是一种要求,选出合法的子集,AF像是描述,描述在client层面代表了什么。Rational Number有理数。

12.设计ADT方法:(1) 选择R和A;(2) RI --- 合法的表示值;(3) 如何解释合法的表示值 ---映射AF

13.三个必考问题:问题1:

问题2:

问题3:

14.在所有可能改变rep的方法内都应该调用CheckRep来检查,如:

15.选择题:有益的可变性。只改变R值,不改变A值,因为AF是多对一的函数,所以只是把一个指向A的改成了另一个指向A的。

immutable类型的类也可以被改变,只是用户看不到

16. Safety from Rep Exposure。

Final 决定了指向不变,但被指向的内存内容可能发现变化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值