Java 的UML建模:(2)序列图中的条件逻辑

[UML 扫盲]什么是UML? UML教程 概述 UML 是统一建模语言(Unified Modeling Language)的缩写。UML 提供了标准通用的图形化设计语言,使得在构建计算机应用时,开发团队的成员更高校直观地进行交流,用来绘制软件的蓝图。同时,UML 很好地支持面向对象的设计范式。 详情 UML 是什么? UML 是 Unified Modeling Language 的缩写,即统一建模语言或标准建模语言。1997年,由OMG 组织(Object Management Group对象管理组织)发布。目的是为开发团队 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 序列图中的条件逻辑

Granville Miller (rmiller@togethersoft.com)
顾问,TogetherSoft
2001 年 6 月

Granville 继续讨论“统一建模语言”和序列图的绘制。他仔细研究了序列图绘制过程中条件逻辑的角色,并讨论了为什么要在图中包含或排除条件和循环。Granville 还描述了序列图的两种形态 -- 常规和实例 -- 并说明了它们在开发周期中各自的应用。

我在介绍性专栏中曾经解释过,序列图用于描述系统随时间而产生的内部行为。因为系统行为是对象相互之间发送消息的结果,因此序列图绘制了那些消息在对象之间移动时的路线。 归根结底,序列图就是交互图。在前一部分中,尽管我们描述了无数交互,但只创建了一个相当简单的图。这次,我们将做进一步的研究,看看 UML 指定的序列图的两种形态。这两种形态是常规和实例。让我们从每种形态的正确应用开始。

序列图的两种类型
序列图用于描述对象之间两种不同类型的交互。一种交互类型是必须 (must) 交互,其中对象 A 必须向对象 B 发送特定消息。另一种交互类型是可能 (may) 交互,其中对象 A 可能(但不一定)向对象 B 发送特定消息。这两种形态的序列图描述了这两种不同类型的交互。常规形态描述的是必须交互,而实例形态则描述了可能交互。

常规形态的序列图描述初始刺激因素所产生的类交互。常规形态则记述了初始刺激因素能够产生的一切交互。成功和失败条件与循环、条件和分支一样,都是这种图的组成部分。

常规序列图在水平轴方向上的每个框中只包含一个类名,如图 1 所示。它的含义是,交互背后的对象是匿名的,该类的任何对象都可以参与到交互中。因此,必须为所有路径明确建模。在常规序列图中,对象 A 必须向对象 B 发送模型中的一条消息。

图 1. 常规序列图

序列图的第二种形态是实例形态。实例序列图描述了两个实例之间可能发生的单一消息交换。这样的图将在水平轴方向的框中包含一个变量名及其类类型,如图 2 所示。这种形态不包括常规形态中常见的循环、条件和分支。在系统中实际的控制流程中,在交互过程中所进行的某些断言可能为假。如果发现断言为假,实例序列图中的所有消息都为空,这种情形将不出现。实例序列图描述了可能发生也可能不发生的单一情形。

图 2. 实例序列图

实例序列图最适合于在软件开发生命周期的分析阶段对个别方案建模。常规序列图可以为包含多个方案的整个用例建模。其它一些类型的活动 -- 例如为子系统或框架与其各个部分之间使用的协议建模 -- 可以使用任何一种形态,这取决于组件在软件开发生命周期中所处的位置。与实例形态相比,常规形态更接近于在最终产品中出现的实际代码。

我们在前一专栏中使用的是常规形态,并将在此继续研究这种形态。这一次,我们将探究条件逻辑在常规序列图中所扮演的角色,通过它来让您了解有关 UML 表示的更多知识。

序列图绘制中的条件逻辑
常规序列图利用了条件逻辑,这对于描述交互过程中事件的可选流程来说很有用处。根据软件开发生命周期中所处的不同阶段,可以绘制详略度不同的图。在分析阶段,您可能愿意将详细信息排除在条件表达式以外,而在设计阶段,您却可能希望将最终产品中要使用的代码的片段包括在条件表达式中。

