UML 结构图中 C/C++ 函数指针 (fp) 的最佳表示是什么?
我正在考虑使用界面元素,即使“退化”也可能会受到最多声明一个操作的约束。
我在本文档中找到了一些建议:C 和 UML 同步用户指南,第 5.7.4 节。但这听起来很麻烦,在实践中也不是很有用。即使从非常低级别的语义角度来看也是如此。下图简要展示了他们的概念:
恕我直言,C 和 C++ 函数指针被用作接口的狭窄视图,它只提供一个函数及其签名。在 C fp 中也将用于实现更复杂的接口,声明一个包含一组函数指针的结构。
我想我什至可以设法让我的特定 UML 工具(Enterprise Architect)转发生成正确的代码,并与代码更改同步而不会造成伤害。
我的问题是:
- 将 fp 声明为 UML 中接口元素的一部分是否会提供正确的语义视图?
- 单 fp 声明应该使用什么样的构造型?至少我需要在代码中提供一个 typedef,
所以这将是我的胆量选择。(我发现这个原型是 Enterprise Architect 专有的),我需要定义一个合适的原型来适应代码生成。实际上我选择了刻板印象名称“代表”,这是否有任何含义或语义冲突? - 至于 C++,是否会在类元素中嵌套一个“委托”原型接口,足以正确表达类成员函数指针?
这是我对 C 语言表示的想法的示例图:
这是应该从上述模型生成的 C 代码:
struct Interface1;
typedef int (*CallbackFunc)(struct Interface1*);
typedef struct Interface1
{
typedef void (*func1Ptr)(struct Interface1*, int, char*);
typedef int (*func2Ptr)(struct Interface1*, char*);
typedef int (*func3Ptr)(struct Interface1*, CallbackFunc);
func1Ptr func1;
func2Ptr func2;
func3Ptr func3;
void* instance;
};
/* The following extern declarations are only dummies to satisfy code
* reverse engineering, and never should be called.
*/
extern void func1(struct Interface1* self, int p1, char* p2) = 0;
extern int func2(struct Interface1* self, char*) = 0;
extern int func3(struct Interface1* self, CallbackFunc p1) = 0;
编辑:
整个问题归结为手头的 UML 工具及其特定代码工程功能的最佳方法。因此,我添加了enterprise-architect标签。