String 如何绘制必须是有效IP地址的UML类
我希望能够绘制利用IPv4地址的代码的UML图。它们通常只是一个字符串,但必须以非常特定的方式创建才能有效。以下是其中一个的正则表达式:String 如何绘制必须是有效IP地址的UML类,string,class,uml,ip-address,String,Class,Uml,Ip Address,我希望能够绘制利用IPv4地址的代码的UML图。它们通常只是一个字符串,但必须以非常特定的方式创建才能有效。以下是其中一个的正则表达式: \b(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)。 (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\. (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\. (25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\b 我不确定如何定义ipaddr
\b(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)。
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\b
我不确定如何定义ipaddr属性以及支持检查它的函数
如果我有一个类使用ipaddr做了一些事情,比如创建一个套接字,我会有这样的东西
--------------------------------------------
SocketCreator
--------------------------------------------
socket: Socket
ipaddr: str # This is what needs to change
--------------------------------------------
create_connection(socket:Socket)
--------------------------------------------
也许有这样的东西
------------------------------------------
IpAddrV4: String
------------------------------------------
string: String[0-3]=<0-255>+String[4-7]=<0-255>+String[8-11]=<0-255>+String[12-15]=<0-255>
------------------------------------------
IPADRV4:字符串
------------------------------------------
字符串:字符串[0-3]=+字符串[4-7]=+字符串[8-11]=+字符串[12-15]=
如果您对UML语法感兴趣
如果您想在UML中表达一些条件、限制或不变量,可以使用。然后,约束在大括号{…}
之间用自然语言或中文表达
可以在属性旁边使用属性约束:
------------------------------------------
IpAddrV4
------------------------------------------
Address: String { matching regex '...' }
或者,您可以使用更一般的类约束,将约束写在注释框中,并用虚线连接到相关类:
{ inv: Address matching regex ... }
据我所知,OCL规范不提供对正则表达式的本机支持。但根据这一点,有些方言(如日食)确实如此
如果你想从你的模型中得到更多
你的建模方法中隐藏的问题是什么?
您的问题集中在IPv4地址的可能实现上。您假设它是一个需要符合特定约束的字符串,并且您的模型泄漏了这个假设
但是,您真的只对IPv4地址作为字符串的特定表示感兴趣吗?或者你是否对地址的真实内容以及你能用它做些什么感兴趣?在后一种情况下,这个类的行为是什么
我担心,使用您当前的方法,您有可能最终得到一个UML模型,该模型只是将您当前的代码转录成图形表示。然后,您可能无法享受真实模型所能提供的全部好处,例如抽象、封装和关注点分离
什么是IPv4地址
回到根目录,似乎IP地址:
- 由四个八位字节组成,因此为32位(此32位表示用于低级函数)李>
- 可以被视为网络地址后跟本地地址李>
- 有一个“地址类”,它控制网络布局和本地地址
----------------------------------------------
IpAddrV4
----------------------------------------------
-address: Integer //UInt32 in fact
----------------------------------------------
+IPAddrV4()
+IPAddrV4(Address: String)
+GetAddress() : String
+GetBinaryAddress(): Integer //UInt32 in fact
+GetAddressClass(): String //Char in reality
----------------------------------------------
最后一句话
如果这听起来很粗鲁,我很抱歉。但2019年设计IPv4应用程序听起来既奇怪又不完整。抽象的优点是,它可以让您设计一个更通用的地址,该地址能够处理IPv6格式和内部结构 正则表达式是一个约束,您可以将其应用于一个名为“IpAddress”的类型。@muszeo这只是一个简单的答案。发帖吧……我从你那里看到了更好的答案。在回答中提问似乎不合适。为什么不先通过评论来澄清呢?@ThomasKilian首先,谢谢你的夸奖;-)现在仔细阅读我的问题,你会发现他们的意图只是提出建模方法中的一个问题。根据我的结论,您将了解为什么将IP地址视为某种与正则表达式匹配的字符串会限制设计的未来发展。我理解您不同意并投反对票,因为我不只是提供一个UML答案来显示约束文档。但我真的想解决设计问题,帮助OP思考更大的问题。是的,我已经读了你的答案。和往常一样详细。然而,在这里,我认为穆斯佐的评论才是真正的答案。不管怎么说,对于你的大部分答案,请继续关注好的答案:-)我还认为OP很可能会从中吸取一些教训,并最终以一张赞成票来弥补。@ThomasKilian Ok!谢谢我编辑了答案,让OP可以选择一个答案,该答案仅限于他/她明确要求的UML主题,以及关于建模问题的更一般的建议。@Interlooper感谢您的反馈。我很高兴它有用:-)