无论处于开发周期中的哪个阶段,随着条件表达式图的绘制,序列图与如 Java 语言这样的面向对象语言之间那种自然的一致性就愈发清楚了。例如,请考虑一个允许出纳员接受存款的银行业务应用。除了其它一些事项以外,还规定了系统必须防止出纳员把负的金额记入帐户贷方,因为这会导致从帐户中扣除。因此系统必须有一种检查键入的所有金额均为正数的机制。 清单 1 显示了确保存款为正数的条件表达式。

清单 1. 带有条件表达式的方法





/** This is a method in a Teller class **/

public void receiveDeposit(Account account, BigDecimal deposit)

throws ImproperDepositException {

       // Check to ensure the deposit is positive

       if (deposit.compareTo(new 

BigDecimal(0.0)) > 0) {

              account.credit(deposit);

       }

       else {

              throw new ImproperDepositException();

       }

}

在分析阶段,您不是很关心细节,因此图只需要表明存款为正数。在常规序列图中,条件作为带有消息名的保护机制出现,位于水平调用箭头上方。这些保护条件用方括号括起,放在消息名的左侧,如图 3 所示。

图 3. 在分析期间添加的条件

上述方法和序列图之间的关系在图 4 中显现得更为清楚,我们在图 4 中看到了在设计阶段可能用到的更明确的图。当然没有显示全部方法:缺少了 else 子句。不过,图中消息箭头的语义规定只能在条件有效时发送消息。

图 4. 更明确的条件

可以通过在 Teller 类和 ImproperDepositException 之间添加另一个调用箭头来为 else 子句建模。在这个调用上会有一个与 if 相反的条件;在本例中,即存款必须小于等于 0。您不妨自己尝试为这个语句建模。

绘制 for 循环图
如上例所示,常规序列图 -- 以及实际上所有 UML 图 -- 几乎映射了 Java 语言的语法。所以,大多数 Java 开发者对这些图都有一个直观的理解,并且可以很快地学会如何使用它们。为进一步探讨常规序列图和 Java 语言之间的一致性,我们将绘制 for 循环图,如清单 2 所示。

清单 2. for 循环





for ( int i =0; i < 4; i  ) {

        squareRoom.examineCorner(i);

}



在序列图中,迭代是通过水平箭头上消息名之前的星号 (*) 来表示的。如果迭代的次数已知并且固定 -- 这种情况非常少见 -- 这个数字出现在星号后面的方括号中。因为大多数 for 循环处理的复杂逻辑不允许静态地确定迭代次数,因此您不会经常使用这种格式的括号表示。图 5 显示了上述 for 循环的序列图。

图 5. for 循环序列图

绘制 while 循环图
因为 while 循环将循环与条件结合起来,因此它是个非常容易接受的示例。我们将对清单 3 中显示的 while 循环绘制图。

清单 3. while 循环





while ( value.notFound() ) {

        value = database.search( key );

}



我们的 while 循环图既包含条件,又包含表明迭代的星号,但您会发现,没有迭代的次数。while 循环很少包含迭代次数 -- 除非它是一个伪装的 for 循环。图 6 显示了 while 循环图。

图 6. while 循环序列图

结束语
一般来说,必须和可能行为是 UML 和软件开发的基本概念。用例捕捉必须行为;方案捕捉可能行为。 类图捕捉必须行为;实例图捕捉可能行为。 我主要讨论这一概念是因为我发现许多人没能掌握序列图的根本灵活性,而分化成直觉和形态使用这两个极端。

在阅读这些文章时,您应该把精力集中在发展模型语义的直观理解上。 随着看到越来越多的序列图并开始创建自己的序列图,您会发现许多序列图依赖于条件逻辑和图表上下文来说明图所表示的是必须还是可能的系统视图。随着我们深入到更加复杂的图表绘制技术,及早学习如何识别和使用这种差别将对您今后有所帮助。

