再看包括、扩展和泛化、继承

再看包括、扩展和泛化、继承

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

    我们知道包括和扩展是用例图中所特有的关系,而泛化和继承则不仅用于用例图,同一时候也适用于其它图,如类图。这两对概念相信对于学习面向对象中的我们来说是非常easy混淆的,非常多时候自己都不知道包括和扩展箭头究竟该指向哪里,是虚线还是实线,泛化究竟跟继承什么关系?常常为此大家争

得面红耳赤,以下我就来捋一捋(本篇博客想要表达的意思已经用红色标出,假设有什么不妥之处欢迎批评不吝赐教~)。

(1)   包括(include)关系

    当能够从两个或两个以上的用例图中提取公共行为时,应该使用包括关系来表示它们。当中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。比如,图1中的“登记外借信息”和“查询外借信息”两个用例都须要登陆,为此,能够定义一个抽象用例“用户登录”。用例“登记外借信息”和“查询外借信息”与用例“用户登录”之间的关系就是包括关系。当中<<include>>是包括关系的构造型,箭头指向抽象用例。

 再看包括、扩展和泛化、继承

    当多个用例需用使用同一段事件流时,抽象成为公共用例,能够避免在多个用例中反复地描写叙述这段事件流,也能够防止这段事件流在不同用例中的描写叙述出现不一致。当须要改动这段公共的需求时,也仅仅要改动一个用例,避免同一时候改动多个用例而产生的不一致性和反复性工作。另外,当某个用例的事件流过于复杂时,为了简化用例的描写叙述,也能够将某一段事件流抽象成为一个被包括的用例。

(2)   扩展(extend)关系

    假设一个用例明显的混合了两种或两种以上的不同场景,即依据情况可能发生多种分支,则能够将这个用例分为一个基本用例和一个或多个扩展用例,这样使描写叙述可能更加清晰。如上图中的图书管理员进行“查询书籍信息”操作时,假设发现书籍信息有误,他能够使用“改动书籍信息用例来完毕错误的改动。所以用例“查询书籍信息”和“改动书籍信息”之间的关系就是扩展关系。当中<<extend>>是扩展关系的构造型,箭头指向基本用例。

(3)   泛化和继承

    当多个用例共有一种类似的结构和行为时,能够将它们的共性抽象成为父用例,其它的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例全部的结构、行为和关系。比例如以下图中:用户注冊有多种方式,能够是“现场注冊”也能够是“网上注冊”。所以“用户注冊”用例就是“现场注冊”和“网上注冊”用例的泛化。当中三角箭头指向父用例。

再看包括、扩展和泛化、继承

而继承关系是泛化关系的反关系,也就是说子类是从父类继承的,而父类则是子类的泛化。

    从UML事物关系的本质上来看,包括关系和扩展关系都属于依赖关系(所以呢,都是虚线啦)。对包括关系而言,抽象用例中的事件流是一定会插入到基本用例中取得,而且插入点仅仅有一个。扩展用例的事件流往往能够抽象为基本用例的备选事件流,在扩展关系中,能够依据一定的条件来决定是否将扩展用例的事件流插入到基本用例的事件流中,而且插入点能够有多个。在实际应用中,非常少使用泛化关系,子用例的特殊行为都能够作为父用例中的备选事件流而存在。

    在实际工作中,要慎重选用这些关系。从上面的介绍能够看出,包括、扩展和泛化关系都会添加�用例的个数,从而添加�用例模型的复杂度。另外,一般都是在用例模型完毕之后才对它进行调整,在用例模型建立之初不必急于抽象用例之间的关系。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118821.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • L2正则化的作用(l1正则化特点)

    0正则化的作用正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L…

    2022年4月11日
  • 简易聊天系统-聊天服务

    聊天负责私人聊天,群组聊天。私人聊天接受信息后保存至数据库再转发给目标用户。群组聊天当前没有离线消息保存,也就是用户登录后无法知道多少消息未读,而是直接拉取指定数量群聊天。当有成员发送后会将聊天信息存储数据库(没有缓存进redis,因为在线用户会直接发送,目前没有这个优化必要),从redis中检索所有群组在线用户并通过消息队列发送至对应网关。大致代码如下://处理群消息funcDealGroupMsg(delivery*amqp.Delivery,transfer1*transfer)

    2022年4月4日
  • angular面试题及答案_angular面试

    angular面试题及答案_angular面试1.生命周期钩子生命周期的顺序,见下图:ngOnChanges:当组件数据绑定的输入属性发生变化是触发,该方法接收一个SimpleChanges对象,包括当前值和上一个属性值。首次调用一定发生在ngOnInit前,值得注意的是该方法仅限于对象的引用发生变化时才会触发。 ngOninit:初始化指令或组件,在angular第一次显示展示组件的绑定属性后调用,该方法只会调用一次 ng…

    2022年10月17日
  • Advanced SystemCare激活

    Advanced SystemCare激活AdvancedSystemCare6.x(x>=1)激活方案 1,请先在电脑上安装6.0版本。输入以下激活码激活:注册码:4A639-FD966-C5435-512C4[使用6.0版本用以上注册码可以激活]更多注册码CC52B-28CB1-DAF12-A96D6 65792-57FC4-5CEC1-677C4 4A639-FD966-C5435-512C

    2022年10月20日
  • 第一个项目:用python获取qq账号和密码「建议收藏」

    第一个项目:用python获取qq账号和密码「建议收藏」用python获取qq账号和密码第一个项目:用python获取qq账号和密码第一个项目:用python获取qq账号和密码2020/1/22用python获取qq账号和密码,但实际上获取的密码是加密状态的,待探索如何解秘或不多说先上代码:importrequestsimportrandomheader={‘user-agent’:’Mozilla/5.0(Linux;An…

    2022年7月20日
  • k8s实战系列: 1-再谈为什么需要Kubernetes[通俗易懂]

    k8s实战系列: 1-再谈为什么需要Kubernetes[通俗易懂]k8s系列:再谈为什么需要Kubernetes容器解决了什么?又遇到了什么问题容器,到底是怎么一回事儿?在Docker出现之前,最为流行的是PaaS项目。PaaS项目被大家接纳的一个主要原因,就是它提供了一种名叫“应用托管”的能力。像CloudFoundry这样的PaaS项目,最核心的组件就是一套应用的打包和分发机制。更好地模拟本地服务器环境,能带来更好的“上云”体验。CloudFoundry会调用操作系统的Cgroups和Namespace机制为每一个应用单独创建一

    2022年5月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号