我在UML活动图中建模循环.它适用于简单的条件节点(图1),但我正在寻找一种更具表现力的方式来强调循环语义.所以我来到这里和那里展示的"地区"或"可中断地区" ,但我找不到很多令人满意的例子.
我的例子是一个处理给定列表的消息的函数.一旦找到第一个有效消息,循环就会中止,然后处理消息并且函数返回true.否则,它返回false(请不要对意义或废话进行评论,这只是为了样本).
图1:使用一个好的旧活动图条件节点.顺便说一句,遵循箭头的控制流更容易,但没有"循环",只有"如果".
图2:
两个图的功能应该是等效的:


编辑:另一个实现Steph建议的图表:

我们的项目(C++,Linux,gcc,PowerPC)由几个共享库组成.在发布新版本的软件包时,只应更改那些源代码实际受影响的库."改变"是指绝对二进制身份(比较文件的校验和.不同的校验和 - >根据策略的不同版本).(我应该提到整个项目总是立即构建,无论是否有任何代码更改每个库).
通常,这可以通过隐藏包含的Header文件的私有部分而不是更改公共文件来实现.
但是,有一种情况只是delete添加到库libTableManager.so的类TableManager(在TableManager.cpp文件中!)的析构函数中,还有库libB.so的二进制/校验和(它使用类TableManager)已经改变了.
TableManager.h:
class TableManager
{
public:
TableManager();
~TableManager();
private:
int* myPtr;
}
Run Code Online (Sandbox Code Playgroud)
TableManager.cpp:
TableManager::~TableManager()
{
doSomeCleanup();
delete myPtr; // this delete has been added
}
Run Code Online (Sandbox Code Playgroud)
通过查看libB.so readelf --all libB.so,查看.dynsym部分,结果发现所有函数的长度,甚至是其他库中动态使用的函数的长度都存储在libB中!它看起来像这样(长度是第3列中的668):
527: 00000000 668 FUNC GLOBAL DEFAULT UND _ZN12TableManagerD1Ev
所以我的问题是:
由于我还没有完全理解组件图中端口和接口符号的正确用法,因此有几个问题:
I.想象一下,想要通过网络(TCP)使用非常特殊的远程记录器服务的软件.消息可以是一些XML.因此,记录器公开了一个接口,该接口指定握手,XML结构,XML元素等内容,以便记录器接受消息.
a)我认为这个接口可能被称为"ILoggerProtocol",该端口可能以它提供的服务命名("日志记录")?
b)因此,我的应用程序中的组件实现了该接口,以便为服务器生成兼容的消息?
c)现在一个有趣的事情:对于通信,有一个额外的库"网络"提供简单的TCP东西,所以它做TCP连接,发送消息,处理错误等.当我只想强调时,我需要这个类吗?从生成的消息到服务器的方式?那么MY端口是TCP接口吗?
d)当我想绘制完整的图片时,如何正确地将网络组件添加到图表中,指出使用了ILoggerProtocol并且它通过网络组件通过TCP?
II.我的应用程序中的端口:现在有两个库,其中一个只使用另一个; 基本上,在C/C++中,它会#include对方的头文件:
e)这是正确的图表吗?
f)我在这里需要端口吗?如果是的话,它们实际上代表什么呢?你会给他们什么名字?
g)或者棒棒糖在没有端口符号的情况下是否足够?
III.关于棒棒糖:
h)那两个符号基本相同且可以互换吗?我找到了组合版本的名称"assembly",所以也许有区别......
当我单击Word 2010中的复选框时,我想运行宏.
请注意,我既不想要"Legacy Forms"复选框也不想要"ActiveX"复选框!它们只能在一些"受保护的文档模式"下工作并且看起来很难看,但是我想要在编写文档时可以选择和取消选择的新文件,这对我来说看起来更好.
我知道,使用遗留表单,您可以在输入表单元素时直接插入宏,而在离开表单元素时可以直接插入宏,您可以在VBA中捕获事件,如
Sub CheckboxXY_Click()
Run Code Online (Sandbox Code Playgroud)
但这对Word 2010复选框不起作用,即使我给它们描述和标记名称.
重复:这些是我想要使用的形式(以防万一有人建议我使用Legacy的形式):

这就是它们在文档中的样子(鼠标悬停):

我不敢相信我是第一个试过这个的人......