除了探讨序列图绘制中必须和可能行为的重要性以外,我还向您介绍了如何在图中表示条件和迭代。既然您已经知道如何绘制 for 和 while 循环图,我建议您在其它 Java 构造(例如 do-while 循环)上实践一下建模表示。随着您自己练习绘制这些简单构造图,自然会逐渐加深对序列图绘制的理解。

参考资料

  • 通过单击本文顶部或底部的讨论来参与有关该文章的讨论论坛。

  • 有关“统一建模语言”和序列图绘制的介绍,请参阅本系列的第一个专栏。

  • 要了解有关 UML 和序列图绘制的详细信息,请仔细查看 Hans-Erik Eriksson 和 Magnus Penker 的 UML Toolkit (John Wiley & Sons, 1997)。

  • 另一个非常有帮助的资源是 UML in a Nutshell,由 Sinan Si Alhir 著 (O'Reilly & Associates, 1998)。

  • “UML 标准”的权威来源是 OMG 的统一建模语言规范 (Unified Modeling Language Specification)(在本文写作时是版本 1.4)。

  • 有关序列图和 UML 的其它信息,请参阅 "建立带有样式的 UML 序列图",由 Scott W. Ambler 著(developerWorks,2001 年 2 月)。

  • Allen Holub 在他有关面向对象设计过程的系列中提供了用例方案的深入说明(developerWorks,2001 年 1 月)。

  • 阅读 OCL,它是 UML 的表达式语言。

  • IBM 和其它一些业界领先者创建了 XMI,一种新的开放业界标准,它将一些基于 Web 的用于定义、确认和共享文档格式等 XML 标准的优点和 UML 的优点结合了起来。

  • 关于作者
    Granville MillerGranville 加入面向对象社区已有 13 年了。他是 高级用例建模 (Advanced Use Case Modeling)系列的合著者,并在全世界范围的各种面向对象技术会议中介绍过教程。他的面向对象开发的实践方法来自于他在多家公司供职的经验,其中包括从处于创业阶段的公司到相当成熟的软件业巨擘在内的各种公司。

    他目前正在教授有关灵活过程、方法和 Java 技术的研习班、教程和课程,同时还在辅导和帮助实现一些积极的项目。可以通过 rmiller@togethersoft.com 与 Granville 联系。

UML统一建模语言 阅读详情

相关推荐

UML精粹:统一建模语言核心详解(中英文双语版)

UML(Unified Modeling Language,统一建模语言)是一种标准化的面向对象可视化建模语言,广泛应用于软件需求分析、系统设计与架构表达。其诞生源于对复杂软件系统建模的迫切需求,1997年由OMG(Object Management Group)组织正式标准化,成为业界通用的建模工具语言。UML的核心价值在于提供了一套统一的图形化符号系统,涵盖静态结构与动态行为的多种模型图示,如类图、对象图、用例图、序列图、协作图等。

weixin_29041443的博客 1252

Java 建模: UML 工作簿:第 2 部分

Java 建模: UML 工作簿:第 2 部分 英文原文 内容: 序列图的两种类型 条件逻辑 绘制 for 循环图 绘制 while 循环图 结束语 参考资料 关于作者 对本文的评价 相关内容: ...

weixin_30788731的博客 239

如何看时序图,经典。

一份教你看懂时序图的经典之作。 看后决不后悔。我也是看这以后才完全理解时序图的。

UML之序列图

之前的类图和包图用来描述一个系统的静态特征,接下来的4种图来描述系统的行为模型,包括交互图和行为图,其中交互图又包括序列图和协作图,行为图又包括活动图和状态图,

做一个会编程的人 1623

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

告别代码移植烦恼:STM32CubeMX 6.4.0 + STM32F407ZGT6 + YT8512C PHY芯片的LWIP网络配置全攻略

本文详细介绍了如何使用STM32CubeMX 6.4.0配置STM32F407ZGT6与YT8512C PHY芯片的LWIP网络适配,包括硬件特性解析、STM32CubeMX基础配置、专用驱动适配和LWIP协议栈定制化配置,帮助开发者解决PHY芯片差异导致的网络问题。

weixin_28718793的博客 291

UML序列图总结

序列图主要用于展示对象之间交互的顺序。   序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。   消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。    序列图中涉及的元素:

ljmwork的专栏 1359

Cursor+Apifox MCP Server实战:5分钟搞定API自动化测试用例生成

本文详细介绍了如何利用Cursor IDE与Apifox MCP Server,在5分钟内将API文档自动转化为高质量的自动化测试用例。通过配置MCP Server建立数据桥梁,开发者可直接用自然语言指令,让AI基于真实接口规范生成可立即执行的pytest测试代码,大幅提升接口测试效率,特别适合快节奏的SaaS项目。

ooo22的博客 534

UML--序列图详解

序列图的基本概念 序列图(Sequence Diagram)是对象之间基于时间顺序的动态交互,它显示出了随着时间的变化对象之间是如何进行通讯的。序列图的主要用途之一是从一定程度上更加详细地描述用例表达的需求,并将其转化为进一步的更加正式层次的精细表达。 序列图的含义 序列图用于表现一个交互,该交互是一个协作中各种类元角色间的一组消息交换,侧重于强调时间顺序。 所谓交互(Interaction)是指...

吴声子夜歌的博客 2万+

QGC4.0.11界面修改

QGC4.0.11。

超维空间科技的博客 2468

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 162

Java 建模: UML 工作簿――序列图中的条件逻辑

序列图的两种类型 序列图用于描述对象之间两种不同类型的交互。一种交互类型是 必须 (must) 交互,其中对象 A 必须向对象 B 发送特定消息。另一种交互类型是 可能 (may) 交互,其中对象 A 可能(但不一定)向对象 B 发送特定消息。这两种形态的序列图描述了这两种不同类型的交互。常规形态描述的是 必须交互,而实例形态则描述了 可能交互。 常规形态的序列图描述初始刺激因素所产生的...

phoenix0619的专栏 292

uniapp [全端兼容] - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,百度智能云API实现上传录音文件并转换成文字案例(苹果安卓App、微信小程序、移动端H5网页)

uniapp对接百度智能云语音识别,uniapp中实现语音识别(app+小程序),百度语音识别录音转文字_百度智能云,uniapp使用百度语音识别语音转文字,uniapp小程序调用百度语音识别,uni-app 百度语音识别文字并展示功能,uniapp配置自定义界面百度语音识别转文字和原生使用方式,uniapp使用百度语音,uni-app语音转文字功能,使用UniApp技术实现录音并将录音转换为文字,uniapp如何实现语音输入功能功能,Uniapp集成百度智能云API实现录音转文字详细教程完整示例代码dem

🏆 前端领域优质创作者 1万+

Java 建模: UML 工作簿:第 2 部分序列图中的条件逻辑 选择自 legendinfo 的 Blog

图中的条件逻辑 Granville Miller (rmiller@togethersoft.com)顾问,TogetherSoft2001 年 6 月Granville 继续讨论“统一建模语言”和序列图的绘制。他仔细研究了序列图绘制过程中条件逻辑的角色,并讨论了为什么要在图中包含或排除条件和循环。Granville 还描述了序列图的两种形态 -- 常规和实例 -- 并说明了它们在开发周期

1104

Aurix TC3xx系列MCU DMA模块配置方法(二)

本文主要基于英飞凌Aurix TC3xx系列MCU,通过EB tresos配置工具,介绍DMA驱动模块的配置方法。

m0_38045338的博客 2851

Android 12.0 SystemUI下拉状态栏定制化之隐藏下拉通知栏布局功能实现(二)

在12.0的系统定制化开发中,由于从12.0开始SystemUI下拉状态栏和11.0的变化比较大,所以可以说需要从新分析相关的SystemUI的 布局,然后做分析来实现不同的功能,今天就开始实现关于隐藏SystemUI下拉状态栏中的通知栏布局系列二,去掉下拉状态栏中 通知栏部分 白色的圆角背景

安卓兼职framework和app工程师的博客 1636

统一建模语言——UML

统一建模语言——UML一、基本概念二、作用三、分类1 用例图2 类图3 对象图4 状态图5 活动图6 序列图(时序图)7 协作图8 构件图9 部署图(配置图)四、UML绘图工具选择: 一、基本概念 统一建模语言(Unified Modeling Language,UML)可以为面向对象系统的产品进行说明、可视化和编制文档,是一种非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。UML的本质是为了更好地交流。 二、作用 1 为软件系统建立可视化模型 基于UML的可视化模

长不大的大灰狼 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

UML 工作簿, 第 2部分――序列图中的条件逻辑(转)

序列图中的条件逻辑Granville 继续讨论“统一建模语言”和序列图的绘制。他仔细研究了序列图绘制过程中条件逻辑的角色,并讨论了为什么要在图中包含或排除条件和循环。Granville 还描述了序列图的两种形态 -- 常规和实例 -- 并说明了它们在开发周期中各自的应用。序列图用于描述系统随时间而产生的内部行为。因为系统行为是对象相互之间发送消息的结果,因此序列图绘制了那些消息在对象之间移动时的路

!Java 4310

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

UML基础:统一建模语言简介

回顾20世纪晚期--准确地说是1997年,OMG组织(Object Management Group对象管理组织)发布了统一建模语言(Unified Modeling Language,UML)。UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML提出了一套IT专业人员期待多年的统 一的标准建模符号。通过使用UML,这些人员能够阅读和交流系统架构和设计规划--就像建筑

【Java究竟怎么玩?】 3014

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

14种UML图(统一建模语言)

14种UML图(统一建模语言)

ACGkaka的博客 7849

UML建模图实战总结

一、背景 UML:Unified Modeling Language(统一建模语言),是一种绘制软件蓝图的标准语言,为面向对象开发系统的产品进行说明、可视化、和编制逻辑文档。我们在软件开发项目中,面向对象的,在程序规划、设计阶段,通过过使用 UML 的面向对象图的方式来更明确、清晰的表达项目中的架设思想、项目结构、执行顺序等一些逻辑思维 ,以帮助我们完成应用规划,设计,开发。UML 统一了Booch、OMT、OOSE和其他面向对象方法所涉及的基本概念和建模符号。下面,让我们一起看下如何使用UML来建模实践。

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1万+

Java 的UML建模:(1)序列图简介

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 547

Java程序设计——UML类图

一、定义 UML即统一建模语言(Unified Modeling Language),它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。 从定义上看可能有点抽象,说白了就是一种由图表组成的标准化建模语言,一般我们理解的语言都是由文字组成,而这种统一建模语言是由图表组成的。我们知道开发一个软件系统,不光只有程序员参与,另外还有分析师、设计

Mr_John 1万+

UML 工作簿,第 1 部分――序列图简介(转)

序列图简介Granville Miller 在其新专栏的第一部分中介绍了“统一建模语言”(UML) 的一个构件:序列图。在整个设计过程中都会用到序列图,此图用于演示系统执行时参与者与对象之间的内部交互。让我们跟着 Granville 一起创建其中一个图,我们将使用一个贷款处理应用程序作为示例。统一建模语言 (UML) 是用于建立面向对象系统模型的标准标记法。在 1995 到 1997 年之间,UM

!Java 3282

用visio画UML序列图

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34240657的博客 7008

统一建模语言(UML) 版本 2.0

所谓的“模型驱动”开发(MDD)方式,已经显示出了它们从根本性上提高软件质量和开发生产力方面的潜力。与传统的方法相比,这种方式是基于较高层次上的抽象和更好的自动化利用的。由于建模语言对MDD的成功具有关键性的作用,所以最近完成了对基于工业标准的统一建模语言(UML)的主要修订。随着一些重要的新的建模能力添加到其中――比如更精确地获得软件架构的能力――这次修订的主要特性使得语言定义更加精确,从而达到

elimago的专栏 4788
上一篇: Java:IT认证界的新贵
下一篇: 一个非常有意思的抓屏程序
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值