星期三, 1月 03, 2007

翻譯名詞:attribute、property

在大多數的書或是文章中,對於attribute與property兩個詞一律都翻譯為「屬性」,雖然在語意清楚的情況下,自然可以分辨,但還是常常會容易混淆。如果要分辨清楚,就得回頭看看物件導向的起源--ADT(Abstract Data Type)。

ADT是由表示資料的data與行為能力的operation所組成,落實在程式語言的層面,當我們用class來描繪一個ADT時,就將代表資料的data稱為attribute、而operation稱為method。在某些程式語言中(如C++),就將attribute稱為member variable、而method稱為member function。不過在其他種類的程式語言(像是C#)中,也把attribute稱為field。 實際上,在許多書中,可能也都沒這麼考究,幾個詞彙可能交替互用,而沒有細分。

那麼property呢?我認為這個詞彙的流通,主要是component-based的程式語言或是整合開發環境(如VB、Delphi)興起之後才逐漸被使用,主要是指以一對分別用來儲存(setter)以及擷取(getter)的方法(method)所封裝的資料,由於是以方法來封裝,因此就可以在設定或是讀取資料的同時進行必要的運作,像是驗證新設定的值是否合理、或是因應新的值自動更改其他屬性的值等等。隨著property的流行,許多程式語言(像是C#、Ruby)本身就直接提供property的語法,Java則是要求程式員必須依循一定的命名規範,讓一對方法在整合開發環境中使用起來像是其他程式語言中的property。

在.NET中,事情又被複雜化了, 因為.NET使用attribute這個詞彙來表示物件在進行某種行為時的特性,比如說透過Serializable這個attribute,可以指定類別中哪些field在serialize時要儲存起來。這裡的attribute就跟前面所提到對應到ADT中data的attribute不同了。如果您查閱微軟的文件,會發現有些地方微軟把attribute翻譯為「自訂屬性」,雖然已經和「屬性」有所區別,但還是容易讓人誤會「自訂屬性」是「屬性」的一種,我個人比較建議將.NET中的attribute譯為「特性」,會比較達意。

了解了這一點之後,就可以知道在HTML/XML中attribute的意義了,依循的還是ADT中data的意思,所以譯為「屬性」並沒有太大的問題。

延伸閱讀:

沒有留言: