软件构造 第三章第三节 抽象数据型(ADT)
软件构造 第三章第三节 抽象数据型(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)相关推荐
- 【软件构造】第三章第三节 抽象数据型(ADT)
第三章第三节 抽象数据型(ADT) 3-1节研究了"数据类型"及其特性 ; 3-2节研究了方法和操作的"规约"及其特性:在本节中,我们将数据和操作复合起来,构成 ...
- 软件构造 第五章第三节 可复用的设计模式
第五章第三节 可复用的设计模式 Structural patterns 1.适配器模式(Adapter) 问题描述:其中LegacyRectangle是已有的类(需要传入矩形的一个顶点.长和宽),但是 ...
- 哈工大软件构造第三章总结
本章主要介绍了软件开发的生命周期和软件配置的相关知识,更偏向于开发方式与开发工具的介绍章节. (一)软件生命周期 从无到有,软件的生命周期如图所示 (二)传统软件开发模型 基本的为线性过程和迭代过程, ...
- HIT软件构造第五章第三节知识点总结
文章目录 三.面向可维护性的构造技术 1.基于状态的编程 A.基于自动机的编程 B.状态模式 C.备忘录模式 2.语法驱动的构造 (1).语法组成 (2).正则语法与正则表达式 (3).java中正则 ...
- 软件构造第三章 第五部分
ADT和OOP中的等价性 equal和== hashcode()和equals()方法总是一起被重写 "==":引用等价性,指向相同的内存地址, equals():对象等价性,在自 ...
- Mysql系列课程--第三章 建表 插数据
数据库模型图 /班级表/ CREATE TABLE `class` (`c_no` int(11) NOT NULL AUTO_INCREMENT,`c_name` varchar(45) NOT N ...
- 【软件构造】第二章 软件构建的过程和工具(2)
二.软件构造的编程.系统.工具 [广义软件构造的过程] 1. 编程 (1)开发语言:Java.C.C++.Python等 ·IDE:集成开发环境 - 方便编写代码和管理文件 - 能够编译.构建 - 结 ...
- 【软件构造】第一章 软件构造基础(1)
一.软件构建多维视图 1. 什么是软件 (1)构成 ·程序Program:UI, Algorithms, Utilities, APIs, test cases, etc ·数据Data:files, ...
- 软件项目管理第三章笔记---项目范围管理
以下图片及内容整理自西安交通大学软件学院宋永红老师的ppt(课堂回放)中,仅供学习使用,请勿转载或他用 笔记汇总:软件项目管理笔记汇总_Qlz的博客-CSDN博客 第三章 项目范围管理 项目范围与项目 ...
- 软件构造 第五章第一节 可复用性的度量、形态和外部观察
第五章第一节 可复用性的度量.形态和外部观察 面向复用编程(programming for reuse):开发出可复用的软件 基于复用编程(programming with reuse):利用已有的 ...
最新文章
- tf.concat()详解
- python使用base64编码解码数据
- thymeleaf文档_springboot中Thymeleaf和Freemarker模板引擎的区别
- Redis-10Redis的事务回滚
- WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载
- leetcode 面试题 17.21. 直方图的水量(单调栈)
- mitmproxy抓包 | Python双篡改假请求实战(六)
- UnityShader20:CommandBuffer初见(上)
- jTip定制实现博客日历
- PHP二维数组:统计某个键名的相同键值个数
- 幅频响应 matlab画法,MATLAB环境下频率响应曲线的绘制方法.pdf
- python手册中文版-python学习手册下载|
- 单片机74LS138应用
- [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询
- 密码学编程基础——换位加密
- 【Linux】gcc/g++的使用详解静动态库
- 机器学习之决策树实践:隐形眼镜类型预测
- IDEA Eval Reset 使用方法
- kubernetespod控制器详解上
- 做生产智能供料系统公司排名
热门文章
- 境外WiFi市场持续升温2016年或迎普及元年
- 避免在ASP.NET Core中使用服务定位器模式
- Unity Using Interception and Policy Injection
- CCSpriteBatchNode(附:CCMenu与CCSpriteBatchNode的问题)
- STM32CubeMX使用(五)之IIC及数字加速度计LIS2DW12使用
- 结构体学习笔记6——结构体嵌套
- 数据库新手常犯的5个错误
- 设计模式之责任链模式(Chain of Responsibility )
- mysql命令语句来去除掉字段中空格字符的方法
- Android 微信分享信息