uml - 如何表达树结构约束
问题描述
如何表示以下约束:
1 - 恰好有一个文件夹不是另一个目录的子目录。 (我无法完全理解文件夹/子文件夹主题以及如何描述文件夹系统中唯一可能的排除项)
还有一些问题来自第一个问题
2 文件夹的最高嵌套数不超过n。
3)您系统上的文件总数不能超过数量n。
4)给定系统中文件(子目录)的总数不能超过数量n。
解决方案
您的四个约束不能简单地使用多重性来表达。
在 UML 中,这些约束可以使用 OCL 编写,参见正式/2014-02-03
当然,约束可以写在类图中,例如参见正式/2017-12-05的注释符号页 37 中的图 7.14 约束。
1 - 恰好有一个文件夹不是另一个目录的子目录
一种写法是:
Folder.allInstances()->select(f | f.upfolder->isEmpty())->size() = 1
在哪里
Folder.allInstances()
返回类文件夹的实例Folder.allInstances()->select(f | f.upfolder->isEmpty())
迭代实例并返回没有上文件夹的实例Folder.allInstances()->select(f | f.upfolder->isEmpty())->size() = 1
然后检查是否有一个没有上文件夹的文件夹
2 文件夹的最高嵌套数不超过n
一种方法是定义一个计算文件夹深度的函数,然后检查所有文件夹的深度小于或等于n
context Folder
def: depth() : Integer =
if upfolder->notEmpty() then
upfolder->first().depth() + 1
else
0
Folder.allInstances()->forAll(f | f.depth() <= n)
forAll
如果条件depth() <= n
对所有元素都为真,则where为真
但它只对计算没有子文件夹的文件夹的深度有用,所以
Folder.allInstances()
->select(f | f.subfolder->isEmpty())
->forAll(f | f.depth() <= n)
3)您系统上的文件总数不能超过数量n。
4)给定系统中文件(子目录)的总数不能超过数量n。
我不明白为什么(subdirectory)
in 4也不明白为什么3说on your system
和4说,而system in 1和2a given system
什么都没有。
假设目标是检查文件总数小于或等于n并且文件夹的文件由属性file给出:
Folder.allInstances()->collect(f | f.file.size()).sum() <= n
在哪里
Folder.allInstances()->collect(f | f.file.size())
返回所有文件夹的文件数的集合Folder.allInstances()->collect(f | f.file.size()).sum()
返回文件总数
推荐阅读
- airflow - How to retry an upstream task?
- typescript - Ionic v3 与新的 StripeJS/Stripe Elements (v.7.26.0) 集成
- csv - How do I ingest data from a CSV file stored on OneDrive into a Kusto temp table?
- python - Welles Wilder 与熊猫的移动平均线
- c - Windows Socket HTTP connection in C
- javascript - Accessing Axios data (Objects)
- bash - 从 bash 中的命令输出检查 2 列的值
- mongodb - Mongo Union All 在好友表中查找某人的好友
- android - 如何保护我的移动应用程序的云数据库?
- c++ - 为什么 wxCrafter Hello World 程序不起作用?[C++, wxWidgets]