一般情況下,使用關聯(association)來表示像類中的字段等。這個關系是始終存在的,因此你可以隨時針對關聯項進行訪問調用,例如可以始終從 Customer 對象獲取 Order 對象。但事實上它并不需要是一個字段,如果從更偏向于接口建模的角度來看,它只是表示 Customer 中存在了一個可以返回 Order 的方法。
此處引用《UML Distilled》一書中的定義:
a dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client)
兩個元素之間存在依賴關系,是指如果改變其中一個元素(supplier)的定義可能會導致另一個元素的變化(client)
這是一個模糊和普通的關系定義,這就是為什么對 UML 有許多不同形式的依賴(dependency)定義。而在代碼術語中,諸如命名一個參數類型和創建一個臨時變量對象等也暗示著依賴關系。
你可能不想在 UML 圖中顯示所有的依賴 - 因為有太多的依賴。你需要有選擇性地顯示那些對你的溝通表達非常重要的依賴。
我傾向于不頻繁的使用多種依賴形式定義。我發現大部分情況下我要展現的關鍵點是依賴的存在,而使用哪種形式來表述已經不是那么重要。
關聯(association)也意味著依賴(dependency),如果兩個類之間存在關聯關系,則也存在依賴關系。但我無法想象你可能會用一條額外的線來表示這種情況。關聯已經暗示了依賴,因此無需再泛化(generalization)了。
這種混淆的原因之一就是在 UML 1.0 中使用了瞬態鏈接(transient links),這似乎是由于 UML 1.0 的元模型的定義問題,通過使用關聯關系形式來體現它們自身的依賴,例如參數。我一直不喜歡這種表示方式,因為我覺得一個永久的關系和一個僅在當前方法中存在的上下文關系之間存在著重要的區別。因此我會以依賴的形式來表示而非關聯。在 UML 2.0 中這個問題不會再出現,因為元模型中采用了不同的形式來表示方法上下文的關系,所以上述的表示形式在 UML 2.0 中不在有效。
翻譯自 Martin Fowler 文章 《Dependency And Association》。
文章列表