Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何绘制必须是有效IP地址的UML类_String_Class_Uml_Ip Address - Fatal编程技术网

String 如何绘制必须是有效IP地址的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

我希望能够绘制利用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属性以及支持检查它的函数

如果我有一个类使用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位表示用于低级函数)
  • 可以被视为网络地址后跟本地地址
  • 有一个“地址类”,它控制网络布局和本地地址
当用户输入提供IP地址时,它应该使用点十进制编号格式

POSIX标准在点十进制字符串和internet地址之间提出了一些标准

UML类 我建议,您需要在字符串格式上添加上面提到的约束:

----------------------------------------------
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感谢您的反馈。我很高兴它有用:-)