property和attribute的區別

2021-06-21 06:22:39 字數 3658 閱讀 4729

property是指類向外提供的資料區域。

而attribute則是描述物件在編譯時或執行時屬性的,分為固有型和使用者自定義型,其中使用者自定義型可以利用reflection在執行期獲取。

這兩者是有本質區別的。

資料上說二者乙個是service的屬性,而另乙個是inte***ce的。

第一種好象更準確,摘要如下:

在很多人的腦海中,attribute就是類的屬性,property呢?好像也是類的屬性?因此有很多人不加區別的統一稱為類的屬性,尤其是在寫中文文章的時候。這種心理是典型的鴕鳥心態,眼不見為淨。其實稍微用腳想一下就知道,事實肯定不是這樣的,uml中既然發明了這兩個術語,顯然不是用來冗餘的。它們之間肯定有著千絲萬縷的聯絡與區別。

各種各樣的物件導向語言、各種元件技術、模板技術、web service技術,其中大部分涉及到了「屬性」這個概念,而其英文術語則常常是attribute、property或者field。很多人一概稱之為「屬性」,有的地方確實可以不加區分,但有的地方卻是差之毫釐、謬以千里。我對於這些紛紛擾擾的技術和術語也很苦惱,但是我們至少可以通過uml中的這兩個術語的解釋找到乙個可以參考的標準。無論如何,uml是物件導向技術的集大成者和事實上的標準。

很客觀的說,uml1.4中對於這兩個術語並沒有很清晰的定義,但是其區別還是顯而易見的。attribute應該是uml1.4中的寵兒,而property連乙個單獨的術語都沒有撈到。誰也沒想到在uml2.0中風雲突變,attribute從類圖中消失了,而property堂而皇之入主中原。

1。4中 attribute是與classifier相關聯的術語,它比property的影響範圍要小。class是classifier的子類,因此attribute也可以表示class的屬性。從上面的定義還可以看出,attribute可以是classifier的例項的命名的槽。對於class來說,其實例就是object,object的槽就是物件的屬性值槽。因此,attribute是可以作為物件的屬性的。而property似乎沒有這一層的含義。按mof(元物件設施,omg的另乙個規範,後面會有詳細解釋)的模型層次劃分,attribute涉及的模型層從m2到m0,而property似乎只是m2層的概念。

2。0中 attribute這裡僅僅指乙個類元的結構特徵,可以將類元的例項聯絡到乙個或者一組具體值。而沒有提到例項的槽(slot)等等。我猜想,這是因為uml2.0中已經把attribute作為property的乙個子集了,所以關於例項的槽(slot)等等的具體賦值方法,都歸結到property的定義中解釋了。

另外一點值得注意的是,attribute的定義來自於術語表,而沒有在元模型圖中出現。而property出現在元模型圖中,並且都做了詳細而具體的解釋。這一點可以看出,uml強化property,弱化attribute的決心。

這一節對attribute和property作乙個小結,基於目前最新的uml2.0規範:

l總體上來說,attribute是property的子集,property會在適當的時機表現為attribute;

lproperty出現在類圖的元模型中,代表了class的所有結構化特徵;attribute沒有出現在元模型中,它僅僅在class的概念中存在,沒有相應的語法了;

lproperty有詳細的定義和約束,而attribute沒有詳細的定義,因此也不能用ocl寫出其約束。

lproperty和attribute都是m2層的概念。在m1層,它們的例項是具體類的屬性;在m0層,它們的例項的例項是具體物件的槽中儲存的值。

對於property

和attribute

這兩個名詞都叫「屬性」的問題,**於國內

it書籍翻譯界的疏忽。

其實它們**於兩個不同的領域,

attribute

屬於ooa/ood

的概念,而

property

屬於程式語言中的概念。下面我們來說明它們的異同。

attribute

attributes

是microsoft .net framework

檔案的元資料,可以用來向執行時描述你的**,或者在程式執行的時候影響應用程式的行為。

property

屬性是物件導向程式設計的基本概念,提供了對私有欄位的訪問封裝,在

c#中以

get和

set訪問器方法實現對可讀可寫屬性的操作,提供了安全和靈活的資料訪問封裝。關於屬性的概念,不是本文的重點,而且相信大部分的技術人員應該對屬性有清晰的概念。以下是簡單的屬性 區別

可以說兩者沒有可比性,只不過我們國家的語言特點才引起的歧異,其實只要記住

attribute

是派生於

system,

attribute

類之下,它的主要作用是描述,比如某為了描述

某個方法是來自與外部的dll,

可以寫如下**,這就是乙個attribute,他是乙個描述(或者說宣告)

[dllimport("user32.dll")]

attribute

也有很多系統的「預設」屬性,見下表

預定義的屬性

有效目標 說明

attributeusage

class

指定另乙個屬性類的有效使用方式

clscompliant 全部

指出程式元素是否與

cls相容

conditional

method

指出如果沒有定義相關聯的字串,編譯器就可以忽略對這個方法的任何呼叫

dllimport

method

指定包含外部方法的實現的

dll位置

stathread

method(main)

指出程式的預設執行緒模型為

sta

mtathread

method(main)

指出程式的預設模型為多執行緒

(mta)

obsolete 除了

assembly

、module

、parameter

和return

將乙個元素標示為不可用,通知使用者此元素將被從未來的產品

paramarray

parameter

允許單個引數被隱式地當作

params(陣列)

引數對待

serializable

class

、struct

、enum

、delegate

指定這種型別的所有公共和私有字段可以被序列化

nonserialized

field

應用於被標示為可序列化的類的字段,指出這些欄位將不可被序列化

structlayout

class

、struct

指定類或結構的資料布局的性質,比如

auto

、explicit

或sequential

threadstatic

field(靜態)

實現執行緒區域性儲存

(tls)

。不能跨多個執行緒共享給定的靜態字段,每個執行緒擁有這個靜態欄位的副本

而property

是指程式設計過程中的字段,也即類的成員。 如:

private int hour; //

定義私有變數表示"小時

",外部是訪問不到的

.} public int hour// 

定義hour

程式介面

get

attrib命令的使用

attrib命令的使用 命令列 attrib s h c windows run.sys 解 釋 attrib 命令名稱 s 取消檔案的系統屬性 h 取消檔案的隱藏屬性 c windows run.sys 操作的檔名 注意每項之前均用空格間隔。對於attrib命令的使用詳解如下所示 attrib命令...

property和 property的一些小結

在.h檔案中 inte cemyclass nsobject property nonamtic,retain myobjecct myobject end 在.m檔案中 implementation myclass synthesize myobject myobject void dealloc...

Property和attribute的區別

property和attribute的區別 attribute和property都可以翻譯成 屬性 有的地方用attribute表示 屬性 有的地方又在用property,初 學者常常在這兩個單詞間 迷失 甚至認為二者沒有區別,是一樣的。可是attribute不等於property。二者之間到底有何...