include and extend

Rails模块化:ActiveSupport::Concern的奥秘 本文深入探讨了Rails框架中模块化编程的核心概念,特别是ActiveSupport::Concern的机制与应用。我们通过代码示例和Rails的历史演变,展示了模块如何在不增加复杂性的情况下提供丰富的功能,以及ActiveSupport::Concern是如何解决模块包含和扩展时的链式包含问题。 阅读详情

 

对于include和extend 还是有些混淆。

虽然很多书籍和文章讲解了UML图中的include和extend区分,但多数讲的让人看了似懂非懂的,在实际运用中仍然会遇到不少困难,是否有通俗易懂的讲述了?请大家在这里交流一下,我自己先说一下我的理解:include主要是用例重用,所以通常至少有两个用例包含共同的一个用例,如:
A include B,并且C include B,角色通常只直接作用在包含另一用例的用例上,在本示例中,角色只作用在A和C上,而不会直接作用于B上,这里的B不直接面向观众,而A直接面向观众,可以看作C++的一个内部私有函数,B的存在只是为了代码重用,当然这里是指用例重用;
而extend关系角色通常同时作用在扩展和被扩展用例上,如:A extend B,则角色即会直接作用于A也会直接作用于B,在这里可以看出A和B存在一个可选关系,A和B直接面向观众,这里A和B都是C++中的一个公有函数。
 
我的理解是extend其实也是一种include,但对于extend时include含义被弱化了,假设B extend A,则B应当是包含了A的逻辑的,但对于actor来说,B和A都是两个独立的逻辑,也就是说actor选择执行A或B是可以选择的,他可以选择A或者B,但在选择B时,实际上隐含执行了A,但对于include则不一样,同样假如B include A,则actor只能执行B,则不能去选择执行A而不执行B。

 

 


以下来自另一篇文章:

 

共性: 都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。



1
 、包含(include)

 

    包含关系:使用包含(Inclusion )用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base )用例复用。基用例控制与包含用例的 关系,以及被包含用例的事件流是否会插入到基用例的事件流中。基用例可以依赖包含用例执行的结果,但是双方都不能访问对方的属性。 

   
包含关系对典型的应用就是复用,也就是定义中说的情景。但是有时当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例;相反,用例划分太细时,也可以抽象出一个基用例,来包含这些细颗粒的用例。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。  

   例如:业务中,总是存在着维护某某信息的功能,如果将它作为一个用例,那新建、编辑以及修改都要在用例详述中描述,过于复杂;如果分成新建用例、编辑用例和删除用例,则划分太细。这时包含关系可以用来理清关系。

 

2 、扩展(extend)

扩展关系:将基用例中一段相对独立并且可选的动作,用扩展(Extension )用例加以封装,再让它从基用例中声明的扩展点(Extension Point )上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。

 

 

 

对于一个扩展用例,可以在基用例上有几个扩展点。   

例如,系统中允许用户对查询的结果进行导出、打印。对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。导入、打印和查询相对独立,而且为查询添加了新行为。因此可以采用扩展关系来描述:

  

3 、泛化(generalization)

 

泛化关系:子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。 子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。

例如,业务中可能存在许多需要部门领导审批的事情,但是领导审批的流程是很相似的,这时可以做成泛化关系表示: 

 

 

 

第三个

最近上论坛,看到在争论 Use Case 中 include 与 extend 的区别。其实这两者是很容易区分的。

include 是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分(就象提取公因式一样),例如 UseCaseA 中包括了 a 和 b 两个流程,而 UseCaseC 中包含了 c 和 b 两个流程。为了提高复用性,可以把 b 提取出来,形成另一个用例 UseCaseB,此时,UseCaseA include UseCaseB(表现为一条指向 UseCaseB 的虚线,箭头在 UseCaseB 侧),UseCaseC 也 include UseCaseB。因而,当有 include 关系时,被 include 的用例通常会被两个以上的其他用例 include(否则就不需要重用,也就不需要提取出来了),用例图如下:



在 include 关系中,“UseCaseA 和 UseCaseC 知道 UseCaseB 的存在,而 UseCaseB 根本不知道有 UseCaseA 和 UseCaseC);

