2012-12-14 79 views
0

如何實現uml的強大包含關係。也稱爲構圖。執行包含關係

爲了讓在規模爲例: 我有一類成分,其中可能包含零個或多個接口:

class Component (name: String, description: String, Interaction: Set[Interface]) 

,然後我有我的類接口:

class Interface(name: String, description: String) 

是什麼應該尊重的約束包含在內?

  • 如果我在組件中輸入接口,則此接口不能放置在其他組件中。
  • 如果我刪除了一個Component,還必須刪除它的所有接口。

還有其他限制要強制執行遏制?

如何實現第一個限制條件:

我想我會一個字段添加到一個名爲類組件signComp類的接口,把制約部件的設定方法互動。
例如: 對於必須添加到組件的每個接口,如果接口將signComp設置爲null,則插入Interface並將ComponentComp設置爲Component current,否則取消該分配。

這是一個成功的實施?或者還有其他方法。

回答

1

如果你想採取一成不變的方法,你可以嘗試這樣的事:

case class Component(name: String, description: String, interaction: Set[Interface]) 

case class Interface(name: String, description: String) 

def addInterface(components: Set[Component], c: Component, i: Interface) = 
    if(components.find(_.interaction contains i) isEmpty) 
    components + c.copy(interaction = c.interaction + i) 
    else 
    components 

而且使用這樣的:

val i1 = Interface("i1", "interface 1") 
val a = Component("a", "description a", Set(i1)) 
val b = Component("b", "description b", Set())  
val components = addInterface(Set(a), b, i1) // Set(Component(a,,Set(Interface(i1,)))) 
addInterface(components, b, Interface("i2", "interface 2")) // Set(Component(a,,Set(Interface(i1,))), Component(b,,Set(Interface(i2,)))) 

由於存在組件之間的一個一對一的映射,您的第二個約束條件可以簡單地通過從集合中刪除組件來實現:

components - a // Set()