实化
在计算机科学中,实化(英語:reification)是把抽象的想法(idea)转化为明确的数据模型或程序设计语言创建的其他对象的过程。通过实化,以前是隐式的、未表示的、可能是不可表示的被显式形成可概念(逻辑或计算)操作的。非正式地,实化也常被称作在特定系统范围内把某些东西变为“头等公民”即物件化。 实化是概念分析与知识表示中最常用的技术。
在程序设计语言中的实化与反射
在程序设计语言中,把用户程序或者程序设计语言某一部分本来在编译期与运行期是隐式的,表示为语言自身,这一过程称为实化。这使得其对程序可当作普通数据来利用。在具有反射的程序设计语言中,实化的数据表示了相关的被实化的领域。实化的数据常被称作头等对象。
- C语言中,把内存地址的底层细节实化为指针。例如:
char* buffer = (char*) 0xB800000;
- 基于λ演算的函数式程序设计语言,把过程抽象(procedure abstraction)与过程应用(procedure application)的概念实化为λ表达式。
- Scheme语言实化了续体 (粗略说近似于运行期上下文环境)。
- C#实化了参数多态为多态,成为语言的头等特征。
- Java中存在“可实化的类型”(reifiable types),其编译期信息在运行期保留并可完全利用。[1]
- REBOL实化了代码与数据的相互转换。
- 许多语言,如Lisp、JavaScript和Curl等,提供了
eval
或evaluate
过程使其有解释器的功能。 - Prolog语言的Logtalk框架提供了逻辑程序设计上下文的实化。
- Smalltalk与演员模型的语言实化了块(block)与消息。[2]
- Smalltalk-80把源代码编译为字节码,这是首例。[3]
数据实化
数据实化涉及在形式规范中找到抽象数据类型的更为具体的表示。 [4] 例如,抽象数据类型集合(set)可以用map或者array来实化。
概念建模中的实化
概念建模中广泛使用了实化。[5]实化一个关系(relationship)意味着把它视作一个实体。实化一个关系的目的是令其显式,必要时可以增加额外的信息。例如,关系IsMemberOf(member:Person, Committee)
表示某人是某委员会的成员。下图左侧用表的形式列出了人P1是委员会C1与C2的成员;人P2是委员会C1成员。
这一关系,也可看作实体。见图示的右侧。称作该实体实化了这个关系。这个实体类型为Membership
。现在,可以给这个关系实体增加新的信息,如某人属于某委员会是由谁来提名加入的,可表示为IsNominatedBy(Membership, Person)
。
与其密切相关的用法见实化 (知识表示)。
实化在UML中
UML提供了关联类(association class)用于构建被实化的关系类型。关联类既是关联又是类。[6]
参见
查看维基词典中的词条「reification」。
参考文献
- ^ The Java Language Specification, section 4.7 (页面存档备份,存于互联网档案馆), Java SE 7 Edition
- ^ Smalltalk Blocks And Closures. C2.com. 2009-10-15 [2010-10-09]. (原始内容存档于2010-02-06).
- ^ J. Malenfant, M. Jacques and F.-N. Demers, A Tutorial on Behavioral Reflection and its Implementation (页面存档备份,存于互联网档案馆)
- ^ Formal Methods Europe, Frequently Asked Questions, part 13 (页面存档备份,存于互联网档案馆).
- ^ Antoni Olivé, Conceptual Modeling of Information Systems, Springer Verlag, 2007.
- ^ Unified Modeling Language, UML superstructure, Object Management Group, 2007-11-02.