如何实现uml的强大包含关系。也称为组合。
以比例为例: 我有一个类组件,可能包含零个或多个接口:
class Component (name: String, description: String, Interaction: Set[Interface])
然后我有我的班级界面:
class Interface(name: String, description: String)
应该遵守哪些限制遏制?
还有其他限制要强制实施遏制吗?
如何实现第一个约束:
我以为我会在接口类中添加一个名为Component的signComp的字段,并在组合方法的交互上放置约束。
例如:
对于必须添加到Component的每个接口,如果接口的signComp为null,则插入接口并使用Component设置signComp,否则取消赋值。
这是一个成功的实施?或者还有其他方法。
答案 0 :(得分: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()