实体和类的区别是什么?

59

实体是类的一个实例吗?

7个回答

75

一个 是一个对象的模板(还有其他用途),是一个非常通用的概念。

一个 实体 具有更多的语义意义,通常与一个概念相关联(可能是关于一个真实对象的,例如一个 员工 或一个 学生 或一个 音乐专辑),并且与业务逻辑相关联。

实体通常用于在对象和数据库中的表之间建立映射。实体也称为领域对象。如我之前所提到的,实体将用于存在业务逻辑的情况,并且因此它保存有关其建模的系统(或系统的一部分)的信息。


4
@Steven应该被选为答案。 - Jo Smo
实体通常用于在对象和数据库中的表之间建立映射。实体也被称为领域对象。我可能理解有误,但这是否包括持久化领域对象,这是我通常尝试避免的... - Jean-François Savard
2
@Jean-FrançoisSavard 我倾向于同意你的观点 - 现在我区分实体和领域对象。 - Vivin Paliath

30

补充一点

类(Class)是语法上的,即具有某些共同属性或特征并通过种类、类型或质量与其他事物区别开来的集合或类别。

实体(Entity)是语义上的,即与言语或逻辑的意义有关。一个实体是指实际或潜在地存在于自身中的东西,具体或抽象,物理或非物理均可,它无需具有物质存在。

对象(Object)是由标识符引用的内存值,是一个类的实例。

输入图像描述


15

实体通常指具有独特和独立存在的事物。

在软件开发中,这个词几乎只用于表示一个实例与另一个实例不同,并且它们相互独立。

另一方面,定义或包含对象的定义。一旦根据定义构建了该对象,您就会得到实例对象实例


4

简短回答是:是的。

"Entity"更多地是来自现实世界的概念。"Instance"(别名为对象)-来自编程世界。

在编程世界中,我们也有"entity"的概念,但在这里它更像是一个实例的子级。因此,任何实体都是实例的子级。此外,实体与其他东西有它们的联系,但与编程无关 - 例如,人们所说的实体可以在数据库中有表格。实例不能在数据库中有表格,因为实例总是与类连接在一起。


3

实体

实体是一个轻量级的持久化域对象。通常,实体代表关系型数据库中的一张表,每个实体实例对应该表中的一行。实体的主要编程构件是实体类,虽然实体可以使用帮助类。

实体的持久状态通过持久字段或持久属性表示。这些字段或属性使用对象/关系映射注释将实体和实体关系映射到底层数据存储中的关系数据。

实体类具有实体的原型。实体类本质上是一个数据库表的对象包装器。实体的属性被转换为数据库表上的列。实体可以具有各种数据维护操作,例如读取、插入、修改、删除、readmulti(基于部分键从表中读取多个记录)。

实体可以具有属性、操作、依赖关系、继承关系和聚合关系。每个构造都与一组规则相关联。

  • 实体类规则
    实体必须至少具有一个属性。异常情况是如果实体是另一个实体的子类,则实体不得具有任何属性。不允许实体聚合其他类。

  • 实体属性
    实体属性对应于其关联数据库表上具有相同名称的列。

  • 实体操作
    实体操作可以根据它们的原型分为两类:数据库和非数据库操作。

  • 实体输出
    实体类被转换为具有操作而没有属性的类。输入元模型中实体的属性被转换为一个或多个结构。

  • 实体类选项
    可用于实体类的选项包括实体类抽象、允许乐观锁定、审计字段、启用验证、最后更新字段、无生成SQL和替换超类。

  • 乐观锁定用于并发控制
    使用乐观锁定进行并发控制意味着多个用户可以同时访问记录,但只有其中一个用户可以提交对该记录的更改。

  • 表级审计
    使用数据库表级审计选项启用表级审计。

  • 退出点
    退出点是您编写的回调函数。它由服务器在预定义的战略点执行。

  • 实体继承
    输入元模型实体类可以作为其他实体类的子类。

  • 最后更新字段
    最后更新字段是您可以添加到数据库表中以包含有关每个记录修改时间的额外信息,供报告目的使用。

同时,您可以查看此链接和此链接获取更多信息!


1
通常,实体代表关系型数据库中的一张表。但我不同意这种说法,实体是一个领域对象,应该存在于应用程序的领域层中。它是在应用程序核心层中定义的模型,并且应该通过数据层(或数据库)进行解耦。数据库通常拥有DTO(数据传输对象),这些DTO由应用程序获取/写入。实体是这些DTO的聚合体。 - Martin Nowosad

3

对象是具有状态、行为和标识的实体。相似对象的结构和行为在它们的共同类中定义。实例和对象这两个术语是可以互换使用的。

来自Grady Booch的书

因此我们可以说,实体、对象和类实例是可以互换使用的。


2
你的结论与所给的定义完全不符。 - Felix Dombek
2
@FelixDombek 没错,你说得对。从这个定义来看,对象是一种特殊类型的实体。并非所有的实体都可以被视为对象。 - Sergey Teplyakov

2
我从这篇论文“实体为基础的编程范式”中摘录,作者是宾夕法尼亚大学的Nimit Singhania。
实体是一个抽象的单元,代表一组节点或子实体。它使用其子实体提供的服务和这些子实体之间的协作来实现其所需的目标。它有自己的身份,在外部世界中显示为一个单一的单位,就像在现实生活中,一个团队或组织是一个整体单位,而不仅仅是个人的集合。分布式系统本质上是一个实体层次结构,其中每个实体都有特定的角色并提供特定的服务[...] 实体抽象与面向对象编程中的对象非常相似。对象和实体之间的关键区别在于,实体是一个活动和活跃的单元,而对象是被动的。实体由相互交互的活动子实体组成,以提供服务,并可能与其他实体进行交互。而对象只包含可以由外部世界查询和操作的静态字段和属性。但是,许多面向对象编程的见解可以延续到这种编程范式中。我们可以拥有实体的类和类型,其中类可以为系统的其余部分提供特定的服务和功能。此外,我们可以定义实现核心结构和一些基本协议以进行节点间交互的抽象实体,并将其进一步扩展以实现实际实体。同样,我们可以定义定义一组服务的接口。这些接口可以由多个具有不同保证的实体实现,并根据要求,程序员可以选择其中之一来提供所需的服务。

链接为空。我在其他地方找不到整篇论文,请问您能否在回答中更新链接? - M. Dudek
1
现在尝试一下这个:https://drive.google.com/file/d/1yDg7ZZLLd3l7yqRgNqs6FN8wctViw5xd/view?usp=sharing - Lemmy_Caution

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接