“不变”属性是抽象定义的一部分吗?

2024-01-06

作为我学习的一部分,我认为我发现的抽象定义的最佳答案(有意义)来自 stackoverflow:

什么是抽象? https://stackoverflow.com/questions/7028242/what-is-abstraction

除此之外,

作为伯克利分校 2006 年秋季在线课程 cs61B 的一部分,我学到了下面类似的 ADT 定义,接近上面的定义,但添加了一个额外的词“不变”。我应该将这个词视为上述定义的推论吗?或者这个词是定义的一部分吗?

_Abstract_Data_Type_ (ADT) 是一个具有定义良好的接口的类,但其实现细节对其他类是严格隐藏的。这样,你 可以更改类的实现,而不会危及依赖于该类的程序。 Date 类是一个 ADT。

ADT 允许您强制执行不变量。

An 不变的是关于数据结构的事实,无论外部类调用什么方法,该事实始终为真(假设代码没有错误)。 例如,Date ADT 强制规定 Date 对象始终表示有效日期。通过仅允许通过方法调用访问某些字段来强制执行不变量。


我最喜欢的抽象定义之一是 Robert C. Martin 在书中的定义敏捷原则、模式和实践 http://amzn.to/19W4JHk:

抽象是消除不相关的内容并放大本质的内容。

根据该定义,抽象可以在许多不同的层面上采取多种形式:

  • 它可以是一个完整的系统
  • 它可以是一个子系统
  • 它可以是消息格式的定义(类似于协议)
  • 它可以是一个函数(如函数式编程)
  • 它可以是一个抽象基类
  • 它可以是一个接口
  • 它可以是一个具体的类
  • etc.

In 面向对象的软件构建 http://amzn.to/1claOin,Bertrand Meyer 将类描述为抽象数据类型。本书的想法是抽象数据类型的描述包括前置条件和后置条件。在埃菲尔(书中使用的语言)中,这些被称为断言,但我们也知道它们是不变量.

迈耶关于面向对象设计的观点包括不变量。在详细的(类/对象/函数)级别上,我同意将不变量视为一种方法是有意义的describe一个抽象。

