跳至內容

實化

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

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

數據實化

[編輯]

數據實化涉及在形式規範英語formal specification中找到抽象資料類型的更為具體的表示。 [4] 例如,抽象資料類型集合(set)可以用map或者array來實化。

概念建模中的實化

[編輯]

概念建模英語Conceptual model (computer science)中廣泛使用了實化。[5]實化一個關係(relationship)意味着把它視作一個實體。實化一個關係的目的是令其顯式,必要時可以增加額外的資訊。例如,關係IsMemberOf(member:Person, Committee)表示某人是某委員會的成員。下圖左側用表的形式列出了人P1是委員會C1C2的成員;人P2是委員會C1成員。

Example population of 关系IsMemberOf的實化。

這一關係,也可看作實體。見圖示的右側。稱作該實體實化了這個關係。這個實體類型為Membership。現在,可以給這個關係實體增加新的資訊,如某人屬於某委員會是由誰來提名加入的,可表示為IsNominatedBy(Membership, Person)

與其密切相關的用法見實化 (知識表示)英語Reification (knowledge representation)

實化在UML中

[編輯]
UML的類圖表示Membership關係例子。

UML提供了關聯類(association class)用於構建被實化的關係類型。關聯類既是關聯又是類。[6]

參見

[編輯]

參考文獻

[編輯]
  1. ^ The Java Language Specification, section 4.7頁面存檔備份,存於互聯網檔案館), Java SE 7 Edition
  2. ^ Smalltalk Blocks And Closures. C2.com. 2009-10-15 [2010-10-09]. (原始內容存檔於2010-02-06). 
  3. ^ J. Malenfant, M. Jacques and F.-N. Demers, A Tutorial on Behavioral Reflection and its Implementation頁面存檔備份,存於互聯網檔案館
  4. ^ Formal Methods Europe, Frequently Asked Questions, part 13頁面存檔備份,存於互聯網檔案館).
  5. ^ Antoni Olivé, Conceptual Modeling of Information Systems, Springer Verlag, 2007.
  6. ^ Unified Modeling Language, UML superstructure, Object Management Group, 2007-11-02.