UML模板中TemplateParameter占位符名称存储及C++实现问询
我正试图理解UML对模板的规范定义。在多数编程语言中,未绑定具体类型的模板参数会用占位符字符串表示,例如List<T>或Map<K,V>中的T、K或V。
UML中正式的TemplateParameter会暴露一个或多个ParameterableElement,且归属于其TemplateSignature。但我未发现ParameterableElement具备可让建模者存储自定义占位符名称的属性——比如无法将模板命名为List<NodeType>或List<MyStrangeAndWonderfulThing>这类形式。
按逻辑来看,TemplateParameter或ParameterableElement的抽象接口中似乎应具备一个可被TemplateSignature访问的name属性(或操作),但TemplateParameter与ParameterableElement均直接继承自无此接口的Element。
在UML 2.5.1规范第68页的7.3.4节「符号表示」中,关于模板签名有如下说明:
形式化TemplateParameter列表可显示为逗号分隔的列表,或每行一个形式化TemplateParameter。TemplateParameter的通用表示法是模板的TemplateParameter列表内显示的字符串: <template-parameter> ::= <template-param-name> [‘:’ <parameter-kind> ] [‘=’ <default>] 其中<parameter-kind>是被暴露元素的元类名称。 <template-param-name>和<default>的语法取决于该TemplateParameter对应的ParameteredElement类型。
这段的最后一句值得重点重读。
换言之,符合规范的UML C++实现是否必须先对ParameterableElement的指针或引用执行繁琐的dynamic_cast才能获取占位符名称?问题在于,当模板未绑定到具体类型时,我们尚不清楚要转换为何种类型;而创建绑定时,我们需要知晓对应的名称(尤其是同一占位符可能被多次使用的情况)。
这是否与Ed Willink在2017年提出的UML问题UMLR-741相关?
内容的提问来源于stack exchange,提问作者Robert Hairgrove

