【问题标题】:How to model a mixin in UML如何在 UML 中为 mixin 建模
【发布时间】:2016-01-07 10:07:17
【问题描述】:

使用 UML 表示“mixin”的最佳方式是什么?

this article 中所述:

在面向对象的编程语言中,mixin 指的是已定义的 可以添加到类中的功能量。一个重要的 这方面的一个方面是,它可以更专注于 特定行为的属性比继承 开发过程中的结构。

我将提供有关我的特定用例的更多详细信息。 我有一组模拟不同类型对象的类。因为它们都可以存储在存储中,所以我想使用 mixin 来实现与“被存储”相关的所有功能。 当然,我可以使用抽象类,但我不喜欢它,因为这些类应该是不同层次的类的一部分,而且它们可以存储的事实只是次要属性。 另一种选择是使用组合并将“存储节点”添加为此类的字段。出于同样的原因,我也不喜欢这个选项:我不想在类和存储之间创建任何依赖关系。

我已经使用基于动态代理的 mixin 在 Java 中实现了解决方案,我想用清晰的 UML 类图记录解决方案。有没有一种标准的方式来表示这个 mixin?

我还想知道,对 mixin 的实现方式(使用代理)进行建模是否是一个好主意,或者最好使用更抽象的表示。

谢谢

【问题讨论】:

  • 不是 Java 人,但在我看来,您似乎是在尝试追随一些流行趋势,而不是专注于解决具体问题。
  • 我的用例描述很笼统,所以我真的不明白你怎么知道使用mixin不是一个好主意。
  • 对我来说,这听起来像是“旧瓶装新酒”(反之亦然?)。
  • 好的...您能否忽略用例,只描述一下如何表示mixin?我添加细节只是为了清楚我所说的 mixin 是什么意思。
  • 只要我明白,酒是问题,瓶子是解决方案。我可以理解这里的“新酒”,MDA 架构和代码生成器框架都试图部分定义分类器。如果需要两个上下文,则可以聚合不同上下文中实体的行为。这就是部分描述(Mixin)发挥作用的地方。我不明白的是 Thomas Killian 在这里提到的“老酒”。对我来说,Mixins 是对技术层进步带来的新问题的回应。

标签: uml mixins


【解决方案1】:

实际上在 UML 中有很多方法可以对此建模:

一种方法可以是使用<<mixin>> 或类似名称对操作和属性进行定型化,然后使用标记值来描述您从何处获取它们。

另一个(我更喜欢)是实际使用<<mixin>> 定型泛化,并附上说明应该混合哪些操作/属性。这将为实现者提供“通用类的精益实现”的指南。

最终,您可以创建 <<mixin>> 子类,其中包含要在最终类中混合的操作/道具的子集,然后从中进行泛化。

也许有人可以想出更多的解决方案。使用最适合您的方法。 UML 中没有通用的 mixin 模式(据我所知)。

【讨论】:

  • "UML 中没有通用的 mixin 模式";作为说明,有一个有充分根据的本体 UML 配置文件 OntoUML,它定义了 mixins menthor.net/ontouml.html
  • @Peter 那里有很多个人资料 :-) 感谢您的指点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2012-05-23
相关资源
最近更新 更多