全部学习汇总: GitHub - GreyZhang/hack_autosar: learning autosar documents, aha, very hard!

       继续学习AUTOSAR,看一下官方的文档。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_autosar

 

       7.2 变体点的聚合模式

       7.2.1 描述

       图 7.2 说明了元模型工具如何将聚合转换为具有变体信息的 M2 模型。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_1024程序员节_02

 

       在左侧,{WholeClass} 聚合了 {PartClass}。 这种聚合会发生变化:聚合可能存在也可能不存在于绑定模型中。 这通过将构造型 atpVariation 应用于关联来表示。注意左边只包含{WholeClass}、atpVariation和{PartClass},不包含判断是否存在变体的条件。 这样的条件被添加为右侧的 VariationPoint 的一部分。

       无论如何,在这里指定这样的条件是没有意义的,因为图表是在 M2 级别上的,而条件只能针对具体的变化点填写,例如在 M1 级别上。

       简而言之,转换的工作原理如下:

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_生成器_03

 

       聚合模式定义的转换

       1、{WholeClass}还是直接聚合{PartClass}。

       2. {partRole} 的重数从 {n} 变为 {n} : : : ∗。

       多重性变化的原因是包含变体的模型自然会比已经绑定变体的模型包含更多的 {PartClass} 元素。 请注意,在绑定过程中删除了“多余的”{PartClass} 元素,即“未使用的”变体。

       这由约束 [constr_2505] 指示。

       3. {PartClass} 聚合一个 VariationPoint。 如第 7.6.1 节所述,VariationPoint 聚合了有关此可变性的更多信息,尤其是绑定时间和保护变化的条件。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_生成器_04

 

       变化点是可选的

       VariationPoint 的多重性是 0 : : : 1,这意味着变化点是可选的。 如果没有给出变化点,那么从 {WholeClass} 到 {PartClass} 的聚合是不变的。 这可以被视为等价于条件总是评估为真的变化点。

       将 VariationPoint 设为可选的原因是聚合可能是变体,但不一定是变体。 因此,如果在没有可变性的上下文中使用聚合——聚合始终存在——那么就不需要向模型添加变化点(在 M1 级别)。 这有助于降低生成模型的复杂性,并修剪生成的 XML 表示。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_autosar_05

 

       绑定后的多重性

       这个有上面一个条件和结论的公式表达来说明。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_xml_06

 

       7.2.3 绑定时间

       聚合模式中的绑定时间

       在 VariationPoint 中,类 ConditionByFormula 有一个属性 bindingTime,它定义了这个变化点的最新绑定时间。 此绑定时间进一步受到附加到聚合的 UML 标记 vh.latestBindingTime 的约束,参见 [TPS_GST_00190]、[TPS_GST_00220]、[TPS_GST_00221]): ConditionByFormula.bindingTime ≤aggregation.vh.latestBindingTime。

       这确保元模型可以定义 M2 级别的限制。 实际绑定时间在 M1 级别指定(当 bindingTime 属性的值固定时)。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_xml_07

 

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_xml_08

 

       7.2.3 {PartClass} 的多重性

       表 7.1 显示了 {PartClass} 的多重性在转换过程中是如何变化的。

       多重性的变化意味着在转换之后,模型不像之前那么严格了。 在变换之前具有固定上限(或为常数)的多重性被具有无限上限的多重性取代。

       这样做的原因是我们需要提供几个可选的 {PartClass} 元素,然后选择其中的一个或多个。 因此,我们需要放宽原始的多重性——否则将无法添加额外的元素。 并且由于此时无法知道要从中选择的附加 {PartClass} 元素的数量,因此上限多重性始终为 ∗。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_1024程序员节_09

 

       7.2.4 XML 表示

       聚合模式对 M1 模型的 XML 表示的影响很小。

       事实上,当一个“正常”的聚合成为一个变化点时,唯一的区别是对应于{partRole} UML 元素的XML 元素获得了一个名为<VARIATION-POINT> 的附加XML 元素。

       由聚合模式生成的 XML 代码的示例可以在清单 7.2 中找到。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_元模型_10

 

       7.2.5 注意事项和限制

       带注释的元模型定义了适用的变化点

       如果从 {WholeClass} 到 {PartClass} 的关联被标记为 atpVariation,那么任何出现的 {PartClass} 都可以聚合一个 VariationPoint。 换句话说,{PartClass} 可能会聚合 VariationPoint,即使它不在用 atpVariation 标记的关联的末尾。

       但是,以这种方式使用变体显然与带注释的元模型中的定义不兼容。

       这种情况的一个示例是 InternalBehavior 将角色 constantMemory 中的 ParameterDataPrototype 与 atpVariation 聚合在一起。

       与此相反, PortInterface 也聚合 ParameterDataPrototype 但不聚合 atpVariation 。  XML Schema 允许在两个聚合上都有一个变体点,而带注释的元模型则不允许。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_xml_11

 

       模式生成器避免重复的 VariationPoints

       如果 {PartClass} 有一个在其他地方聚合的子类(比如 SubPartClass)(比如 AnotherWholeClass)并且这个其他聚合也用 atpVariation 标记,那么 SubPartClass 将聚合两个变化点。

       为了避免这种情况,模式生成器(即元模型工具)使用特殊的处理步骤来清理此类重复的 VariationPoints。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_xml_12

 

       原语的聚合模式

       聚合模式不能用于原始元素。 这是因为原始元素的特殊处理,如 [3] 的第 3.11 节中所定义。

       显而易见的解决方法是使元素非原语形式。

872_AUTOSAR_TPS_GenericStructureTemplate23_变体点的聚合模式_autosar_13

 

       非后期构建的限制

       如果 vh.latestBindingTime 早于 PostBuild,则 VariationPoint 不能有 PostBuild 分支,即它不能聚合 postBuildVariantCondition(参见 [constr_2517])。

       这在第 7.6.6 节中有更详细的解释。

       上面这部分是关于变体点的聚合模式的梳理,主要是讲了工具设计时候的聚合规则、转换效果以及限制因素。