另一方面,如果您的抽象是高层架构的描述,those某种不变量没有意义。尽管如此,即使在较高的层次上,定义前置条件和后置条件通常也是有价值的(例如“系统 A 必须做出响应才能使系统 B 正常工作”),因此考虑以下不变量确实有意义与抽象的关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“不变”属性是抽象定义的一部分吗? 的相关文章

  • 协变类型 T 发生在不变位置

    我正在 Scala 中迈出第一步 我想让以下代码起作用 trait Gene T val gene Array T 编译器给出的错误是 covariant type T occurs in invariant position in typ
  • 适用于 Databricks、Synapse 和 ADLS gen2 的数据治理解决方案

    我是数据治理的新手 如果问题缺少一些信息 请原谅我 客观的 我们正在 Azure 平台上为中型电信公司从头开始构建数据湖和企业数据仓库 我们使用 ADLS gen2 Databricks 和 Synapse 进行 ETL 处理 数据科学 M
  • 在 n 层系统中,您应该从数据访问层向业务层返回哪些对象

    例如 如果您有一个名为 Person ID Name 等 的数据库表 数据访问层应将什么样的对象返回给业务层 我在想这样的事情 data access tier public class DataAccess public interfac
  • Android应用程序架构——MVVM还是MVC?

    我有一个正在开始处理的 android 项目 我希望它的结构尽可能健壮 我有 WPF MVVM 背景 并且阅读了一些有关 Android 应用程序架构的内容 但我找不到关于我应该使用哪种架构的直接明确的答案 有些人建议使用 MVVM htt
  • Android上如何实现app子组件的模块化结构?

    我的 Android 主应用程序将包含一个主程序 以及一些预安装的模块 然后我想稍后提供不同的模块 最好作为单独的文件 模块如 位置 天气 议程 你将如何实现这一目标 我想将已安装 存在的模块保留在数据库中 因此 有时我必须将模块放入数据库
  • 使用JMS临时队列进行同步使用是一个好习惯吗?

    如果我们使用 临时队列 的 JMS 请求 回复机制 该代码是否可扩展 截至目前 我们不知道是否会支持每秒 100 个请求 或者每秒 1000 个请求 下面的代码是我正在考虑实现的代码 它以 同步 方式使用 JMS 关键部分是创建 消费者 以
  • 使用heroku上传文件

    据我所理解heroku http heroku com不允许存储单个 Rails 应用程序的上传文件 在他们的文档中 他们提到文件可以上传到亚马逊S3 http aws amazon com s3 实例 我目前没有 S3 帐户 因此假设我只
  • JVM 内存类型

    我正在做一个监控项目 我们有监控软件正在运行并从服务器重新收集指标 一切工作正常 但我们需要一些有关 JVM 内存使用情况详细信息 我们有一些具有不同内存类型的列 我们需要知道这些是什么 Heap Non Heap Usage Peak C
  • Java 包结构中的模块与层

    我曾经把所有东西都放在这样的包中 com company app module1 com company app module2 但它使得基于包的 AOP 切入点变得困难 并导致需要 IDE 才能理解的巨大包 所以现在我意识到我需要一个更深
  • 我可以编写一个断言多个不变量的类型保护吗?

    我可以编写一个类型保护来断言一个或多个子对象一个论点 在伪代码中 它可能看起来像这样 class C a number b string function assertInitialized this a is number and thi
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 托管扩展性框架 (MEF) 与复合 UI 应用程序块 (CAB)

    我们目前正在考虑在下一个应用程序中使用 CAB 或 MEF 我没有在 Codeplex 上看到任何有关如何处理同级控制通信的事件代理的示例 也许我错过了 MEF 中的控制间通信如何工作 此外 我们计划使用 Infragistics 它为 C
  • C:epoll和多线程

    我需要创建专门的 HTTP 服务器 为此我计划使用 epoll sycall 但我想利用多个处理器 核心 但我无法提出架构解决方案 ATM我的想法如下 使用自己的epoll描述符创建多个线程 主线程接受连接并将它们分配给线程epoll 但还
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 在 Codeigniter 中使用/嵌入 Ember js

    我即将开始开发一个 Web 应用程序 使用 Ember js 作为前端技术 使用 Codeigniter 作为后端 我遇到的问题是如何在 codeigniter 中嵌入或使用 ember js 可以通过 Web 服务从 codeignite
  • QuickBlox:arm64 架构的未定义符号

    我使用 Xcode 6 4 并使用 cocoapods 安装了 QuickBlox 框架 使用该框架后 我收到一些错误 例如 Undefined symbols for architecture arm64 OBJC CLASS QBSet
  • List、IList、IEnumerable、IQueryable、ICollection,哪个返回类型最灵活?

    我之前已经在这里看到过这个问题 但我不满意我理解的完整后果 问题是使用 linq to sql 返回的数据层应该使用什么返回类型以获得最大的灵活性和查询能力 这是我读过 发现的 IEnumerable 是有限的 只允许向前读操作 IEnum
  • 您的 Web 服务版本控制最佳实践是什么?

    我们有 2 个独立的产品 需要通过 Web 服务相互通信 支持 API 版本控制的最佳实践是什么 I have 本文 http www ibm com developerworks webservices library ws versio
  • 使用 LINQ to SQL 的 .NET 架构的最佳设计实践(DAL 必要吗?我们真的可以使用 POCO吗?要采用的设计模式吗?)

    我避免在 net arch n 层架构上编写看起来像是另一个线程的内容 但请耐心等待 希望我和其他人一样 在选择用于企业应用程序的架构时 考虑到当今的趋势和新兴技术 仍然没有 100 满意或不清楚应采取的最佳方法 我想我正在寻求大众社区对方
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构

