如何理解UML2.5.1(03篇)

        下面先简单列举一下subsets和redefines的特点:

        关联端点具有标识subsets表明subsets一端的对象集合是被subsets一端的对象集合的子集。此时,subsets一端的类与被subsets一端的类之间必须存在继承关系。同时,subsets一端的角色名一定与被subsets一端的角色名不同。

        关联端点具有标识redefines表明这是对被redefines的关联端点的重定义。此时,有两种情况:如果关联一端由类拥有,则redefines一端的类与被redefines一端的类之间一定有继承关系;如果关联一端由关联拥有,则redefines一端的关联与被redefines一端的关联之间一定有继承关系。同时,redefines一端的角色名一定与被redefines一端的角色名相同(当然实际上不相同也可以,但是一律设置为相同也不会有错误,并且这样还会使类图更加清晰)。

        标识subsets和redefines的作用范围是关联端点,而不是关联。因此会出现关联的两个端点之中出现不同标识的情况。

        一个特殊情况:

        如果具有继承关系的两个关联联接的是两个相同的类,则如果希望一组同一侧的关联端点之间有重定义关系,则这组关联端点必须是关联拥有,而不能是(关联所联接的)类拥有。原因也很简单,因为一个端点类内部不存在继承关系,在这种情况下,有继承关系的只能是都以此类作为一个端点的两个关联。图一中的下面两个关联之间就是这种情况;

        在继承路径上,subsets标识和redefines标识可以交替出现:

        标识subsets所修饰的角色名是其所在关联端点之前的那一个关联端点的角色名。

        证明这一点的一个例子是Figure7.5,Namespace和NamedElement之间有一个组合关联(记为Asso1)(其继承自Element的递归组合关联,记为Asso0),而Namespace和Constraint之间的组合关联(记为Asso2)则继承自Asso1,但是,Asso2两端的标记分别是{subsets namespace}和{subsets ownedMember},这是Asso1两端的角色名,而不是{subsets owner}和{subsets ownedElement},这是Asso0两端的角色名。

        标识redefines所修饰的角色名也是其所在关联端点之前的那一个关联端点的角色名。

        举个例子,假定有如下继承序列:

        B继承自A,C继承自B,D继承自C,E继承自D,F继承自E,G继承自F。它们都是一组二元关联同侧的角色名。

        此时可以有如下subsets和redefines的序列:

        B subsets A、C subsets B、D redefines C、E subsets D、F subsets E、G subsets F;

        如果一个关联Asso3的所有直接特化关联在Asso3的同侧的标记都是subsets,则Asso3此侧的标记可以包含{readOnly, union}。证明这一点的一个例子在Figure7.13和Figure8.4:

        前一个图中,Constraint和ValueSpecification之间的二元关联(记为Asso4)直接继承自上文中的Asso0,并且其两端的标记都是subsets,但是,后一个图中,IntervalConstraint和Interval之间的二元关联(记为Asso5)继承自Asso4,而Asso5两侧的标记都是redefines,这意味着两个事实:

        Asso0的标记{readOnly, union}并未受到影响;

        Asso4不可能再有标记{readOnly, union}。

        出现在关联端点处的redefines标记,有四种可能:

        P1、一对类之间的两个关联(关联拥有端点)的情况:端点(E1)由关联(A1)拥有(即A1的E1端既无实心黑点,也无导航箭头),另一个关联A2在E1一侧的端点也由A2拥有。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图一的左右两个类之间,在其中下面三个关联中,它们左侧的角色名都是templateParameter,并且最下面的关联在左侧有标记redefines templateParameter,那么这个redefines重定义的是其上两个关联中的哪个关联的左端点?观察最下面的一个关联,其右侧的标记中包含“subsets default”,而其上的两个关联中,只有紧邻其上的那个关联的右侧的角色名是“default”,因此最下面的关联继承自紧邻其上的那个关联;

        P2、一对类之间的两个关联(类拥有端点)的情况:关联(A1)的此端点(E1)由类(C1)拥有(即A1的E1端既有实心黑点,也有导航箭头,或者仅有实心黑点),另一个关联A2在E1一侧的端点也由C1拥有。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

         图一、摘自Figure7.3 Template,P1、P2的例子。

        P3、两对类之间的两个关联(关联拥有端点)的情况:端点(E1)由关联(A1)拥有(即A1的E1端既无实心黑点,也无导航箭头),另一个关联A2在E1一侧的端点也由A2拥有。重要的是:A1所联接的两个类必须要是A2所联接的两个类的子类。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图二中:

        Duration继承自ValueSpecification(见Figure8.3);

        DurationInterval继承自Interval;

        因此Duration和DurationInterval之间的两个关联(A1和A2)就重定义了ValueSpecification和Interval之间的两个关联(A3和A4)。其中A1和A2在durationInterval一侧的情况就与A3和A4在interval一侧的情况完全相同,即都是关联拥有关联端点。

        并且,这还意味着A1继承自A3,A2继承自A4。

        P4、两对类之间的两个关联(类拥有端点)的情况:关联(A1)的此端点(E1)由类(C1)拥有(即A1的E1端既有实心黑点,也有导航箭头,或者仅有实心黑点),类C2为另一个关联A2的端点类,并且A2在E1一侧的端点也由C2拥有。重要的是:A1所联接的两个类必须要是A2所联接的两个类的子类。同时,A1和A2在E1一侧可以具有相同的角色名,也可以不具有相同的角色名,这一点并不重要,重要的是redefines所重定义的角色名要与被重定义的角色名一致。

        在图二中:

        Duration继承自ValueSpecification(见Figure8.3);

        DurationInterval继承自Interval;

        因此Duration和DurationInterval之间的两个关联(A1和A2)就重定义了ValueSpecification和Interval之间的两个关联(A3和A4)。其中A1和A2在Duration一侧的情况就与A3和A4在ValueSpecification一侧的情况完全相同,即都是类拥有关联端点。

        并且,这还意味着A1继承自A3,A2继承自A4。

        图二、摘自Figure8.4,P3、P4的例子。

        标记subsets的含义比较简单,就不举例说明了。

        最后再给大家出一个曾经困扰了本人很久的问题:

        在UML2.5.1中,关联的一个端点如果由关联拥有,则只有当关联此端有{redefines}标记时,才存在关联的泛化关系。但是直觉看,关联此端有{subsets}时,说明subsets的一端的对象集合是被subsets一端的对象集合的子集,这是一种继承关系,因此关联此端有{subsets}标记才应该被看作是有关联泛化的存在。为什么UML2.5.1没有采用符合直觉的方案?

        对于这个问题欢迎大家讨论留言。

        下一篇文章将通过一个看似是Bug而实际上不是Bug的例子和一个看似不是Bug而实际上是Bug的例子来从不同的角度说明如何理解“UML2.5.1”。

