软件构造 | 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:这种系统只实现了内核功能,比较简单,在嵌入式开发中,某些情况下我们只需要多任务,而不需要文件…

网络构建和设计方法_2.网络技术遴选

网络遴选工作是通信系统设计中关键的一项工作,根据计划实施的网络建设要求,遴选工作通常分为局域网、广域网和路由协议的选择。 1.局域网技术遴选 1)生成树协议(Spanning Tree Protocol,STP) 在局域网构建…

前端项目结构介绍与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…

更正:VMWARE出现错误关闭Hyper-V会导致Docker Desktop报错

之前使用VMWARE时出现错误,当时在服务处将《HV主机服务》关闭,并使用命令 bcdedit /set hypervisorlaunchtype off 造成Docker Desktop无法使用 解决方法: 运行bcdedit /set hypervisorlaunchtype auto 注意这里最后不是on也不是start 重启…

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、页面边距的两…

conda安装管理配置

原文链接&#xff1a;conda管理配置 导言 安装卸载 卸载 卸载 docker sudo rm -r /opt/anaconda3 #conda安装位置安装 从镜像archive中下载sh脚本安装 bash ./software/Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /opt/anaconda3 #conda安装位置管理 查看 conda --ver…

Docker Compose:简化多容器管理的利器

在现代的应用开发和部署过程中&#xff0c;Docker已经成为不可或缺的工具。它通过容器化技术&#xff0c;使得应用的部署变得更加轻松和高效。然而&#xff0c;当我们需要管理和运行多个容器时&#xff0c;单纯依赖Docker命令行工具可能会显得繁琐且复杂。这时&#xff0c;Dock…

js中定义类的方式:

在JavaScript中&#xff0c;有几种定义类的方式&#xff0c;但最常用的是使用ES6引入的class关键字。以下是使用class定义类的一个简单示例&#xff1a; class Person {// 构造函数&#xff0c;用于初始化对象的属性constructor(name, age) {this.name name;this.age age;}/…

CCS的安装步骤

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

数据库系统概论-第10章数据库恢复技术

10.1事务的基本概念 ①事务&#xff1a;用户宝义的一个数据库操作序列&#xff0c;是一个不可分割的工作单位。一个程序中包含多个事务。 事务通常是以BEGIN TRANSACTION开始&#xff0c;以COMMIT或ROLLBACK结束。COMMIT表示提交。ROLLBACK表示回滚&#xff0c;即在事务运行过…

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

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;维修较复杂且困难。我们简单总结了以下几点对于机床导轨…

2741. 特别的排列

Powered by:NEFU AB-IN Link 文章目录 2741. 特别的排列题意思路代码 2741. 特别的排列 题意 给你一个下标从 0 开始的整数数组 nums &#xff0c;它包含 n 个 互不相同 的正整数。如果 nums 的一个排列满足以下条件&#xff0c;我们称它是一个特别的排列&#xff1a; 对于…

计组--控制器--复习专用

文章目录 前言一、控制器概述CPU的基本功能 二、控制器的功能和组成1.功能2.组成3.时序系统及其控制4.单周期、多周期、流水线1.单周期2.多周期3.流水线 三、微程序控制器1.基本概念2.微指令格式 总结 前言 学无止境&#xff0c;笔勤不辍。今天笔者简单介绍一下有关控制器的知…