软件构造 第三章第三节 抽象数据型(ADT)

Creators(构造器):

创建某个类型的新对象,⼀个创建者可能会接受⼀个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。可能实现为构造函数或静态函数。(通常称为工厂方法)

t* ->  T

例子:Integer.valueOf( )

Producers(生产器):

通过接受同类型的对象创建新的对象。

T+ , t* -> T

例子:String.concat( )

Observers(观察器):

获取抽象类型的对象然后返回一个不同类型的对象/值。

T+ , t* -> t

例子:List.size( ) ;

Mutators(变值器):

改变对象属性的方法 ,

变值器通常返回void,若为void,则必然意味着它改变了对象的某些内部状态;当然,也可能返回非空类型

T+ , t* -> t || T || void

例子:List.add( )

Representation Independence

表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。

除非ADT的操作指明了具体的前置条件/后置条件,否则不能改变ADT的内部表示——spec规定了 client和implementer之间的契约。

Invariance和表示泄露(Rep exposure):

-一个好的抽象数据类型的最重要的属性是它保持不变量。一旦一个不变类型的对象被创建,它总是代表一个不变的值。当一个ADT能够确保它内部的不变量恒定不变(不受使用者/外部影响),我们就说这个ADT保护/保留自己的不变量。

-Defensive Copy

抽象函数AF与表示不变量RI

  • 对于RI(表示不变量),仅仅宽泛的说什么区域是合法的并不够,你还应该说明是什么使得它合法/不合法。
  • 对于AF(抽象函数)来说,仅仅宽泛的说抽象域表示了什么并不够。抽象函数的作用是规定合法的表示值会如何被解释到抽象域。作为一个函数,我们应该清晰的知道从一个输入到一个输入是怎么对应的。

做出具体的解释:每个rep value如何映射到abstract value

Safety from Rep Exposure

转载于:https://www.cnblogs.com/masteryellow/p/9214293.html

软件构造 第三章第三节 抽象数据型(ADT)相关推荐

  1. 【软件构造】第三章第三节 抽象数据型(ADT)

    第三章第三节 抽象数据型(ADT) 3-1节研究了"数据类型"及其特性 ; 3-2节研究了方法和操作的"规约"及其特性:在本节中,我们将数据和操作复合起来,构成 ...

  2. 软件构造 第五章第三节 可复用的设计模式

    第五章第三节 可复用的设计模式 Structural patterns 1.适配器模式(Adapter) 问题描述:其中LegacyRectangle是已有的类(需要传入矩形的一个顶点.长和宽),但是 ...

  3. 哈工大软件构造第三章总结

    本章主要介绍了软件开发的生命周期和软件配置的相关知识,更偏向于开发方式与开发工具的介绍章节. (一)软件生命周期 从无到有,软件的生命周期如图所示 (二)传统软件开发模型 基本的为线性过程和迭代过程, ...

  4. HIT软件构造第五章第三节知识点总结

    文章目录 三.面向可维护性的构造技术 1.基于状态的编程 A.基于自动机的编程 B.状态模式 C.备忘录模式 2.语法驱动的构造 (1).语法组成 (2).正则语法与正则表达式 (3).java中正则 ...

  5. 软件构造第三章 第五部分

    ADT和OOP中的等价性 equal和== hashcode()和equals()方法总是一起被重写 "==":引用等价性,指向相同的内存地址, equals():对象等价性,在自 ...

  6. Mysql系列课程--第三章 建表 插数据

    数据库模型图 /班级表/ CREATE TABLE `class` (`c_no` int(11) NOT NULL AUTO_INCREMENT,`c_name` varchar(45) NOT N ...

  7. 【软件构造】第二章 软件构建的过程和工具(2)

    二.软件构造的编程.系统.工具 [广义软件构造的过程] 1. 编程 (1)开发语言:Java.C.C++.Python等 ·IDE:集成开发环境 - 方便编写代码和管理文件 - 能够编译.构建 - 结 ...

  8. 【软件构造】第一章 软件构造基础(1)

    一.软件构建多维视图 1. 什么是软件 (1)构成 ·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc ·数据Data:files, ...

  9. 软件项目管理第三章笔记---项目范围管理

    以下图片及内容整理自西安交通大学软件学院宋永红老师的ppt(课堂回放)中,仅供学习使用,请勿转载或他用 笔记汇总:软件项目管理笔记汇总_Qlz的博客-CSDN博客 第三章 项目范围管理 项目范围与项目 ...

  10. 软件构造 第五章第一节 可复用性的度量、形态和外部观察

    第五章第一节  可复用性的度量.形态和外部观察 面向复用编程(programming for reuse):开发出可复用的软件 基于复用编程(programming with reuse):利用已有的 ...

最新文章

  1. tf.concat()详解
  2. python使用base64编码解码数据
  3. thymeleaf文档_springboot中Thymeleaf和Freemarker模板引擎的区别
  4. Redis-10Redis的事务回滚
  5. WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载
  6. leetcode 面试题 17.21. 直方图的水量(单调栈)
  7. mitmproxy抓包 | Python双篡改假请求实战(六)
  8. UnityShader20:CommandBuffer初见(上)
  9. jTip定制实现博客日历
  10. PHP二维数组:统计某个键名的相同键值个数
  11. 幅频响应 matlab画法,MATLAB环境下频率响应曲线的绘制方法.pdf
  12. python手册中文版-python学习手册下载|
  13. 单片机74LS138应用
  14. [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询
  15. 密码学编程基础——换位加密
  16. 【Linux】gcc/g++的使用详解静动态库
  17. 机器学习之决策树实践:隐形眼镜类型预测
  18. IDEA Eval Reset 使用方法
  19. kubernetespod控制器详解上
  20. 做生产智能供料系统公司排名

热门文章

  1. 境外WiFi市场持续升温2016年或迎普及元年
  2. 避免在ASP.NET Core中使用服务定位器模式
  3. Unity Using Interception and Policy Injection
  4. CCSpriteBatchNode(附:CCMenu与CCSpriteBatchNode的问题)
  5. STM32CubeMX使用(五)之IIC及数字加速度计LIS2DW12使用
  6. 结构体学习笔记6——结构体嵌套
  7. 数据库新手常犯的5个错误
  8. 设计模式之责任链模式(Chain of Responsibility )
  9. mysql命令语句来去除掉字段中空格字符的方法
  10. Android 微信分享信息