實化
在電腦科學中,實化(英語: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中
編輯參見
編輯查看維基詞典中的詞條「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.