全部学习汇总: https:///GreyZhang/hack_autosar
继续学习AUTOSAR,看一下官方文档。今天看通用模板部分的变体点。

7.6 VariationPoint
VariationPoint 的结构如图 7.8 所示。



这个元类代表了表达“结构变化点”的能力。 如果 swSyscond 评估为 true 并且每个 postBuildVariantCriterion 都得到满足,则变体点的容器是所选变体的一部分。

7.6.1 VariationPoint 类的结构
VariationPoint 类保存有关聚合模式(第 7.2 节)、关联模式(第 7.3 节)和属性集模式(第 7.5 节)9 中的变化点的信息。
VariationPoint 在角色 blueprintCondition 中聚合了 ConditionByFormula、PostBuildVariantCondition 和 DocumentationBlock。 这三个“分支”相互独立。 如图 7.8 中的多重性所示,它们也是可选的:
PreBuild变体点
一个变体点聚合了 ConditionByFormula,那么这个变体点就是一个 PreBuild 变体点。
有关详细信息,请参阅第 7.6.5 节。

上面是对PostBuild、蓝图阶段、组合方式的变体点介绍。最后一个比较特殊:无条件变体点。
这相当于仅 PreBuild 的变化点,其中 ConditionByFormula 具有绑定时间 systemDesignTime,并且 who's 公式的计算结果始终为 true。

变异点的多重性
在所有模式中,VariationPoint 元素的重数为 [0 : : : 1],即它是可选的。 如果省略变异点,则没有变异并且相应的元素始终存在。

在系统配置中没有 Vh.latestBindingTime 设置为 BlueprintDerivationTime 的 VariationPoints
蓝图不是系统配置的一部分。 因此,在系统配置中,元模型不应将 vh.latestBindingTime 限制为 BlueprintDerivationTime 的 VariationPoint。

如果 vh.latestBindingTime 是 BlueprintDerivationTime 那么应该只有 blueprintCondition/blueprintValue
将 vh.latestBindingTime 限制为 BlueprintDerivation 的 VariationPoints 不应具有 swSysCond 或 postbuildVariantCondition。

没有嵌套的 VariationPoint
由于 blueprintCondition 是一个 DocumentationBlock,它可以再次包含 VariationPoints,因此允许嵌套 VariationPoints。 这不是有意的,不应使用。
小结:其实蓝图部分的变体设计完全是没必要考虑的,从我接触的项目经验来看的话,基本上都是确认而非变体。

7.6.2 VariationPoint 中的 shortLabel
VariationPoint 有一个可选属性 shortLabel,它实现了变化点的名称。
VariationPoint 中的 shortLabel 必须是唯一的
shortName 和 shortLabel 的组合在下一个封闭的 Identifiable {WholeClass} 中应该是唯一的。 如果 {PartClass} 上不存在 shortName,则不需要 shortLabel。 如果 {PartClass} 的 shortName 在 {WholeClass} 的上下文中是唯一的,则 shortLabel 是不必要的。
例如,在聚合模式(第 7.2 节)中,这个封闭的 Identifiable 通常为 {WholeClass}。

变体富模型违反 [constr_2508]
根据 [TPS_GST_00097],AUTOSAR 将使用下一个封闭 Identifiable 的属性 shortName 作为唯一名称。 这不适用于变异点。究其原因,根源在于变体富 M1 模型和绑定的 M1 模型之间的差异。
变体富 M1 模型可以为一个聚合定义多个替代变体。正如术语“替代品”所暗示的那样,只有其中一个留在绑定的 M1 元模型中,但都具有相同的短名称。
因此,(尚未绑定的)变体富 M1 模型违反了 AUTOSAR 的一致性条件([constr_2508]),因为它具有多个具有相同 shortName 的元素。这是唯一可行的,因为我们要求绑定的 M1 模型(和相关代码)最终遵守这些一致性规则([constr_2503])。
[constr_2508] 被 [constr_2512] 替换为变体富模型。

有几种情况需要单独解决具有相同 shortName 的变体富 M1 模型中的变体:
变体富模型的拆分/合并
如果聚合具有构造型 atpSplitable 。 其用例是将特定变体保存在单独的工件中。 为了合并这些单独的工件,不仅需要考虑 shortName,还需要考虑 Identifiable ([constr_2512]) 的特定变体的 shortLabel。
区分 RTE 中的 codeGenerationTime Variation Points
如果绑定时间是 codeGenerationTime 或更晚,则 RTE 需要在实现 preCompileTime 可变性的情况下区分各个变体。
从外部参考变异点
通常需要从外部参考个体变异点。 例如,配置管理系统可能需要识别单个变化点以实现可追溯性。
此外,由于 shortLabel 是一个可选元素,如果它不存在,它对 XML 的大小或复杂性没有影响。

变体的短名称唯一性约束
变体元素的shortName + shortLabel 在周围Identifiable 建立的名称空间内必须是唯一的。
VariationPoint 中的 shortLabel 在技术上仅当 VariationPoints 用于在具有相同 shortName 的 Identifiable 之间切换时才需要,参见清单 F.1 和 F.3。 如果在部分模型中另外描述了那些 Identifiables,则部分模型中的 shortLabels 指示哪些元素属于一起,请参见清单 F.1 和 F.2。
如果 Identifiable 中的 shortLabel 用于改变 Identifiable 的存在而没有同等命名的替代方案,则 VariationPoint 中的 shortLabel 不是必需的,但可能存在。 如果定义了shortLabel 并且在部分模型中描述了Identifiable,则需要一致地重复shortLabel,参见清单F.2。 如果 shortLabel 未定义,则不应出现在任何部分模型中。

7.6.3 VariationPoint 中的 sdg
VariationPoint 类聚合了一个可选的 sdg 对象(参见第 4.5 节),外部软件系统可以使用该对象将特定于应用程序的数据附加到一个变化点。 例如,变体管理系统可能会向变体点添加标识符、URL 或特定分类器。
由于此类数据具有高度应用性和特定于供应商的特性,因此无法标准化,而是需要一个特殊的数据组。
此外,由于 sdg 是一个可选元素,如果它不存在,它不会影响 XML 表示的大小或复杂性。
这部分主要看了模板中的变体点,看了相关部分的类的结构以及几个其他的属性说明。关于变体点,其种类以及实现方式都是很多的,这次先看这一部分,后面针对这部分继续做相关的梳理分析。
















