實化
外觀
在電腦科學中,實化(英語: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.