實化
在計算機科學中,實化(英語: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.