软件构造 | Abstract Data Type (ADT)

软件构造 | Abstract Data Type (ADT)

​ 抽象数据类型与表示独立性:如何设计良好的抽象数据结构,通过封 装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在 的bug——在clientimplementer之间建立“防火墙”

ADT的特性:不变量、表示泄漏、抽象函数AF、表示不变量RI

在这里插入图片描述

Classifying Types and Operations

Creators:构造器(从无到有) Producers:生产器(从有到新) Observers:观察器

Mutators:变值器,改变对象属性的方法

在面向对象编程中,常见的设计原则之一是将类的方法分为不同的类型,以便更好地组织和理解类的功能。以下是针对Java中的不同类型方法的详细解释:

  1. 构造器 (Creators):
    构造器是用于创建新对象并初始化其状态的特殊类型的方法。在Java中,构造器的主要作用是初始化类的新实例。构造器的特点是它们的方法名与类名相同,并且没有返回类型。当我们使用关键字 new 来实例化一个类的对象时,实际上是在调用该类的构造器。

示例:

public class Person {private String name;// 构造器public Person(String name) {this.name = name;}// 其他方法// ...public static void main(String[] args) {Person person1 = new Person("Alice"); // 调用构造器创建一个名为 Alice 的 Person 对象}
}
  1. 生产器 (Producers):
    生产器是一种类型的方法,用于基于现有对象生成新的对象。生产器方法通常不会改变原始对象的状态,而是返回一个新对象,继承或衍生自原始对象。生产器方法可以帮助我们避免更改原始对象的状态或进行不必要的对象复制。

示例:

public class Circle {private double radius;// 生产器方法,返回一个新的 Circle 对象,半径为当前对象的两倍public Circle createScaledCircle() {return new Circle(this.radius * 2);}
}
  1. 观察器 (Observers):
    观察器是一种类型的方法,用于查看对象的状态或属性,而不修改它们。观察器方法通常返回对象的状态或属性信息,而不会对对象进行任何更改。这有助于遵循对象的封装性原则,使对象的内部状态受到保护,并通过公共方法提供对状态的访问。

示例:

public class Rectangle {private double width;private double height;// 观察器方法,返回矩形的面积public double getArea() {return this.width * this.height;}
}
  1. 变值器 (Mutators):
    变值器是一种方法类型,用于改变对象的状态或属性值。变值器方法会修改对象所代表的数据,这可能会改变对象的内部状态。当我们需要更改对象的属性或状态时,可以使用变值器方法。

示例:

public class Car {private String color;// 变值器方法,用于设置汽车的颜色public void setColor(String color) {this.color = color;}
}

以上是对Java中不同类型方法的详细解释,包括构造器、生产器、观察器和变值器。这些方法类型可以帮助我们更好地组织和理解类的功能,同时遵循良好的面向对象设计原则。

Designing an Abstract Type:

  • 设计简洁、一致的操作
  • 要足以支持client对数据所做的所有操作需要,且 用操作满足client需要的难度要低
  • 要么抽象、要么具体,不要混合 — 要么针对抽象 设计,要么针对具体应用的设计

Representation Independence(表示独立性)

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

Example: Different Representations for Strings

在这里插入图片描述

The corresponding implementation for MyString

在这里插入图片描述

An example of the client

在这里插入图片描述

Another representation for better performance

在这里插入图片描述

在这里插入图片描述

Invariants of an ADT

总是要假设client 有“恶意”破坏ADT不变量的 行为—defensive programming

表示泄露的例子:

在这里插入图片描述

在这里插入图片描述

To make it immutable…+private.

在这里插入图片描述

Rep Invariant and Abstraction Function

  1. R: the space of representation values (rep value):表示值构成的空间,实现者看到和使用的值。
  2. A: the space of abstract values:抽象值构成的空间:client看到和使用的值。
  3. ADT开发者关注表示空间R,client关注抽象空间A。 ADT的内部表示(私有属性)对外部都应严格不可见。故在代码中以注释的形式写出AF和RI而不 能在Javadoc文档中,防止被外部看到而破坏表示独立性/信息隐藏

在这里插入图片描述

A F ( A b s t r a c t i o n f u n c t i o n ) : R → A AF(Abstraction \ function): R → A AF(Abstraction function)RA

An abstraction function that maps rep values to the abstract values they represent

抽象函数:R和A之间映射关系的函数,即如何将R中 的每一个值解释为A中的每一个值。

AF: 满射、非单射、 未必双射(R中的部分值并非合法的, 在A中无映射值)

R I ( R e p i n v a r i a n t ) : R → b o o l e a n RI(Rep \ invariant) : R→boolean RI(Rep invariant):Rboolean

A rep invariant that maps rep values to booleans

RI可以看作:所有表示值的一个子集,包含了所有合法的表示值

RI也可看作:一个条件,描述了什么是“合法”的表示值

在这里插入图片描述

设计ADT:(1) 选择R和A;(2) RI — 合法的表示值; (3) 如何解释合法的表示值 —映射AF

在这里插入图片描述

随时检查RI是否满足:在所有可能改变rep的方法内都要检查

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发Ability Kit(程序框架服务):【FA模型切换Stage模型指导】 配置文件差异

配置文件的差异 FA模型应用在[config.json文件]中描述应用的基本信息,一个应用工程中可以创建多个Module,每个Module中都有一份config.json文件。config.json由app、deviceConfig和module三部分组成,app标签用于配置应用级别的属性&#xff…

裸机与操做系统区别(RTOS)

声明:该系列笔记是参考韦东山老师的视频,链接放在最后!!! rtos:这种系统只实现了内核功能,比较简单,在嵌入式开发中,某些情况下我们只需要多任务,而不需要文件…

