Remove ads

计算机科学中,实化(英语:reification)是把抽象的想法(idea)转化为明确的数据模型程序设计语言创建的其他对象的过程。通过实化,以前是隐式的、未表示的、可能是不可表示的被显式形成可概念(逻辑或计算)操作的。非正式地,实化也常被称作在特定系统范围内把某些东西变为“头等公民”即对象化。 实化是概念分析知识表示中最常用的技术。

在程序设计语言中的实化与反射

在程序设计语言中,把用户程序或者程序设计语言某一部分本来在编译期运行期是隐式的,表示为语言自身,这一过程称为实化。这使得其对程序可当作普通数据来利用。在具有反射的程序设计语言中,实化的数据表示了相关的被实化的领域。实化的数据常被称作头等对象

  • C语言中,把内存地址的底层细节实化为指针。例如:char* buffer = (char*) 0xB800000;
  • 基于λ演算函数式程序设计语言,把过程抽象(procedure abstraction)与过程应用(procedure application)的概念实化为λ表达式。
  • Scheme语言实化了续体 (粗略说近似于运行期上下文环境)。
  • C#实化了参数多态为多态,成为语言的头等特征。
  • Java中存在“可实化的类型”(reifiable types),其编译期信息在运行期保留并可完全利用。[1]
  • REBOL实化了代码与数据的相互转换。
  • 许多语言,如LispJavaScriptCurl等,提供了evalevaluate过程使其有解释器的功能。
  • Prolog语言的Logtalk英语Logtalk框架提供了逻辑程序设计上下文的实化。
  • Smalltalk演员模型的语言实化了块(block)与消息[2]
  • Smalltalk-80把源代码编译为字节码,这是首例。[3]
Remove ads

数据实化

数据实化涉及在形式规范英语formal specification中找到抽象数据类型的更为具体的表示。 [4] 例如,抽象数据类型集合(set)可以用map或者array来实化。

概念建模中的实化

概念建模英语Conceptual model (computer science)中广泛使用了实化。[5]实化一个关系(relationship)意味着把它视作一个实体。实化一个关系的目的是令其显式,必要时可以增加额外的信息。例如,关系IsMemberOf(member:Person, Committee)表示某人是某委员会的成员。下图左侧用表的形式列出了人P1是委员会C1C2的成员;人P2是委员会C1成员。

Thumb
Example population of 关系IsMemberOf的实化。

这一关系,也可看作实体。见图示的右侧。称作该实体实化了这个关系。这个实体类型为Membership。现在,可以给这个关系实体增加新的信息,如某人属于某委员会是由谁来提名加入的,可表示为IsNominatedBy(Membership, Person)

与其密切相关的用法见实化 (知识表示)英语Reification (knowledge representation)

实化在UML中

Thumb
UML的类图表示Membership关系例子。

UML提供了关联类(association class)用于构建被实化的关系类型。关联类既是关联又是类。[6]

参见

参考文献

Remove ads

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.

Remove ads