随机推荐

  • Eclipse 和 Android 错误“parseSdkContent 失败”

    自从我升级了之后就出现了这个问题Android Tools至 21 1 当我启动 eclipse 时 即使在干净的工作区中 我也会收到错误parseSdkContent failed细节说 com android sdklib device
  • 如何设置 cron 在特定时间只运行一次文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我该如何设置cron在特定时间只运行一次文件 替代方案之一是at https en wikipedia org wiki At comma
  • 在 ASP.Net 应用程序中安全地存储(加密)数据

    我有一个 asp net 应用程序 人们可以使用网络浏览器通过互联网访问该应用程序 它在 Web 服务器上运行并与后端数据库进行通信 一些用户希望使用该应用程序来存储一些私人数据 对此的要求是 1 只有存储数据的用户才能看到它 2 开发人员
  • 在 Python 中将表达式嵌入到字符串中相当于什么? (即 Ruby 中的“#{expr}”)

    在Python中 我想创建一个带有嵌入表达式的字符串块 在 Ruby 中 代码如下所示 def get val 100 end def testcode s lt
  • 获取listview的item双击事件

    我需要做什么才能引用列表视图控件的双击事件
  • WPF Groupbox高度需要动态改变?

    我正在 WPF 中使用组框 组框的内部是一个堆栈面板 堆栈面板中的项目已被删除并添加到其子项中 我遇到的问题是组框中的 Stackpanel 正在更改高度 但 GroupBox 没有 因此它会切断 stackpanel 中添加的其余项目 如
  • 来自最大子记录数的表约束

    考虑以下针对学生和几门课程的模式 Student Regno integer Sname string Degree string Age integer Course Coursecode string Cname string Cred
  • 如何访问 Cloud Firestore 规则内的自定义声明?

    我有一个用户具有以下自定义用户声明 customClaims role admin 如何在云 Firestore 规则中访问此角色属性 管理员 我正在使用下面的代码 但它不起作用 需要做什么才能工作 match companies docu
  • apache2 和 mod wsgi:目标 WSGI 脚本无法作为 Python 模块加载

    我正在尝试在 ubuntu 上的 apache2 上安装 mod wsgi 所以我安装了libapache2 mod wsgi包 我用a2enmod激活他 我有一个网站 languageAnalyz 我试图将其与 mod wsgi 一起使用
  • 判断鼠标是否在控件上? (在控制像素范围内)

    我正在尝试编写一个函数来确定鼠标是否超出像素范围 特定控件的像素范围 问题是该函数仅适用于Form 不适用于我测试过的按钮或任何其他控件 我缺少什么
  • 使用下载处理程序将 ggplot 图像保存为闪亮的

    我正在闪亮中开发一个应用程序 在闪亮中 我使用操作按钮渲染一个简单的绘图 我添加了一个下载按钮来下载用户界面中现在的绘图 从我的代码 plot3 我尝试了下面的代码来保存图像 但出现错误 未找到绘图输入 任何人都可以建议我哪里出错了 下面是
  • 限制 Subversion 存储库的大小

    您好 我想通过指定最大大小来限制存储库的大小 但是我找不到任何有关这样做的信息 这在技术上可能吗 编辑 抱歉 如果我不清楚 我想保留一个功能存储库 可以在其中继续提交补丁 但是可以自动删除至少有一个较新版本的文档的最旧版本 以保持在大小限制
  • 无法在 JAVA 中使用 SMACK api 显示收到的消息

    我在本地主机上使用 SMACK api 和 OpenFire 创建了一个简单的客户端 截至目前 我有两个用户说 X 和 Y 每当有人登录到客户端时 都会有一个发送按钮向用户 Y 发送消息 我已经检查了 XMPP 调试管理器 并且能够发送 在
  • 在目录的所有文件名中查找一个单词并将其替换为另一个单词

    我试图在目录 以及所有子目录 的所有文件名中将 所有者 一词替换为 用户 Ex owners controller gt users controller owner rb gt user rb 任何帮助 将不胜感激 Use find与 e
  • Java 8 流中按属性排序

    哦 那些带有 lambda 的棘手 Java 8 流 它们非常强大 但其中的复杂性需要花一些时间才能理解 假设我有一个User带有属性的类型User getName 假设我有这些用户的地图Map
  • C#中从DataGridView读取数据

    我怎样才能从中读取数据DataGridView在 C 中 我想读取表中出现的数据 如何浏览线路 就像是 for int rows 0 rows lt dataGrid Rows Count rows for int col 0 col lt
  • 如何使用 QSS 为禁用按钮设置不同的背景颜色?

    我已经尝试过使用disabled and enabled但它不起作用 这是我的 QSS 代码 QPushButton background color 44c767 border radius 5px border 1px solid 18
  • Javascript Chart.js 比例修复

    我有一个关于 Chart js 的简单问题 我想知道如何修复我的图表 我使用 Chart js 和 respChartJS https github com arifLogic respChartJS https github com ar
  • 如何记录 makefile?

    有没有办法在 Makefile 中编写 标准 注释 以便稍后将它们提供给类似 Doxygen 的程序 从而输出漂亮的 例如 HTML 或 man 文档 我想对我的主要目标有一个清晰的概述 但不要太花哨 以下是一个更简单的解决方案 不需要定义
  • “不变”属性是抽象定义的一部分吗?

    作为我学习的一部分 我认为我发现的抽象定义的最佳答案 有意义 来自 stackoverflow 什么是抽象 https stackoverflow com questions 7028242 what is abstraction 除此之外