在面向对象的编程中,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和实验手册实在是读的吃力,老师上课的语速也实在有点跟不上,希望老师可以削微削微讲的慢一点,方便大家课堂上更好的掌握。

软件构造学习笔记ATD相关推荐

  1. 软件构造学习笔记-第八周

    本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...

  2. 软件构造学习笔记(九)面向复用的软件构造技术

    目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...

  3. 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction

    先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...

  4. 软件构造学习笔记-第九周、第十周

    因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...

  5. 哈工大2022春软件构造学习笔记1

    课程概述 第一部分:软件构造基础 第二部分:ADT+OOP 第三部分:面向可复用性和可维护性的软件构造 第四部分:面向健壮性与正确性的软件构造 第一章 软件构造的多维度视图和质量目标 软件构造的多维度 ...

  6. 软件构造学习笔记(六)抽象数据类型

    目录链接 Part I Abstraction and User-Defined Types Part II Classifying Types and Operations Part III Abs ...

  7. 软件构造学习笔记-实验3

    本次实验要求从五项要求(航班管理.高铁车次管理.操作系统进程管理.大学课表管理.学习日程管理)里完成三项要求,并且尽量实现复用. 面向可复用性和可维护性的设计:PlanningEntry 1.首先设计 ...

  8. 软件构造学习笔记-实验2

    P1 1.设计目标 首先对图的ADT进行两种实现(从边和顶点出发),然后选择一种实现的ADT,根据输入的文件构建语料库,再利用构建的语料库,对输入字符串进行插入操作,并返回修改后的字符串. 2.有关A ...

  9. 软件构造学习笔记-第三周

    本周介绍了软件开发的几种模型,并重点介绍了Git.Git是分布式版本控制系统,可以通过SSH key建立远程与本地的连接,通过Git Bash中的命令进行文件的上传和下载.对于这门课程,Git的主要作 ...

最新文章

  1. Cadence 16.3 使用步骤
  2. JavaScript变量——栈内存or堆内存
  3. 中科大微型计算机原理,中科大微机原理试题.pdf
  4. numba.jit警告:warnings.warn(errors.NumbaDeprecationWarning(msg, state.func_ir.loc))
  5. 【MAVEN】如何在Eclipse中创建MAVEN项目
  6. php %3f,PHP
  7. sap gateway data provider - /IWFND/IF_MGW_CORE_RUNTIME
  8. 04.卷积神经网络 W3.目标检测(作业:自动驾驶 - 汽车检测)
  9. 【12】Python函数学习(中)
  10. C语言动态链表数据结构实现的学生信息项目
  11. 位图保存到数据库 VC ado 类
  12. java计算机毕业设计南京新东方学校家校通系统源码+系统+数据库+lw文档+mybatis+运行部署
  13. 《人类简史》读书笔记
  14. 伍迷随想冷饭集 之 北国冬天之随想
  15. 英文论文中的accuracy与precision的区别
  16. 跟小老虎博客并驾齐驱的博客虎兄虎弟dbzhang800
  17. 【数据库原理及应用教程(第4版|微课版)陈志泊】【第三章习题】
  18. 新编c语言程序设计实验钱雪忠答案,新编c语言程序设计教程机械工业出版社钱雪忠吕莹楠...
  19. 选型帮推荐:上海音锋机器人【托盘四向车】
  20. android绘制实心圆、空心圆

热门文章

  1. 极简使用︱Gensim-FastText 词向量训练以及OOV(out-of-word)问题有效解决
  2. 产品优化不再盲目!一次MMO手游性能诊断全纪录
  3. 56网首发2012APEC青创会主题微电影
  4. mysql导入.dmf文件_AX2012 DMF数据导入的问题
  5. Android平台抓包工具TCPDump
  6. Incorrect string value: ‘\xE9\xBB\x84\xE8\x93\x89‘ for column ‘name‘ at row 1 MySQL 5.7解决方案
  7. ARTS Week 32
  8. ICCV 2019视频目标跟踪算法Pipeline集合
  9. Resource not found问题
  10. 视觉3D感知(二):单目3D物体检测