参考文献:

UML2.5.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: libseccomp 2.5.1是一个开源的软件包,用于在Linux操作系统上实现系统调用过滤。它的目的是提供一种安全机制,限制应用程序对系统调用的访问,以减少可能的安全漏洞和攻击表面。 libseccomp 2.5.1使用了一种叫做“seccomp”的内核特性,该特性可以通过过滤系统调用来限制应用程序的权限。通过使用libseccomp 2.5.1,开发者可以定义一个安全策略,仅允许应用程序访问特定的系统调用,从而避免不必要或潜在危险的操作。 与其他类似的工具相比,libseccomp 2.5.1具有较为简洁和高效的设计。它提供了易于使用的API,方便开发者定义和管理系统调用策略。通过配置一组规则,开发者可以指定允许的系统调用和参数,并为其设置允许或拒绝的动作。 使用libseccomp 2.5.1可以提供一定程度的安全性,特别是在运行不受信任的应用程序时。通过限制应用程序的系统调用能力,可以减少潜在的攻击面,并提高系统的整体安全性。 总之,libseccomp 2.5.1是一个功能强大的开源软件包,它提供了一种有效的机制来限制应用程序对系统调用的访问。通过使用libseccomp 2.5.1,开发者可以增加应用程序的安全性,并减少潜在的攻击风险。 ### 回答2: libseccomp是一个开源的软件项目,旨在为Linux系统提供安全和隔离机制。libseccomp 2.5.1是libseccomp项目的一个特定版本。 libseccomp 2.5.1主要提供了一个用于开发者的用户空间库,用于与Linux内核的seccomp过滤器系统进行交互。seccomp是Linux内核中的一个子系统,用于限制进程的系统调用访问。通过seccomp,开发者可以以一种更细粒度的方式控制进程对系统调用的访问,从而提高应用程序的安全性和可靠性。 libseccomp 2.5.1版本相较于之前的版本有一些改进和升级。它修复了一些已知的问题、缺陷和漏洞,提高了整体的稳定性和安全性。该版本还引入了一些新的功能和API,使开发者可以更灵活地使用seccomp过滤器系统。 使用libseccomp 2.5.1,开发者可以通过编程方式定义和加载seccomp过滤器规则,限制进程对指定系统调用的执行。这在某些情况下很有用,例如,限制进程对敏感系统调用的访问,从而减少潜在的安全风险。libseccomp提供了一套简单直观的API,使开发者能够轻松地实现这些安全策略。 总之,libseccomp 2.5.1是一个开源项目,它提供了一种简单而有力的机制来增加Linux系统的安全性和隔离性。开发者可以使用libseccomp库与Linux内核的seccomp过滤器系统进行交互,以控制进程的系统调用访问,从而提高应用程序的安全性和可靠性。 ### 回答3: libseccomp 2.5.1 是一个开源的 Linux 库,用于实现沙盒安全机制。它通过对进程的系统调用进行过滤和限制,提供了一种保护应用程序免受恶意代码和攻击的方法。 libseccomp 2.5.1 提供了一种可编程的接口,使开发者能够指定要允许或禁止的系统调用。可以通过设置规则来限制应用程序对特定系统调用的访问,从而减少潜在的安全风险。这些规则可以基于进程的 UID、GID、基于网络的规则,或者是自定义的规则。 此外,libseccomp 2.5.1 还提供了一组默认的规则,用于限制一些常用的风险系统调用。该库还支持动态加载和卸载规则,使得管理员可以根据需要对系统调用进行实时调整。 通过使用 libseccomp 2.5.1,可以减少应用程序受到的攻击面,提高安全性。它可以防止应用程序执行危险的系统调用,避免潜在的漏洞被利用。 总之,libseccomp 2.5.1 是一个功能强大的库,为开发者提供了一个可靠的方法来实现沙盒机制,以提高应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值