软件构造学习笔记ATD

在面向对象的编程中,ADT的编写十分重要,与传统的c语言不同,面向对象的编程更加商业化一点,所以保密需要做好,有点商业机密的感觉。如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示,避免潜在的bug尤其重要--在client和implementer之间建立防火墙。

1.ADT的的5个要点:
①Abstraction(抽象):用更简单,更高层次的想法来省略或隐藏低级细节。
②Modularity(模块化)::将系统划分为组件或模块,每个组件或模块可以与系统的其余部分分开设计,实现,测试,推理和重用
③Encapsulation(封装):围绕模块构建墙壁,以便模块只负责其自身的内部行为,并且系统其他部分中的错误不会损害其完整性。
④Information hiding(信息隐藏):从系统的其余部分隐藏模块实现的详细信息,以便稍后可以更改这些详细信息,而无需更改系统的其余部分。
⑤Separation of concerns(关注点分离):模块具有单独的责任,不要将一个责任分散在不同的模块中

2.ADT的4种操作分类
①Creators:产生类型的新对象 ,例如构造器 (constructor ), String.valueOf()方法等
②Producer:在已有对象 基础上产生新的对象 ,如int类型的+,-,*,/操作,String的concat()方法等
③Observers:输入抽象类型的对象,返回其他类型的对象 ,如String的length()方法,List的size(),get()方法等
④Mutators:改变对象,注意immutable类型的对象由于不可改变,是没有Mutoaors类型的操作的,像String,int这些类型都没有mutators类型的操作,而List的add(),remove()方法则是mutators类型的操作。

3.Representation Independence(表示独立)
表示独立意味着这个抽象类型在使用时应该独立于其Representation(即这个类型中的实际数据结构,数据域等),这样一来,我们在使用这个抽象类型时,可以只依赖其中的public方法,而不用依赖其private字段,从而我们可以在不检查和更改所有调用者代码的情况下进行更改。

4. AF(Abstraction function)与RI(Rep invariant)
我们用R表示一个ADT实际实现时部需要用到的值空间,用A表示这个ADT设计出来的需要支持的值空间,这时,AF指的是一个R → A 的抽象函数,举例如下:

AF一定是一个满射(即A中的每个值都需要被映射到),但不一定是单射或双射。
再来看RI,RI是R中所有值到一个Boolean值的映射,即 RI : R → boolean 。如果RI(r)= true,意味着r被映射到了A空间中的某个值,否则这个值没有被映射到A空间。

举个例子:

图中RI指的是一个没有重复字符的String,即所有没有重复字符的String都可以映射到A中的某个值。

5.RI的检查:
采用断言和checkRep(),可以在ADT中用断言实现checkRep()方法,然后在每个方法末位都调用checkRep()方法,这样可以保证不变性。

心得体会:

软件构造这门课光学习老师讲的东西是不够的,很多东西要亲手操作过才明白。ADT的知识与lab2息息相关,写完lab2后便对面向对象的编程有了具体的概念,知道大概的流程。但是全英文的PPT和实验手册实在是读的吃力,老师上课的语速也实在有点跟不上,希望老师可以削微削微讲的慢一点,方便大家课堂上更好的掌握。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值