前端项目结构介绍与Vue-cli(脚手架)环境搭建

传统的前端项目结构 一个项目中有许多html文件 每一个html文件都是相互独立的 如果需要在页面中导入一些外部依赖的组件(vue.js,elementUI),就需要在每一个html文件中引用都导入,十分的麻烦 而且这些外部组件都需要在其官网中自行下载,也增加了导入的繁琐程度 当今的前端项…

PMBOK® 第六版 实施整体变更控制

目录 读后感—PMBOK第六版 目录 对于变化的态度,个人引用两句加以阐释,即“流水不腐,户枢不蠹”与“不以规矩,不能成方圆”。这看似相互矛盾,实则仿若两条腿总是一前一后地行进。有一个典型的例子,“自由美…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以提供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR(Pedestrian Dead Reckoning,即行人航位推算)背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下,对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

Python代码打包成exe应用

目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 (1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 (2)我们要先安装Pyinstalle…

AI智能体 | 扣子Coze 工作流中如何嵌入代码,看这一篇就够了

Coze的工作流中除了能嵌入大模型,插件,图像流,其他工作流外,还能嵌入代码。嵌入代码的好处是对一些复杂的返回结果进行二次处理。 Coze的代码支持js和python两种语言。这次用python来做演示介绍 在节点中选择代码 弹出对话框如下…

python-docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

CCS的安装步骤

CCS的安装步骤 安装之前有几件重要的事情要做&#xff1a; 首先肯定是要下载安装包啦&#xff01;点击此处是跳到官网下载地址安装包不能处的路径中不能包含中文关闭病毒防护和防火墙&#xff0c;以及其他杀毒软件最后是在重启后进行安装 主要的步骤如下&#xff1a; 找到安…

电脑高手推荐:三款超实用软件,让你的电脑如虎添翼!

7Zip 7-Zip是一款免费且开源的文件压缩工具&#xff0c;支持多种文件格式&#xff0c;包括其自带的7z格式、ZIP、GZIP、BZIP2和TAR等。该软件由Igor Pavlov于1999年开发&#xff0c;具有高压缩比的特点。7-Zip不仅可以在Windows操作系统上使用&#xff0c;还可以在Unix-like的操…

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账&#xff0c;A 给 B 转账 100 块钱&…

高效修复机床导轨磨损,保障加工精度!

机床导轨是支承和引导运动构件沿着一定轨迹运动的传动装置&#xff0c;在机器设备中是个十分重要的部件&#xff0c;在机床中是常见的部件。机床的加工精度与导轨精度有直接的联系&#xff0c;且导轨一旦损坏&#xff0c;维修较复杂且困难。我们简单总结了以下几点对于机床导轨…

【会议征稿,IEEE出版】第三届机器人、人工智能与智能控制国际会议(RAIIC 2024,7月5-7)

第三届机器人、人工智能与智能控制国际会议&#xff08;RAIIC 2024&#xff09;将于2024年7月5-7日中国绵阳举行。 RAIIC 2024是汇聚业界和学术界的顶级论坛&#xff0c;会议将邀请国内外著名专家就以传播机器人、人工智能与智能控制领域的技术进步、研究成果和应用做专题报告…

网站推广如何做?这七个方法要知道

在出海独立站商家中&#xff0c;推广是必不可少的环节。在你完成网站的搭建&#xff0c;产品的上架&#xff0c;以及网站的运营和优化后&#xff0c;你就可以开始着手推广你的网站了。你的网站是承载你的品牌和产品的主要平台&#xff0c;因此&#xff0c;你需要根据你的品牌和…

OZON跨境卖家爆款产品有哪些

OZON跨境卖家爆款产品有哪些&#xff1f;国内的Ozon跨境卖家做这几个品&#xff0c;不爆都难&#xff01; Top1 太阳镜 Очки солнцезащитные 商品id&#xff1a;1556874194 月销量&#xff1a;1095 OZON跨境卖家爆款产品工具&#xff1a;D。DDqbt。COm/…

2024三掌柜赠书活动第二十五期:Rust 游戏开发实战

目录 目录 前言 Rust语言概念 关于《Rust 游戏开发实战》 Rust系统编程的核心点 Rust开发的关键技术和工具 内容简介 作者简介 书中前言/序言 内容介绍 《Rust 游戏开发实战》全书速览 图书目录 结束语 前言 技术圈最近的编程语言新秀当属Rust莫属&#xff0c;Rus…

Ubuntu下包管理命令dpkg安装deb软件包的示例与汇总

一、选定待安装的deb软件包&#xff1a; 二、dpkg安装chrome浏览器的示例&#xff1a; 三、汇总dpkg包管理命令格式&#xff1a;

高三学生的倒计时 给高考一个倒计时 让学习更有计划的进行

高三学生的压力是很大的&#xff0c;时间也是很紧迫&#xff0c;仅仅一年的时间&#xff0c;许多人都觉得不够用&#xff0c;为了让学子们更有时间紧迫感&#xff0c;更清晰的掌握时间&#xff0c;我们需要一个准确提醒的倒计时效果。 把这个倒计时放到班级电脑上&#xff0c;是…

【人工智能】—基于线性回归和多项式回归模型预测人均收入的研究

引言 随着人工智能技术的飞速发展&#xff0c;机器学习已成为数据分析和预测领域的重要工具。在众多机器学习算法中&#xff0c;线性回归和多项式回归因其模型简单、易于理解和实现而受到广泛应用。本文旨在探讨如何利用这两种回归模型对人均收入进行预测。线性回归模型以其简…

探索顺序结构:栈的实现方式

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;渐入佳境之数据结构与算法 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​​ 一、栈的定义 栈&#xff08;Stack&#xf…