对象(计算机科学)

计算机科学中,对象可以是变量数据结构函数方法。作为内存区域,对象包含一个,并由标识符引用。

面向对象的编程范式中,对象可以是变量,函数和数据结构的组合;特别是在范式的基于类的变体中,一个对像是指的特定实例

数据库管理的关系模型中,一个对象可以是,或数据库实体之间的关联(例如将一个人的年龄与特定人联系起来)。

基于对象的语言

编程语言中的一个重要区别是面向对象的语言和基于对象的语言之间的区别。如果语言包括对象的基本功能:身份,属性和属性,通常将其视为基于对象的语言。如果语言是基于对象的,并且具有多态性继承封装以及可能的组成的能力,则将其视为面向对象。多态性是指根据对像传递给对象的多种行为的函数名称的能力。传统消息传递仅在第一个对像上进行区分,并认为将消息“发送消息”到该对象。但是,某些面向对象的编程语言,例如口味通用LISP对象系统(CLOS),可以歧视函数的第一个参数。继承是能够子类子类,创建一个新类,该类别是现有类别的子类,并继承其父母的所有数据约束和行为,同时又增加了新的和/或更改其中一个或多个。

面向对象的编程

面向对象的编程中,对像是一种抽像数据类型,并添加了多态性继承。面向对象的系统不是将程序和数据构造为代码和数据,而是使用“对象”的概念集成了两者。对象具有状态(数据)和行为(代码)。对象可以与现实世界中的事物相对应。因此,例如,图形程序将具有CircleSquare菜单之类的对象。在线购物系统将有购物车,客户,产品等对象。购物系统将支持诸如定位订单付款提供折扣之类的行为。对像被设计为类层次结构。因此,例如,使用购物系统,可能会有高级类,例如电子产品厨房产品书籍。例如,在电子产品下可能会有进一步的改进: CD播放器,DVD播放器等。这些类和子类对应于数学逻辑中的集合子集

专用对象

对象的一个​​重要概念是设计模式。设计模式提供了可重复使用的模板来解决常见问题。以下对象描述是对像一些最常见的设计模式的示例。

  • 函数对象:具有单个方法的对象(在C ++中,此方法将是函数运算符,“ operator()”,它的作用很像函数(例如C/C ++指针指向函数)。
  • 不变的对象:在创建时间设置具有固定状态的对象,并且后来不会更改。
  • 一流对象:可以使用毫无限制的对象。
  • 容器对象:可以包含其他对象的对象。
  • 工厂对象:其目的是创建其他对象的对象。
  • metaObject :可以从中创建其他对象的对象(与不一定是对象进行比较)。
  • 原型对象:一种专业的元观察,可以通过复制来创建其他对象
  • 上帝的对象:知道或做太多事情的对象(这是反模式的一个例子)。
  • Singleton对象:该对像是程序生命周期内唯一的实例。
  • 滤镜对象:接收数据流并将其输入并将其转换为对象输出的对象。通常,输入和输出流是字符的流,但这些流也可能是任意对象的流。这些通常用于包装器中,因为它们掩盖了现有的实现,并在开发人员端要求的抽象。

分布式对象

面向对象的方法不仅是一个编程模型。它可以作为分布式系统的接口定义语言同样很好地使用。与编程对象相比,分布式计算模型中的对象往往更大,持久且面向服务的对象更加面向服务。

包装分布式对象的标准方法是通过接口定义语言(IDL)。 IDL屏蔽了分布式服务器对象的所有详细信息的客户端。详细信息,例如该对象所居住的计算机,其使用的编程语言,哪些操作系统以及其他特定于平台的问题。 IDL通常也是分布式环境的一部分,该环境以统一的方式向所有对象提供交易和持久性等服务。分布式对象最受欢迎的两个标准是对像管理组Corba Standard和Microsoft的DCOM。

除分布式对像外,还提出了对对象的基本概念的其他许多扩展,以启用分布式计算:

  • 协议对象协议堆栈的组件,将网络通信包含在面向对象的接口中。
  • 复制的对象是分布式对象(称为副本)的组,它们运行分布式多方协议以在其内部状态之间达到高一致性,并且以协调的方式响应请求。示例包括容忍故障的CORBA对象。
  • 实时分布式对象(或简单地实时对象)将复制的对象概念推广到可能在内部使用任何分布式协议的复制组,这可能仅导致其本地状态之间的一致性较弱。

这些扩展中的某些(例如分布式对象协议对象)是特定类型的特定类型的“普通”对象(例如远程方法调用协议构图)的特定类型的术语。其他的,例如复制的对象实时分布式对象,更不可估量,因为它们放弃了一个对像一次驻留在一个位置中的情况,并将概念应用于可能跨越的实体(副本)在多个位置,可能只有弱一致的状态,并且其成员可能会动态变化。

语义网

语义网本质上是一个分布式对象框架。语义网络中的两个关键技术是Web本体语言(OWL)和资源描述框架(RDF)。 RDF提供了定义基本对象(名称,属性,属性,关系)的能力,该对象可以通过Internet访问。 OWL添加了基于集合理论的更丰富的对像模型,该模型提供了其他建模功能,例如多重继承

猫头鹰对像不像通过接口定义语言访问的标准大颗粒分布式对象。这种方法不适合互联网,因为互联网不断发展,并且在一组接口上的标准化很难实现。 OWL对象往往类似于用于在JavaC ++等编程语言中定义应用程序域模型的对象。

但是,猫头鹰对象与传统面向对象的编程对象之间存在重要区别。传统对象通常用单个继承将其编译成静态层次结构,但OWL对像是动态的。猫头鹰对象可以在运行时更改其结构,并且可以成为新类或不同类的实例。

另一个关键区别是该模型处理当前不在系统中的信息的方式。编程对象和大多数数据库系统都使用“封闭世界假设”。如果系统不知道事实被认为是错误的。语义Web对象使用开放世界的假设,仅当有实际的相关信息是错误的,否则假定它是未知的,既不为true也不是错误的。

猫头鹰对象实际上最喜欢人工智能框架语言中的对象,例如KL-ONE和LOOM。

下表将面向对象的编程语言(例如Java或C ++)与语义Web对象进行了对比:

OOP对象语义网络对象
类被视为实例类型。课程被视为个人集。
实例无法在运行时更改其类型。班级会员可能会在运行时改变。
类的列表是在编译时完全知道的,此后无法更改。可以在运行时创建和更改类。
编译器在构建时间使用。编译时错误表示问题。推理器可用于在运行时或构建时间进行分类和一致性检查。
类通过命令式功能和方法对其大部分含义和行为进行编码。课程从猫头鹰语句中明确表示其含义。不能附加命令式代码。
实例是匿名的,因为它们无法轻易从执行程序外部解决。所有命名的RDF和OWL资源都具有独特的URI,可以参考它们。
封闭的世界:如果没有足够的信息来证明陈述是正确的,那么假定是错误的。开放世界:如果没有足够的信息来证明陈述真实,那么可能是正确的还是错误的。

也可以看看