软件构造学习笔记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和实验手册实在是读的吃力,老师上课的语速也实在有点跟不上,希望老师可以削微削微讲的慢一点,方便大家课堂上更好的掌握。
软件构造学习笔记ATD相关推荐
- 软件构造学习笔记-第八周
本周重点是Liskov可替换原则.它要求父类和子类的行为一致性,子类要有更强的不变量.更弱的前置条件.更强的后置条件.在该原则的要求下,每个子类都可以对父类进行替换.这在开发过程中会带来极大的便利,在 ...
- 软件构造学习笔记(九)面向复用的软件构造技术
目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...
- 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction
先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...
- 软件构造学习笔记-第九周、第十周
因为本周五开始五一假期,所以只有一节软件构造课.因为内容还属于创建模式.结构模式.行为模式.将该堂课的内容整合到本博客中.本周的重点是程序开发模式,在写代码之前首先充分考虑采用哪种模式更有利于开发.维 ...
- 哈工大2022春软件构造学习笔记1
课程概述 第一部分:软件构造基础 第二部分:ADT+OOP 第三部分:面向可复用性和可维护性的软件构造 第四部分:面向健壮性与正确性的软件构造 第一章 软件构造的多维度视图和质量目标 软件构造的多维度 ...
- 软件构造学习笔记(六)抽象数据类型
目录链接 Part I Abstraction and User-Defined Types Part II Classifying Types and Operations Part III Abs ...
- 软件构造学习笔记-实验3
本次实验要求从五项要求(航班管理.高铁车次管理.操作系统进程管理.大学课表管理.学习日程管理)里完成三项要求,并且尽量实现复用. 面向可复用性和可维护性的设计:PlanningEntry 1.首先设计 ...
- 软件构造学习笔记-实验2
P1 1.设计目标 首先对图的ADT进行两种实现(从边和顶点出发),然后选择一种实现的ADT,根据输入的文件构建语料库,再利用构建的语料库,对输入字符串进行插入操作,并返回修改后的字符串. 2.有关A ...
- 软件构造学习笔记-第三周
本周介绍了软件开发的几种模型,并重点介绍了Git.Git是分布式版本控制系统,可以通过SSH key建立远程与本地的连接,通过Git Bash中的命令进行文件的上传和下载.对于这门课程,Git的主要作 ...
最新文章
- Cadence 16.3 使用步骤
- JavaScript变量——栈内存or堆内存
- 中科大微型计算机原理,中科大微机原理试题.pdf
- numba.jit警告:warnings.warn(errors.NumbaDeprecationWarning(msg, state.func_ir.loc))
- 【MAVEN】如何在Eclipse中创建MAVEN项目
- php %3f,PHP
- sap gateway data provider - /IWFND/IF_MGW_CORE_RUNTIME
- 04.卷积神经网络 W3.目标检测(作业:自动驾驶 - 汽车检测)
- 【12】Python函数学习(中)
- C语言动态链表数据结构实现的学生信息项目
- 位图保存到数据库 VC ado 类
- java计算机毕业设计南京新东方学校家校通系统源码+系统+数据库+lw文档+mybatis+运行部署
- 《人类简史》读书笔记
- 伍迷随想冷饭集 之 北国冬天之随想
- 英文论文中的accuracy与precision的区别
- 跟小老虎博客并驾齐驱的博客虎兄虎弟dbzhang800
- 【数据库原理及应用教程(第4版|微课版)陈志泊】【第三章习题】
- 新编c语言程序设计实验钱雪忠答案,新编c语言程序设计教程机械工业出版社钱雪忠吕莹楠...
- 选型帮推荐:上海音锋机器人【托盘四向车】
- android绘制实心圆、空心圆
热门文章
- 极简使用︱Gensim-FastText 词向量训练以及OOV(out-of-word)问题有效解决
- 产品优化不再盲目!一次MMO手游性能诊断全纪录
- 56网首发2012APEC青创会主题微电影
- mysql导入.dmf文件_AX2012 DMF数据导入的问题
- Android平台抓包工具TCPDump
- Incorrect string value: ‘\xE9\xBB\x84\xE8\x93\x89‘ for column ‘name‘ at row 1 MySQL 5.7解决方案
- ARTS Week 32
- ICCV 2019视频目标跟踪算法Pipeline集合
- Resource not found问题
- 视觉3D感知(二):单目3D物体检测