extend 则恰好相反。假设 UseCaseA 的功能描述为“发送一条通知”,可是,发送通知的方式可能有许多种,例如通过邮件发送、通过短信发送等。在需求分析阶段,可能无法明确到底有多少种方式,在用例分析阶段,UseCaseA 需要留出扩展接口,然后把已知的发送方式作为扩展用例给出,例如 UseCaseB 是“通过短信发送”,而 UseCaseC 是“通过邮件发送”,此时,UseCaseB 和 UseCaseC extend 了 UseCaseA,表现为两根虚线,箭头指向 UseCaseA,用例图如下:



在 extend 关系中,UseCaseA 不知道 UseCaseB 和 UseCaseC 的存在,但 UseCaseB 和 UseCaseC 却是知道 UseCaseA 并且知道如何在 UseCaseA 中作扩展的。

另:在用例图中,有时会看到两个用例之间有依赖关系(表现为一条单向或双向的实线),这是错误的,说明用例没有提纯。



也许有人会问“如果两个用例之间,一个要调用另一个时,怎么办?”(有可能是混淆了用例和模块的关系),那么,首先要区分概念,用例就是用例,用例不是模块,也不是组件(虽然一个用例能发展成为“一个或多个”模块或组件);其次,从用例分析的角度来看,如果用例 A 确实要调用到用例 B,那么,可以进一步分析:A 是调用了 B 的所有流程呢,还是其中一部分流程?
(1)如果是调用了一部分,此时可以把 B 中的那部分流程提取出来,形成用例 C,然后 A 和 B 都 include C;
(2)如果是调用了所有流程,那么,A 直接 include B 即可;
(3)如果 A 没有调用 B 中的任何流程……faint,那还画那条代表依赖的实线干嘛?

 

html引入html include_程序员:includeextends用法和区别,看了你就明白 extendsextends指继承父模板的框架,将里面的部分内容换成子模版需要的东西即可。语法:{% extends ‘public/base.html’ %}extends后面可加相对路径,也可使用变量如:page1.html:{% extends 'public/base.html' %}{% block title %}page1{% endblock %}{% block content ... 阅读详情

相关推荐

Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization)介绍

Windows平台下用例图中包含(include)、扩展(extend)和泛化(generalization)介绍

荔园微风的博客 7625

用例图中includeextend的含义

includeextend的区别

Pistachiout的学习博客 1万+

UML】用例图中IncludeExtend到底如何区分

前言: 今天在看UML中用例图的时候,发现之前总结的博客有一些理解上的问题,确实includeextend有很大的区别,今天通过深入的学习,现在已经纠正以前的错误了,接下来大家和我一起看看这二者之间到底是怎么的一种存在吧! 1、简单语言区分 1、之前《include》的学习误区 大家都知道include的中文意思是包含的意思,我最初的理解就是一个用例包含另一个用例!二者之间就是单单的包含关系就行...

李光 未来科技 4万+

UML建模之用例图(重点讲extendinclude关系)

用例图(Use Case Diagram)是整个UML9种图中最基础、最重要的一种图。为什么说它重要呢?因为用例图描述的是待开发系统的功能需求,这些功能需求是UML其它几种视图的依据和基础,其它几种图都要围绕用例图中定义的用例来建模,也可以说其它几种图都是为了实现用例图中的用例而存在的。 那么用例图都有哪几种元素组成呢? 角色(Actor

技术让梦想更有力量 1万+

Extend and Include [转]

各种关系的比较说明ExtendInclude 、 Uses第一、 必须明确uses和extendsUML1.1中的stereotypes(构造),它们在UML1.3(Rose2003中已经舍弃了uses关系)中被修订为include(代替了原有的uses)和extend;第二、 需要明确的是includeextend用于表示use cases之间的关联(associations)??依赖

享受java 1358

differences between Require, Load, Include and Extend methods

Here are the differences between Require, Load, Include and Extend methods:Include<br />When you Include a module into your class as shown below, it’s as if you took the code defined within the module and inserted it within the class, where you ‘include’ i

司建伟的专栏 540

学习用例图- Include and Extend Use Case

什么是用例图? 用例描述了一个演员和感兴趣的系统之间的一系列交互,以达到某种特定目标,并由某种触发事件引发。用例满足需求或为演员解决问题。用例图包含一组用例,可以通过从每个角色的不同角度讲述系统将如何使用的“故事”来开发。 用例图指南 确保每个用例都能满足可观察的用户目标 用例图没有显示用例的细节:它仅概括用例,参与者和系统之间的一些关系。 用例图并未显示执行步骤以实现每个用例目标...

Warren Lynch 的博客 475

Reuse in Use-Case Models: Extend, Include, and Inheritance

One of your goals during analysis is to identify potential opportunities for reuse, a goal you can work toward as ...

cuilve2432的博客 157

扩展和包含来构造用例 - Structuring Use Cases with Extend and Include

什么是用例图?用例描述了一个演员和感兴趣的系统之间的一系列交互,以达到某种特定目标,并由某种触发事件引发。用例满足需求或为演员解决问题。用例图包含一组用例,可以通过从每个角色的不同角度讲述系统将如何使用的“故事”来开发。用例图指南确保每个用例都能满足可观察的用户目标用例图没有显示用例的细节:它仅概括用例,参与者和系统之间的一些关系。用例图并未显示执行步骤以实现每个用例目标的顺序。其他与用例有关的细...

Warren Lynch 的博客 336

UMLIncludeExtend的关系

在画用例图的时候,理清用例之间的关系是重点。用例的关系有泛化(generalization)、扩展(extend)和包含(include)。其中includeextend最易混淆。接下来就针对Extendinclude来进行分析 基本概念: 扩展(extend): extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend的基

刘玉杰 点滴之笔 1万+

uml里的extendinclude_解析UML用例图中includeextend的区别

本文和大家重点讨论一下UML用例图中includeextend的区别,include是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分,而extend则恰好相反。下面请看本文详细介绍。UML用例图中includeextend的区别最近上论坛,看到在争论UseCase中includeextend的区别。其实这两者是很容易区分的。include是指用例中的包含关系,通常发生在多...

weixin_42271195的博客 1888

Ruby的includeextend

关键字: ruby rails include主要用来将一个模块插入(mix)到一个类或者其它模块。 extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。 通常引用模块有以下3种情况: 1.在类定义中引入模块,使模块中的方法成为类的实例方法 这种情况是最常见的 直接 include 即可 2.在类定义中引入模块,使模块中的方法

rocky_j2ee的专栏 6470

用例图中的extendinclude

在学习UML的时候,没有特别注意这两个小东东,是说话当时只是走马观花的看了一遍,没能记下多少东西。         后来在做机房收费系统的时候自己虽然没有注意到,但是看到其他同学的用例图中出现了这两条线,于是乎查了一下。当时感觉很简单,没什么可看的,所以只是查了大概意思,没有去深究。         这次,它竟然又来了,看来这个东西必然是重点啊!        看软考视频的时候,在用例图部分

小北 5806

includeextend关系

用例图中的额“include”和“extend”关系 最近上论坛,看到在争论 Use Case 中 includeextend 的区别。其实这两者是很容易区分的。 include 是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分(就象提取公因式一样),例如 UseCaseA 中包括了 a 和 b 两个流程,而 UseCaseC 中包含了 c 和 b 两个流程。为了提高...

chp_woAIdan的博客 820

UMLextendinclude的区别

画收费UML图时,看到下图,忽然就不明白extendinclude的区别了。 然后通过百度,了解了一下其区别。 【Extend】 中文意思是延伸,扩大。 比如A→B,如果说A延伸到了B,说明A自己也可以执行,有了B只是添加了一个新功能。 比如上图中产生的日结账单,其自身也是个完整功能。可如果用户想打印日结账单,那就得扩展一个打印的新功能。 日结账单是基用例,刷新是子用例,...

玫瑰与鹿° 1万+
上一篇: Iterative development method
下一篇: chm 的 iphone 软件 介绍及应用 转帖
charlesAFA
博客等级 码龄16年 1粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值