OOAD例子
OOAD设计模式
![OOAD设计模式](https://img.taocdn.com/s3/m/7574d49151e79b896802260f.png)
1、M VC模式
MVC模式就是边界、控制、处理三者相结合而形成的一种设计模式,其中涉及到的设计类包括边界类(V)、控制类(C)、实体类(M)。
在利用MVC 模式来设计软件系统时,对于每一个的用例都能够找到三个这样的类,他们的结构形式如下:
View:1、用户输入数据2、用于显示结果
Controller:从view接收数据,调用Model方法,将操作结果返回给view Model:处理数据
2、中介者模式
中介者封装了对象之间的交互,当多个对象分别于另外的多个对象之间进行自由的交互式,可能导致他们之间的耦合度变得更加的高,但是对于一个系统来说往往希望高内聚、低耦合。
所以就设计一个中介者来代替一些对象与另外的对象进行交互。
其结构形式如下:
这种设计模式简化了对象之间的交互复杂度,从而使得系统结构更加清晰明了。
3、外观模式
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
其结构形式如下:
外观模式往往在本系统设计的较为零散时,为了方便系统的扩展或者使用维护而增加了统一的接口以此来减少系统的复杂性。
面向对象分析与设计--OOAD
![面向对象分析与设计--OOAD](https://img.taocdn.com/s3/m/b64b6bc959f5f61fb7360b4c2e3f5727a5e924e1.png)
⾯向对象分析与设计--OOAD(,)是当前界关⼼的重点,它是90年代⽅法的主流。
⾯向的概念和应⽤已超越了和开发,扩展到很宽的范围。
如、交互式界⾯、应⽤结构、应⽤平台、分布式系统、⽹络管理结构、CAD技术、等领域。
谈到⾯向对象,这⽅⾯的⽂章⾮常多。
但是,明确地给出对象的定义或说明对象的定义的⾮常少——⾄少我现在还没有发现。
其初,“⾯向对象”是专指在设计中采⽤封装、继承、抽象等设计⽅法。
可是,这个定义显然不能再适合现在情况。
⾯向对象的思想已经涉及到软件开发的各个⽅⾯。
如,⾯向对象的分析(, Oriented Analysis),⾯向对象的设计(,Object Oriented Design)、以及我们经常说的⾯向对象的编程实现(,)。
许多有关⾯向对象的⽂章都只是讲述在⾯向对象的开发中所需要注意的问题或所采⽤的⽐较好的设计⽅法。
看这些⽂章只有真正懂得什么是对象,什么是⾯向对象,才能最⼤程度地对⾃⼰有所裨益。
这⼀点,恐怕对初学者甚⾄是从事相关⼯作多年的⼈员也会对它们的概念模糊不清。
⾯向对象是当前计算机界关⼼的重点,它是90年代软件开发⽅法的主流。
⾯向对象的概念和应⽤已超越了程序设计和软件开发,扩展到很宽的范围。
如系统、交互式界⾯、应⽤结构、应⽤平台、分布式系统、⽹络管理结构、CAD技术、⼈⼯智能等领域。
⼀、传统开发⽅法存在问题1.软件重⽤性差重⽤性是指同⼀事物不经修改或稍加修改就可多次重复使⽤的性质。
软件重⽤性是追求的⽬标之⼀。
2.软件可维护性差软件⼯程强调软件的可维护性,强调⽂档资料的重要性,规定最终的软件产品应该由完整、⼀致的配置成分组成。
在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。
实践证明,⽤传统⽅法开发出来的软件,维护时其费⽤和成本仍然很⾼,其原因是可修改性差,维护困难,导致可维护性差。
3.开发出的软件不能满⾜⽤户需要⽤传统的开发⼤型涉及各种不同领域的知识,在开发模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满⾜⽤户的需要。
OOAD总结
![OOAD总结](https://img.taocdn.com/s3/m/1d1cd818964bcf84b9d57b54.png)
第一章1、什么是分析与设计?1、分析强调对问题和需求的调查研究2、设计强调的是满足需求的概念上的解决方案2、什么是面向对象分析与设计?1、在面向对象分析过程中,强调的是在问题领域内发现和描述对象(或概念)2、在面对对象设计过程中,强调的是定义软件对象以及它们如何协作以实现需求。
3、简单示例:1、定义用例(use case)需求分析可能包括人们如何使用应用的情节或场景,这些情节或场景可以被编写成用例。
2、定义领域模型(domain model)面向对象分析的结果可以表示为领域模型,在领域模型中展示重要的领域概念或对象。
需要注意的是,领域模型并不是对软件对象的描述,它使真实世界领域中的概念和想象可视化。
(也被称为概念领域模型—conceptual object model)3、定义交互图关注的是软件对象的定义—它们的职责和协作。
顺序图(sequence diagram)是描述协作的常见方法。
它展示对象之间的信息流,和由消息引起的方法调用。
4、定义设计类图除了在交互图中显示对象协作的动态视图外,还可以用设计类图(design class diagram)来有效的表示类定义的静态视图。
这样可以描述类的属性和方法。
与领域模型表示的是真实世界的类,设计类图表示的是软件类要注意的是,尽管设计类图不同于领域模型,但是其中的某些类名和内容还是相似的。
第二章1、什么是UML?统一建模语言(UML)是描述、构造和文档化系统制品的可视化语言。
UML表示法的基础是UML元模型,它描述建模元素的语义,UML元模型对模型驱动架构(Model Driven Architecture, MDA)CASE工具供应商具有影响。
开发者并不需要对其进行学习。
2、三种UML应用方式1、UML作为草图—非正式的、不完整的图,借助可视化语言的功能,用于探讨问题或解决方案空间的负责部分。
2、UML作为蓝图—相对详细的设计图。
用于:①逆向工程;②代码生成。
OOAD 第1讲 OOAD引论和用例模型
![OOAD 第1讲 OOAD引论和用例模型](https://img.taocdn.com/s3/m/fc87347931b765ce05081492.png)
10
1.3
• •
什么是分析和设计?
需求分析 - 对需求的调查研究 对象分析 - 对领域对象的调查研究
• 分析强调的是对问题和需求的调查研究(What?)
• 设计强调的是一个能满足需求的(概念上的)解决方案(How?)
1.4
• •
什么是 OOAD?
问题领域指的是需要开发的软件系统的背景领域 问题领域随着软件系统的不同而不同
25
迭代式和进化式的生命周期
1 2 3 4 5 ... 20
requirements workshops Imagine this will ultimately be a 20iteration project. In evolutionary iterative development, the requirements evolve over a set of the early iterations, through a series of requirements workshops (for example). Perhaps after four iterations and workshops, 90% of the requirements are defined and refined. Nevertheless, only 10% of the software is built.
迭代进化和敏捷目标定义统一过程中的基本概念22引论统一过程up是综合了当前最佳实践经验的一种流行的迭代开发方法风险驱动23瀑布生命周期的本质缺陷是软件工程早期采用的一种生命周期模型早期?手工作坊?式软件开发方式遭遇?软件危机?借鉴其它工程行业如建筑行业成功经验采用确定需求完成设计再予以实现的?线性?模型瀑布生命周期没有考虑软件开发的独特之处多变是软件开发的独特特实际数据表明项目规模越大变化的比例越大1015202530354010100100010000projectsizefunctionpoints各种规模软件项目的变更百分比24通过迭代使系统向用户的真实需求收敛earlyiterationsfartherfromtruepathsystemviafeedbacksystemconvergestowardsmostappropriaterequirementslateiterationssignificantchangecanoccur
1-OOAD详解
![1-OOAD详解](https://img.taocdn.com/s3/m/29f0272e7375a417866f8fcf.png)
学习目标:●理解与掌握面向对象的概念与方法;●使用UML;●完成面向对象的分析与设计工作;●了解OO的设计原则及一些典型的设计模式。
什么是面向对象●面向对象(Object-orientation,简称OO)是一种系统建模技术;●面向对象编程(object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的过程;●通过分析系统内对象的交互来描述或建模一个系统●交互的对象最终以类的形式组织●OO的方法由三部分组成⏹过程⏹标识⏹规则对象●是一个客观存在的、唯一的实体●是面向对象编程过程中分析与解决问题的出发点与基础●拥有自己的标识、数据与行为●可以简单或复杂●可以抽象或具体●在OOP中是一个类的动态实例●如Student ------ id, name, age (attributes)------- setName, getName, countScore (methods)类●类是对象的模板●对象通过类实例化产生●一个类可以创建多个对象OOADOOAD(Object Orient Analysis & Design)是根据OO的方法学,对软件系统进行分析和设计的过程。
――OOA分析阶段――OOD设计阶段OOAD方法要求在设计中要映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。
这就需要设计要尽可能地接近现实世界,即以最自然的方式表述实体。
所以面向对象技术的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为为模式。
OOA阶段分析阶段主要解决以下问题1.建立针对业务问题域的清晰视图2.列出系统必须要完成的核心任务3.针对问题域建立公共词汇表4.列出针对此问题域的最佳解决方法此阶段要解决的核心问题是“what to do?”主要解决用户想做什么――》传递给程序员,明白要做什么这里就存在一个问题,客户知道的,程序员就不一定知道,在此阶段就要分析这个问题。
面向对象分析和设计方法的实践应用
![面向对象分析和设计方法的实践应用](https://img.taocdn.com/s3/m/c9648a16f11dc281e53a580216fc700aba685255.png)
面向对象分析和设计方法的实践应用面向对象分析和设计方法(OOAD),是一种以对象为基础的软件开发方法。
通过面向对象的思想,将软件系统中的各个部分进行抽象化,并通过类与对象的关系构建软件系统的模型。
其主要的思想是将软件系统中的各个部分看作是对象,通过这些对象能够互相沟通与交互。
凭借其严密的实践应用,OOAD已成为日常软件开发中的事实标准。
1. OOAD的基本流程OOAD有自己的基本流程,其主要步骤包括需求捕捉、面向对象的域分析、面向对象的设计、面向对象的编程和测试。
通过这些步骤,软件开发人员可以有效地完成一个软件系统的开发过程。
2. OOAD在实践中的应用在实际的软件开发中,OOAD可以应用于各个方面。
例如,在设计一个可靠的银行账户管理系统时,SOAD就是一个非常实用的面向对象分析和设计模型。
该模型能够在一个对象模型中把系统中所有的角色和过程进行抽象化,并为每个角色和过程分配隶属关系。
这种模型可以帮助开发人员完成系统的编码和维护,同时也可以为银行的人员提供一个清晰的管理界面。
另一个例子是利用OOAD来设计制造业中的产品。
在这一领域,OOAD可以帮助设计人员创建一个稳固的产品模型。
通过这个模型,他们可以快速及准确地观察制造过程的各个方面,并对过程进行调整,确保这个模型最终能够成为一个理想的产品。
与此同时,这种模型也可以为制造企业提供支持,并协助其在全球市场上快速发展。
3. OOAD的优势与挑战虽然OOAD已经成为了软件开发的标准,但其仍然存在着一些挑战和缺陷。
其中最大的挑战之一便是如何确保开发人员始终保持该方法的高标准。
虽然OOAD可在企业中发挥强有力的作用,但开发人员必须始终处于高度专业的状态,才能充分利用OOAD的优势。
管理者也应该为此提供必要的支持,以确保接到的项目能够高效完成。
OCAD最大的优势在于其对软件开发过程的理解与体现。
其通过有效的面向对象的思想,将加速整个软件开发过程。
此外,它可以帮助开发人员更快地实现整体性能的调整和模型的优化。
OOAD_需求分析那些事儿【2012】
![OOAD_需求分析那些事儿【2012】](https://img.taocdn.com/s3/m/93d63d8aa0116c175f0e4816.png)
忐忑
希望有所帮助
什么是需求分析?
交流讨论 我的认识
需求分析难在哪里?
交流讨论 我的认识
一起看一个例子
需求分析的几个关键因素
总结
请大家发表自己的看法
没有软件,也就没什么需求。 要确切了解需求分析的本质,我们还需要知道软件的本质 软件的本质是什么?
咱们公司需求分析这个工作并不存在什么大的障碍!
做好需求分析关键是保持良好的心态,而做
到何种程度要看把控细节的能力。 能多做一点就继续往前走一步;能做到一百 分就一定不停留在九十九分。
Q&A 谢谢大家!
需求分析 就是在分析用户提出的需求基础上,给 他们合适的建议,以帮助用户提高。
理解客户现时的需求,其内心真正想要的。 考虑其未来的变化
需求分析 的结果 – 软件需求说明书 – 是开发人员在 计算机世界重新构建 现实世界(抽象的,优化的) 的唯一依据。
需求无小事,力求详细
站在客户立场,一切为了客户;不考虑开发人员、 不考虑实现技术。
高于客户
大家发表意见!
什么是需求分析?
交流讨论 我的认识 交流讨论 我的认识
需求分析难在哪里?
一起看一个例子
需求分析的几个关键因素
需求分析人员
必须
首先
站在客户立场上 其次 有长远眼光,尽力为客户提出有价值 的建议
需求分析人员
不能
站在开发人员立场上
考虑实现的问题
面向对象分析与设计方法的研究及应用
![面向对象分析与设计方法的研究及应用](https://img.taocdn.com/s3/m/b93327259a6648d7c1c708a1284ac850ac020475.png)
面向对象分析与设计方法的研究及应用面向对象分析与设计方法(Object-Oriented Analysis and Design,简称OOAD)是一种常用于软件开发中的方法论,它通过对现实世界中的事物进行分析和建模,最终得到系统的需求和设计方案。
本文将从OOAD的概念、历史发展、所涉及的方法及其应用等方面进行论述。
一、OOAD的概念OOAD最初由Grady Booch、James Rumbaugh、Ivar Jacobson等人提出,旨在解决膨胀复杂的软件系统开发所带来的问题。
与传统的结构化分析和设计相比,OOAD更加关注系统中各个部分之间的交互关系和耦合程度,强调对象的概念,将系统视为一系列相互作用的对象集合。
二、OOAD的历史发展OOAD的发展可以追溯到20世纪60年代。
早期,软件需求和设计常使用结构化分析和设计,但是随着软件的复杂性不断提高,结构化方法已经无法适应日益增长的需求。
在20世纪80年代,Grady Booch等人提出了面向对象分析法(OOA) ,用于定义和组织系统中各个对象的行为和特性。
接着James Rumbaugh提出了面向对象设计(OOD) ,为面向对象编程提供了更加精细的设计工具。
最后,Ivar Jacobson提出了用例驱动的面向对象分析和设计(UML) ,提供了一种通用的OOAD方法,并成为当前应用最广泛的OOAD标准之一。
三、涉及的方法与应用OOAD包括四个步骤:需求分析、对象分析、设计和实现。
在需求分析阶段,开发团队与客户合作制定系统的需求说明,梳理出系统所涉及的业务实体,把它们抽象成对象以及他们的关系。
在对象分析阶段,开发团队对所识别的对象进行更深层次的分析,合理地划分系统的对象层次结构。
在设计阶段,指将对象属性和方法转化为代码,根据需求进行系统设计,并将其分解为可以开发的具体任务。
在实现阶段,则是根据设计阶段的成果,编码实现系统功能。
除此之外,为保障系统质量,还需要进行测试、集成、部署等工作。
OOAD
![OOAD](https://img.taocdn.com/s3/m/964f486148d7c1c708a14536.png)
1
*
Student_ Course:
Course: C1
*
1
C2 C3
储存边的信息 sc,即 维护一条边的两端, 让 Student 或 Course 维护边就可以了。
意义在于不存在于多对多了,化解为两个一对多关联。
四、UML:
两大分类: A. 静态建模——描述系统有什么
用例图、类图、对象图、组件图、部署图
继承(is a) 对象 关系 关联 依赖 (use a)
以下关注一个难点: 如何化解多对多关系? Student: s1 Liucy s2 Huxz s3 Bailu s1(c1,c2,c3) s2(c1,c3) s3(c1,c2) Course: C++ Java EJB
一般聚合 聚合 (has a) 组合
OOAD 与 UML
---------author:Lujianyu
一、基本内容:
OOA/D 面向对象的分析与设计。 方法论、哲学; 架构师、项目经理、设计人员 OOA——Object Oriented Analysis 面向对象的分析,以业务为中心来分析解决问题,不涉及求解方案。 (问题空间) OOD——Object Oriented Design 面向对象的设计,计算机世界来体现现实世界。 (解空间) UML——统一建模语言。 是一种图形化的语言, 它可以帮助我们在 OOAD 过程中标识元素 、 构建模块、分析过程并可通过文档说明系统中的重要细节。 (外企注重 UML) 面向对象的好处: 让分析阶段和设计阶段平滑地过渡。 可以用解决日常问题的思路来解决计 算机世界的问题。
B. 动态建模——描述系统的行为,具备时间顺序
时序图、协作图、状态图、活动图 静态建模
OOAD-设计模式(一)概述
![OOAD-设计模式(一)概述](https://img.taocdn.com/s3/m/50a2b6e480c758f5f61fb7360b4c2e3f572725d7.png)
OOAD-设计模式(⼀)概述前⾔ 在我们很多时候设计代码都是需要⽤到各种不⼀样的设计模式的,接下来着⼏篇给⼤家领略⼀下设计模式。
知道设计模式的作⽤,以及在代码的具体体现。
很多时候我们看不懂代码就是因为我们不知道它使⽤的设计模式。
国庆的我很痛苦,学习是痛苦的,成长是快乐的!⼀、什么是⾯向对象1)⾯向对象(Object-Orientation,简称OO)是⼀种系统建模技术/编程思想。
2)⾯向对象编程(Object-Orientation Programming,简称OOP)是按照OO的⽅法学来开发程序的编程⽅式3)⾯向对象分析⽅法 Object-Oriented Analysis,简称OOA分析阶段主要解决以下问题:建⽴针对业务问题域的清晰视图列出系统必须要完成的核⼼任务针对问题域建⽴公共词汇表列出针对此问题域的最佳解决⽅案此阶段要解决的核⼼问题是"what to do?"4)⾯向对象设计Object-Oriented Design, 简称OOD设计阶段主要解决以下问题:如何解决具体的业务问题引⼊系统⼯作所需的各⽅⾯的⽀持元素定义系统的实现策略 此阶段要解决的核⼼问题是"How to do?"5)OO: ⾯向对象,是⼀套集编程思想,⽅法,原则,模式,解决⽅案等为⼀体的编程模式。
OO的思想贯穿于整个软件开发的过程,⽐如需求分析,设计,编程,测试,升级等。
综上可以知道什么是OOAD?OOAD(Object Oriented Analysis Design,的分析和设计,)是现代软件企业⼴为采⽤的⼀项有效技术。
OOAD⽅法要求在设计中要映射现实世界中指定中的对象和实体,例如:顾客、汽车和销售⼈员等。
这就需要设计要尽可能地接近现实世界,即以最⾃然的⽅式表述实体。
所以的优点即为能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和⾏为为模式。
⼆、⾯向对象的特点2.1、抽象 抽象就是将⼀些事物的共性和相似点抽离出来,并将这些属性归为⼀个类,这个类只考虑这些事物的共性和相似之处,并且会忽略与当前业务和⽬标⽆关的那些⽅⾯,只将注意⼒集中在与当前⽬标有关的⽅⾯。
OOAD实验一
![OOAD实验一](https://img.taocdn.com/s3/m/9aae93027cd184254b3535c3.png)
自动售货机用况图
自动售货机
消费者通过投币选取货物;
供货员通过巡查售货机看售货机中的货物是否达到最低限定,若是,则供货,在此过程中,他需要开关售货机;
取款员定期从售货机中取出售款,在此过程中,他需要开关售货机。
123063用况图
12306订票系统
进入:用户进入此系统时,若已有账号,则只需登录,否则需要先注册。
车票查询:进行车票查询时有两种选择:余票查询和车次查询,用户可根据需要进行查询。
车票预订:用户可进行车票预订。
我的12306:在此选项中,包含用户自己的基本信息以及用户的订单。
在订单选项中,用户可进行火车票订单的查询,退票以及改签。
什么是OOAD?什么是UML?
![什么是OOAD?什么是UML?](https://img.taocdn.com/s3/m/96253653326c1eb91a37f111f18583d049640f39.png)
什么是OOAD?什么是UML?OOAD什么是OOAD?⾯向对象的分析与设计,使⽤⾯向对象的思想对⼀个系统的分析与设计UML:什么是UML?统⼀的建模语⾔,什么是建模?将客观事物图形化,⽐如盖楼房,⾸先要把地基打好统⼀指的是什么?在计算机领域有很多的图形语⾔,这样就需要⼀个标准,UML就是这样的⼀个标准,建模就是将需求⽤图的⽅式表达出来UML的组成:1.元素:⾓⾊,⽤例2.图形3.扩展机制:扩展基本元素功能的机制图形分类:静态图,动态图静态图:类图(描述类与类之间关系的图),对象图,部署图(拓扑结构),组件图,⽤例图(从客户的⾓度来描述系统的整个功能)动态图:协作图(按空间的交互图),序列图(时序图,描述多个对象按时间的交互过程),活动图(描述业务流程,也能做⼀个操作的建模),状态图(描述单个的对象,或者是单个的⼦系统的状态变化)类图:类图,描述类与类之间关系的图例⼦:图书管理系统1.利⽤OO的思想找对象:如:图书管理员,借书⼈,库存管理⼈员,书籍等等2.把他们抽象出来:找到与业务有关系的对象和对象的属性3.形成类,画出类图来4.实例并建⽴实例间的通讯类之间的关系:1.继承2.实现3.关联4.依赖5.聚合6.组合什么是关联?类的属性使⽤的是另⼀个类的引⽤或者是对象什么是依赖?除了属性,其他地⽅使⽤了另⼀个类的对象,引⽤,属性,⽅法就叫A类依赖B类/*** 知识点:* 关联* 程序⽬标:* java⽂件说明:* A.java* B.java* Test.java:* 让A和B关联起来,让A类调⽤B类的⽅法,让B类使⽤A类的⽅法*/package MY.module01.leitu.guanlian;public class Test {public static void test(){A a=new A();B b=new B();a.setB(b);b.setA(a);a.getB().bf();b.getA().af();}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubTest.test();}}package MY.module01.leitu.guanlian;public class A {private B b;public A() {super();// TODO Auto-generated constructor stub }public A(B b) {super();// TODO Auto-generated constructor stub this.b = b;}public B getB() {return b;}public void setB(B b) {this.b = b;}public void af(){System.out.println("A's af()");}}package MY.module01.leitu.guanlian;public class B {private A a;public B() {super();// TODO Auto-generated constructor stub }public B(A a) {super();// TODO Auto-generated constructor stub this.a = a;}public A getA() {return a;}public void setA(A a) {this.a = a;}public void bf(){System.out.println("B's bf()");}}/*** 知识点:* 依赖的三种情况* 程序⽬标:* java⽂件:* A.java* B.java* ⼀个类的⽅法去使⽤另⼀个类的元素*/package MY.module01.leitu.yilai;public class A {public void a1(B b){int rst=b.add(1,2);System.out.println(rst);}public void a2(){B b=new B();int rst=b.add(1,2);System.out.println(rst);}public void a3(){int rst=B.add2(10,20);System.out.println(rst);}public static void main(String[] args) {// TODO Auto-generated method stubA a=new A();a.a1(new B());a.a2();a.a3();}}package MY.module01.leitu.yilai;public class B {public int add(int i,int j){return i+j;}public static int add2(int i,int j){return i+j;}}什么是聚合?⽐如说同学聚会,有很多的同学聚集在⼀起,但是,缺少⼏个也没有什么关系什么是组合?⽐如说⼈,有⼼脏,肝,肺,组成为⼀个⼈,如果少了其中的⼀部分,就会死掉,谁也离不开谁静态图:⽤例图从客户的⾓度来描述系统的整个过程组成:⾓⾊,⽤例,关联⾓⾊之间的关系:继承关系,依赖关系例如:客户是⼀个⾓⾊,客户分为⼤客户,⼩客户,这是继承关系借书⼈和图书管理员就是依赖关系⽤例的关系:包含,扩展关系例如:借书功能:登陆,查询等,这个是包含静态图:部署图整个系统的软硬件拓扑结构如:CPU,eclipes等静态图:组件图表⽰物理的实现,实现指的是代码,这个⽤的少动态图:序列图按时间的先后顺序描述对象之间的交互/*** 知识点:* 模拟序列图的执⾏* 程序⽬标:* java⽂件:* Client.java:调⽤MainController类的⽅法* MainController.java:这个⽅法中调⽤了Service类的⽅法* Service.java:这个类的⽅法调⽤了另⼀个类的⽅法* DAO.java:这个类的⽅法调⽤⾃⾝的⼀个⽅法,这叫反⾝消息 */package MY.module01.leitu.xulietu;public class Client {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubMainController m=new MainController();m.f();}}package MY.module01.leitu.xulietu;public class MainController {public void f(){Service s=new Service();s.f();}}package MY.module01.leitu.xulietu;public class Service {public void f(){DAO d=new DAO();d.genName();}}package MY.module01.leitu.xulietu;public class DAO {public void genName(){System.out.println("hello");f();}private void f(){System.out.println("dao's shi fan shen");}}动态图:活动图可以有分之的判断动态图:状态图可以看到对象的状态变化设计模式:为什么要设计?1.软件的复⽤2.软件的维护开闭原则:对⾼层的修改关闭,对低层的扩展开放模板⽅法:它实现了开闭原则/*** 知识点:* 开-闭原则:模板⽅法* 程序⽬标:* java⽂件:* CET6.java:⾼层的逻辑,只开发了给低层⽤的⽅法,听,说* ConcretCET6.java:这⾥来实现听,说* TestCET6.java*/package MY.module01.sjms.kbyz;public class TestCET6 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubCET6 c=new ConcretCET6();c.passCET6();}}package MY.module01.sjms.kbyz;public abstract class CET6 {//⾼层业务逻辑public final void passCET6(){listen();say();}//提供给低层实现的业务abstract protected void listen();abstract protected void say();}package MY.module01.sjms.kbyz;public class ConcretCET6 extends CET6{@Overrideprotected void listen() {// TODO Auto-generated method stubSystem.out.println("listen");}@Overrideprotected void say() {// TODO Auto-generated method stubSystem.out.println("say");}}⾥⽒代换原则:任何⽗类适⽤的地⽅,⼦类⼀定适⽤,⼦类可以当⽗类⽤策略模式:实现了⾥⽒代换原则,解决了可选算法的问题什么是策略模式?针对共同的问题,提供解决⽅案或指导原则或好坏结果/*** 知识点:* ⾥⽒代换原则:策略模式* 程序⽬标:* 打折的例⼦,涉及到可选算法的问题* java⽂件:* Context.java:打折的⽅法和设置折扣的⽅法,和DisCount为关联关系 * 这⾥体现了⾥⽒代换原则,⼦类当⽗类⽤* DisCount.java:打折算法抽象类* dis1.java:打折算法1* dis2.java:打折算法2* Client.java:1.设置折扣率,2.打折*/package MY.module01.sjms.celuemoshi;public class Client {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubContext c=new Context();//算法选择器// c.setD(new dis2());c.setD(new dis1());//选择折扣c.getprice(100);//打折}}package MY.module01.sjms.celuemoshi;public class Context {private DisCount d;public void setD(DisCount d) {this.d = d;}public void getprice(double price){System.out.println(d.discout(price));}}package MY.module01.sjms.celuemoshi;public class dis1 extends DisCount{@Overridepublic double discout(double price) {// TODO Auto-generated method stubreturn price*0.8;}}package MY.module01.sjms.celuemoshi;public class dis2 extends DisCount{@Overridepublic double discout(double price) {// TODO Auto-generated method stubreturn price;}}package MY.module01.sjms.celuemoshi;public abstract class DisCount {public abstract double discout(double price);}依赖倒转原则:什么是依赖倒转原则?要依赖抽象,不要依赖具体实现这句话是什么意思呢?抽象指的是什么?具体实现指的⼜是什么?谁要依赖抽象?⼀个程序要按照⾼层的设计思路来实现具体的程序功能,抽象就是⾼层,具体实现就是为了完成⾼层的⼀个⽬标⽽写的程序代码,⾼层就是战略,低层是战术,⾼层是整体⽬标,低层是⽬标的实现,⾼层是思想,低层是⾏为什么是倒转?这个名字的含义是什么?以往的过程式编程注重的是具体的功能实现⽅法,也就是低层,它决定了⾼层,这样是不合理的,所以要将这个错误的⽅式扭转过来,取名叫依赖倒转原则三种依赖(耦合)关系的种类:零耦合:不可能具体耦合:具体的类和类之间的联系抽象耦合:⾼层抽象类与类之间的联系如何实现依赖倒转原则呢?三种模式:第⼀,⼯⼚⽅法模式第⼆,模板⽅法模式第三,迭代⼦模式接⼝隔离原则:使⽤多个专门的接⼝要⽐使⽤⼀个总的接⼝要好⽐如:⼈类(接⼝) 学⽣(具体类) ⽼师(具体类) 学⽣⽼师类(具体类):这个类要想拥有学⽣和⽼师的⽅法就很⿇烦了,所以,需要再添加两个接⼝,学⽣接⼝和⽼师接⼝组合聚合复⽤原则:CARP将其他对象的功能融合到新的对象⾥,如果其中⼀个对象死掉了,另⼀个对象也不能⽤了,那么这种情况叫组合,反之,叫聚合/*** 知识点:* 依赖关系,组合聚合复⽤,⾥⽒代换原则结合这是聚合* 程序⽬标:* 例⼦:⼈学习技能* People.java:⼈具体类* Actor.java:技能类接⼝* Student.java:技能类具体类学习⽅法* Teacher.java:技能类具体类教书⽅法* Test.java:让⼈具备学习和教书的⽅法,并使⽤这些能⼒*/package MY.module01.sjms.CARP.t1;public class Test {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubActor a=new Student();Actor b=new Teacher();People p=new People();p.studyJineng(a);p.studyJineng(b);eJineng();}}package MY.module01.sjms.CARP.t1;public interface Actor {void jineng();}package MY.module01.sjms.CARP.t1;public class Teacher implements Actor{public void jineng() {// TODO Auto-generated method stubSystem.out.println("theach....");}}package MY.module01.sjms.CARP.t1;public class Student implements Actor{public void jineng() {// TODO Auto-generated method stubSystem.out.println("study..");}}package MY.module01.sjms.CARP.t1;import java.util.ArrayList;import java.util.List;public class People {private String name;private int age;private List<Actor>list;public People(){list=new ArrayList<Actor>();}public void studyJineng(Actor a){list.add(a);}public void useJineng(){for(Actor a:list){a.jineng();}}}迪⽶特法则(LoD):最少知识原则:1.尽量减少耦合:类与类之间的访问减少,利⽤的资源少些2.对远程对象的访问最好⽤粗粒度接⼝来实现3.不要和陌⽣⼈说话,只和直接认识的⼈联系就好了什么是远程对象?什么是粗粒度接⼝?这个远程对象系统外的对象 ,如果有⼀个朋友圈和⼀些陌⽣⼈,陌⽣⼈就属于系统外的对象,就是远程对象,其中有⼀个⼈是这个朋友圈的同时也认识这些陌⽣⼈,那么如果朋友圈中的其他⼈想与陌⽣⼈联系,需要通过他来实现,这个他就是门⾯对象 ,这个对象需要通过⼀个接⼝来实现,⽽且这个接⼝设计的要和这个对象合适/** 知识点:* 迪⽶特法则(最少知识原则):门⾯模式* 程序⽬标:* Computer.java:看成远程对象* Lamp.java:看成远程对象* Office.java:看成远程对象* People.java:⼈,看成朋友圈* WorkOffFacade.java:门⾯对象*/package MY.module01.sjms.Lod.t1;public class People {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubWorkOffFacade w=new WorkOffFacade();w.closeWorkOff();}}package MY.module01.sjms.Lod.t1;//门⾯对象public class WorkOffFacade {public void closeWorkOff(){new Computer().closeComputer();new Lamp().closeLamp();new Office().closeOther();}}package MY.module01.sjms.Lod.t1;public class Computer {public void closeComputer(){System.out.println("closeComputer");}}package MY.module01.sjms.Lod.t1;public class Lamp {public void closeLamp(){System.out.println("closeLamp"); }}package MY.module01.sjms.Lod.t1;//相当于远程对象public class Office {public void closeOther(){System.out.println("closeOther"); }}。
面向对象分析与设计
![面向对象分析与设计](https://img.taocdn.com/s3/m/754ea0b6f80f76c66137ee06eff9aef8941e48b1.png)
面向对象分析与设计一、引言面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是软件工程中的一种方法论,用于解决复杂系统的设计与开发问题。
本文将介绍面向对象分析与设计的概念、原则和过程,并结合实际案例说明其重要性和应用。
二、概念解析1. 面向对象分析(Object-Oriented Analysis,简称OOA):通过识别和描述系统所涉及的对象及其相互关系,以及对象的属性和行为,从而确定系统需求和问题领域的分析方法。
2. 面向对象设计(Object-Oriented Design,简称OOD):基于面向对象分析的结果,通过定义类、抽象数据类型、方法、接口等概念,设计出系统的结构和组织,以及类之间的关系和交互方式。
三、面向对象分析与设计的原则1. 单一职责原则(Single Responsibility Principle,简称SRP):一个类只负责一项职责,保证类的内聚性和高内聚性。
2. 开放封闭原则(Open-Closed Principle,简称OCP):系统中的类、模块等应该对拓展开放,对修改封闭,通过继承、接口等方式实现。
3. 里氏替换原则(Liskov Substitution Principle,简称LSP):所有引用基类的地方必须能透明地使用其子类的对象,即子类必须能够替换基类。
4. 依赖倒置原则(Dependency Inversion Principle,简称DIP):高层模块不应该依赖于底层模块,二者都应该依赖于抽象;抽象不应该依赖于具体,具体应该依赖于抽象。
5. 接口隔离原则(Interface Segregation Principle,简称ISP):客户端不应该依赖于它不需要的接口,接口应该进行细化拆分以适应不同的场景和客户端需求。
6. 迪米特法则(Law of Demeter,简称LoD):一个对象应该对其他对象有尽可能少的了解,减少耦合性,降低系统的复杂度。
OOAD(面向对象的建模与设计)
![OOAD(面向对象的建模与设计)](https://img.taocdn.com/s3/m/e706fa5f3b3567ec102d8a4a.png)
27
• 并行执行 (标签 par)
用水平虚线把交互区域分割为几个分区。每个分 区表示一个并发计算。当控制进入交互区域时并发地 执行所有分区。在并行分区都执行完毕后,那么该并 行操作符标识的交互区域也就执行完毕。每个分区内 的消息是顺序执行的。需要指出的是,并发并不总是 意味着物理上的同时执行。并发其实是说两个动作没 有协作关系,而且可按任意次序发生。如果它们是独 立的动作,那么它们还可以交叠。
18
激活
激活表示一个对象直接或 通过从属例程执行的一个行 为的时期。即表示了行为执 行的持续时间,也表示了活 动和它的调用者之间的控制 关系。 用一个狭窄的矩形框表示 激活,矩形的顶端和它的开 始时刻对齐,末端和它的结 束时刻对齐。 在程序控制流中,激活符 号的顶端画在进入的箭头的 尖端,底端画在返回的箭头 的尾部。 当一个对象处于激活期时, 该对象能够响应或发送消息, 执行对象或活动。 当一个对象不处于激活期 时,它不做事情但存在。
8
• 消息在UML中有以下几种动作:
– 调用(call)。调用某个对象的一个操作。对 象也可以给自己发送消息,引起本地的操作调 用。 – 返回(return)。给调用者返回一个值。 – 发送(send)。向对象发送一个信号。 – 创建(create)。创建一个对象。 – 撤销(destory)。撤销一个对象。对象也可以 撤销自身。
9
10
• 建模中最常见一种消息的就是调用:一个 对象调用另一个对象(或同一个对象)上 的操作。 • 并不是任何操作都可以调用:一个调用的 操作必须是在被调用上的类中定义的,而 且它还必须对调用者是可见的。
11
• 序列
– 当一个对象向另一个对象发送消息,接收对象可能会 接着对另一个对象发送消息,这个对象有可能发送消 息给下一个不同的对象,依次下去,这个消息流形成 了一个序列。 – 一个不间断的系统,只要它在其上运动的结点没有关 闭,就会一直执行。 – 消息是按照时间顺序排列的。UML中在每个消息的前 面加上一个用冒号隔开的序列号作为前缀。
OOA、OOD和UML
![OOA、OOD和UML](https://img.taocdn.com/s3/m/f1d1f4ba1a37f111f1855bc4.png)
2021/4/15
12
C++中的面向对象特性
继承
相对于结构化编程中 的模块重用,面向对 象中的继承体系显得 更灵活,对代码的控 制手段更多,从而推 动了代码复用的程度, 但却加大了学习掌握 的难度。
2021/4/15
13
C++中的面向对象特性
多态
同名的函数,参数个数不同
Programmers Software management
Process View
System Integrators Performance Scalability Throughput
Deployment View
System Engineering System topology
Delivery, installation communication
2021/4/15
54
设计过程(四)---数据结构
Struct VS Class
1. 结构化编程时代:
程序=数据结构+算法
2. 面向对象软件时代:
软件=对象+对象之间的关系
2021/4/15
55
数据结构设计结果
2021/4/15
56
设计过程(五)---数据对象的 管理?
OO软件的显著特点之一是如何管理对象
OOA、OOD和UML
面向对象技术的C++ OOD实践
2021/4/15
1
主要内容
OOA、OOD与UML基础 Rose如何介入软件开发的全过程 案例:编写一个自己的简化版WinZip 案例:设计自己的事件驱动系统 案例:将缓冲池思想应用于数据集 案例:三层杂志社管理软件系统设计
面向对象分析设计案例
![面向对象分析设计案例](https://img.taocdn.com/s3/m/25683e603069a45177232f60ddccda38376be1d3.png)
面向对象分析设计案例在软件开发领域,面向对象分析设计(OOAD)是一种常用的方法论,它将系统看作是一组对象的集合,这些对象之间通过消息传递进行通信和协作。
本文将以一个简单的图书馆管理系统为例,介绍面向对象分析设计的基本概念和流程。
首先,我们需要明确系统的需求和业务场景。
图书馆管理系统主要包括图书管理、读者管理、借阅管理等功能。
在面向对象分析阶段,我们需要识别系统中的各种对象,并分析它们之间的关系和行为。
在这个案例中,我们可以识别出图书、读者、图书管理员、借阅记录等对象。
接下来,我们需要对每个对象进行分析,包括属性和方法的识别。
以图书对象为例,它可能包括书名、作者、出版社、ISBN号等属性,而方法可能包括借阅、归还等操作。
通过对每个对象的分析,我们可以建立起对象模型,明确对象之间的关系和交互方式。
在面向对象设计阶段,我们需要将对象模型转化为类和接口,定义类的属性和方法,以及类之间的继承和关联关系。
在图书馆管理系统中,我们可以定义图书类、读者类、图书管理员类等,通过继承和接口实现来建立它们之间的关系。
同时,我们还需要设计相应的界面和交互逻辑,确保系统能够满足用户的需求。
除此之外,面向对象分析设计还强调系统的可扩展性和可维护性。
在设计阶段,我们需要考虑到未来可能的变化和扩展,尽量降低系统的耦合度,提高系统的灵活性和可重用性。
在图书馆管理系统中,我们可以通过设计插件机制和扩展接口,来支持新的业务需求和功能扩展。
总的来说,面向对象分析设计是一种强调抽象、模块化和分层的方法论,它能够帮助我们理清系统的结构和功能,提高系统的设计质量和开发效率。
通过本文的案例介绍,相信读者对面向对象分析设计有了更深入的理解,能够在实际项目中更好地应用这一方法论。
OOAD
![OOAD](https://img.taocdn.com/s3/m/187e0ad233d4b14e852468f2.png)
• “这并不是我的错!我从来不知道你需要处理这种情况。我 现在正忙着做一个新的性能检测系统,并且还要处理职员系 统的一些需求变更请求” • “我还有别的事。我只可能在月底前修改好,一周内不行, 很抱歉。下次若有类似情况,请早一些告诉我并把它们写下 来。 ” • “那我怎么跟达赖说呢?”玛利亚追问道, “如果她不能 支付账单,那她只能挂帐了。 ” • “玛利亚,你要明白,这不是我的过错。 ”彼得坚持道, “如果你一开始就告诉我,你要能随时改变某个人的名字, 那这些都不会发生。因此你不能因我未猜出你的想法(需求) 就责备我。 ” • 玛利亚不得不愤怒地屈从: “好吧,好吧,这种烦人的事 使我恨死计算机系统了。 • 等你修改好了,马上打电话告诉我,行吧?”
• “当然是这样,我从没想过谁会莫名其妙地更改自己的姓 名。我不记得你曾告诉我系统需要处理这样的事情,这就 是为什么你们只能在改变婚姻状况对话框中才能进入更改 姓名的对话框。 ”彼得说。 • 玛利亚说: “我想你当然知道每个人只要愿意都可以随 时合法更改他(她)们的姓名。但不管怎样,我们希望在 下周五之前解决这个问题,否则,达赖将不能支付她的账 单。你能在此前修改好这个错误吗?“
面向对象的分析与设计
OOAD
Object Oriented Analysis and Design
面向对象编程概述
• 面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之 间的相互作用。 • 面向对象编程与面向过程编程的区别 – 过程化程序设计先确定算法,再确定数据结 构;面向对象编程先确定数据结构,再确定 运算。它是程序决定数据。 – 面向过程的编程,是先建立数据结构,然后 定义存放数据的方法(函数)来操作数据。 它是数据决定程序。
OOAD_Lec06_从分析到设计6
![OOAD_Lec06_从分析到设计6](https://img.taocdn.com/s3/m/93be7bda534de518964bcf84b9d528ea81c72fcd.png)
Object Oriented Analysis & Design面向对象分析与设计Lecture_06 从分析到设计⏹2、高质量的“用例描述”⏹一些用例写作的指导⏹参考:2018年5月19日讯,在“清华名师教学讲坛”上,校长邱勇宣布,将在2018级新生中开设《写作与沟通》必修课程⏹用例描述,关注参与者的目标,而不是实现界面这类细节⏹1)洞察“the goal of the goal”⏹Example,“Log on”,收银员在想着GUI,dialog box,user ID,andpassword⏹但这是一种实现机制,不是目标,目标是验证收银员的身份⏹系统分析师得出”与实现机制无关”的目标⏹“能够标识我的身份,并得到授权”⏹或者更高的目标“能够防止小偷非法进入…"⏹2)描述事物本质essential style,与用户界面无关⏹例如,用例“Manage Users”⏹1、管理员标识自己的身份Administrator identifies self⏹2、系统对此身份进行认证System authenticates identity…⏹针对这种描述,今后的设计可以非常灵活⏹生物信息读取\GUI、指纹识别等⏹3)比较另一种描述:具体化风格Concrete Style⏹…⏹1、管理员在对话框中输入ID和密码(见图3)⏹2、系统对管理员进行认证⏹3、系统显示“编辑用户”窗口(见图4)⏹…⏹这种方式可以用, 但尽量不要在需求分析的早期! 为什么?2.2 用例描写要简洁⏹有人喜欢阅读大量的需求吗?⏹例如,保险公司的合同文本⏹用例描述应该“用词简洁”⏹“系统认证…” 、“这个系统认证… ”哪个简洁?2.3 把用例视作“黑盒”⏹“黑盒”用例描述Black-Box Use Cases⏹通过职责来描述用例,不描述系统内部是如何工作的、内部有哪些构件等do not describe the internal workings of the system, its components, or design⏹即,描述系统应该完成那些功能,但不去描述系统是如何完成这些功能的⏹例如Black-box style NotThe system records the sale The system writes the sale to a database. …or (even worse):The system generates a SQL INSERT statement for the sale…2.4 从参与者及其目标的角度进行描述⏹根据用例的定义⏹系统执行一系列动作,产生对参与者有价值的结果⏹关注系统的参与者来编写需求,询问他们的目标和典型场景⏹聚焦于如何理解参与者的“有价值的结果”,而不是开发人员认为的“价值”用例: Play Monopoly Game⏹Scope:Monopoly application⏹Level:user goal⏹Primary Actor:Observer⏹Stakeholders and Interests:⏹-Observer:Wants to easily observe the output of the game simulation⏹Main Success Scenario:⏹ 1.Observer requests new game initialization,enters number of players⏹ 2.Observer starts play⏹ 3.System displays game trace for next player move(see domain rules,and"gametrace"in glossary for trace details)⏹Repeat step3until a winner or Observer cancels⏹Extensions:⏹*a.At any time,System fails:⏹(To support recovery,System logs after each completed move)⏹ 1.Observer restarts System⏹ 2.System detects prior failure,reconstructs state,and prompts to continue⏹ 3.Observer chooses to continue(from last completed player turn)⏹Special Requirements:⏹-Provide both graphical and text trace modes小结用例描述⏹用例描述很重要、也很难⏹“口袋技能”、“软技能”⏹文字表达能力⏹沟通交流能力⏹领域问题的理解能力⏹归纳、抽象能力⏹写作态度⏹错别字⏹句子⏹标点符号⏹请同学们务必常练、多练、用心练本讲结束。
ooda的应用例子
![ooda的应用例子](https://img.taocdn.com/s3/m/1fd0b20a30126edb6f1aff00bed5b9f3f80f7241.png)
ooda的应用例子OODA(观察、定向、决策、行动)是一种决策和行动的循环过程,可以应用于各种领域。
以下是十个基于OODA循环的应用例子:1. 军事战略:在军事战略中,OODA循环被广泛应用。
通过观察敌方行动、定向自己的目标、做出决策并采取行动,军事指挥官可以快速适应变化的战场环境,并在战争中取得优势。
2. 危机管理:在危机管理中,OODA循环可用于快速响应和解决各种紧急情况。
通过不断观察、定向、决策和行动,危机管理团队可以及时发现和应对危机,减少损失并保护人员安全。
3. 企业战略:企业战略制定过程中,OODA循环可以帮助企业领导层快速识别市场机会和竞争威胁,制定相应的战略决策,并快速执行以适应不断变化的市场环境。
4. 产品开发:在产品开发过程中,OODA循环可以帮助团队及时了解用户需求和竞争产品的动态,快速做出调整和决策,并迅速推出更新和改进的产品。
5. 项目管理:在项目管理中,OODA循环可用于快速识别项目风险和问题,制定相应的解决方案,并迅速采取行动以确保项目进度和质量。
6. 运营管理:在运营管理中,OODA循环可用于持续观察和分析运营数据,定向业务目标和策略,做出相应的决策并采取行动以提高运营效率和业务结果。
7. 个人生活:OODA循环也可以应用于个人生活。
例如,在制定个人目标和规划行动步骤时,可以先观察和分析自身情况和外部环境,定向自己的目标并制定相应的计划,然后逐步执行并不断调整以实现目标。
8. 创新和创业:在创新和创业过程中,OODA循环可用于快速试验和验证新想法和商业模式。
通过观察市场反馈、定向产品定位、做出相应决策并快速迭代产品,创业者可以快速适应市场需求并提供有竞争力的解决方案。
9. 教育教学:在教育教学中,OODA循环可以帮助教师及时观察和评估学生的学习情况,定向教学目标和方法,做出相应的教学决策并采取行动以提高学生的学习效果。
10. 体育竞技:在体育竞技中,OODA循环可以帮助运动员和教练员快速观察和分析对手的动作和策略,定向自己的竞技目标和策略,做出相应的决策并采取行动以取得竞技优势。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.从需求到业务用例图
OOA&D的第一步,就是了解用户需求,并将其转换为业务用例图。
我们的CMS系统需求非常简单,大致课做如下描述:这个系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布新闻。
任何人可以浏览新闻,浏览者可以注册成为系统会员,注册后可对新闻进行评论。
管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。
通过以上需求描述,我们画出如下的业务用例图:
这里要注意三点:
1.业务用例是仅从系统业务角度关注的用例,而不是具体系统的用例。
它描述的是“该实现什么业务”,而不是“系统该提供什么操作”。
例如,在实际系统中,“登录”肯定要作为一个用例,但是这是软件系统中的操作,而用户所关注的业务是不包含“登录”的。
2.业务用例仅包含客户“感兴趣”的内容。
3.业务用例所有的用例名应该让客户能看懂,如果某个用例的名字客户看不懂什么意思,它也许就不适合作为业务用例。
2.从业务用例图到活动图
完成了业务用例图后,我们要为每一个业务用例绘制一幅活动图。
活动图描述了这个业务用例中,用户可能会进行的操作序列。
活动图有个很重要的使命:从业务用例分析出系统用例。
例如,下面是“新闻管理”的活动图:
可以看到,一个“新闻管理”这个业务用例,分解出N多系统操作。
这里要特别注意这些操作,其中很多“活动”都很可能是一个系统用例(当然,不是每个都是)。
例如,由这个活动图可以看出,系统中至少要包含以下备选系统用例:登录、注销登录、查看新闻列表、修改新闻、删除新闻。
这样,将每个业务用例都绘制出相应的活动图,再将其中的“活动”整合,就得出所有备选系统用例。
3.从活动图到系统用例图
找出所有的备选系统用例后,我们要对他们进行合并和筛选。
合并就是将相同的用例合并成一个,筛选就是将不符合系统用例条件的备选用例去掉。
一个系统用例应该是实际使用系统的用户所进行的一个操作,例如,“查看新闻列表”就不能算一个系统用例,因为他只是某系统用例的一个序列项。
最终我们得出的系统用例图如下:
4.从系统用例图到用例规约
得出系统用例图后,我们应该对每一个系统用例给出用例规约。
关于用例规约,没有一个通用的格式,大家可以按照习惯的格式进行编写。
对用例规约唯一的要求就是“清晰易懂”。
下面给出“登录”这个系统用例的一个规约:
5.绘制业务领域类图
完成了上面几步,下面应该是绘制业务领域类图了。
所谓业务领域类图要描述一下三点:
1.系统中有哪些实体。
2.这些实体能做什么操作。
3.实体间的关系。
这里要特别强调:这里的实体不是Actor,而是Actor使用系统时使用的所调用的实体,是处在系统边界之内的实体。
例如,管理员就没有作为一个实体出现在这里,因为管理员处在系统边界之外,它所有的工作都可以通过调用这三个类的方法完成。
并且,这里的“注册会员”实体也不是刚才用例图中注册会员这个Actor,而是作为一个系统内的业务实体,供Actor们使用的。
例如,其中的注册功能是给注册会员这个Actor使用,而移除则是给管理员这个Actor使用的。
理解以上这段话非常重要,经常看到由于混淆了实体和Actor的关系而导致画出的领域类图不准确或职责分配不准确。
大家可能还注意到,我们这里没有给出每个实体的属性。
其实,在领域分析阶段,实体的属性并不重要,重要的是找出实体的操作。
6.设计实现类图
以上这几步,就是分析的过程。
而下面的步骤就是设计了。
设计没有分析那么好描述,因为分析是“客户面”,它只关心系统本身的功能和业务,而不关心任何和计算机有关的东西。
但是,设计和平台、语言、开发模型等内容关系紧密,因而很难找出一个一致的过程。
但是,一般在设计过程中实现类图是要绘制的。
实现类图和领域类图不一样,它描述的是真正系统的静态结构,是和最后的代码完全一致的。
因此,它和平台关系密切,必须准确给出系统中的实体类、控制类、界面类、接口等元素以及其中的关系。
因此,实现类图是很复杂的,而且是平台技术有关的。
所以,我在这里不可能给出一个准确的实现类图,不过为了描述,我还是给出一个简化了的实现类图,当然,它是不准确的,而只是从形式上给出实现类图的样子。
我们假设这个系统建构于.NET 3.5平台上,并且使用 MVC作为表示层,整体使用三层架构。
那么,用户模块体系的实现类图大体是这样子(不准确):
7.绘制序列图
有了静态结构,我们还要给出动态结构,这样,才能看清系统间的类是如何交互的,从而有效帮助程序员进行编码工作。
上图给出的是用户登录的序列图。
首先注册会员作为Actor,调用UserController的Login 方法启动序列,然后序列按图示步骤执行。
其中UserServices作为业务组件,首先调用数据访问组件的GetByName确定用户是否存在,如果存在,再调用GetByNameAndPassword确定输入密码是否是此用户的密码。
从而完成业务功能。
要注意,序列图在实际中是很多的,几乎每个类方法都配有相应的序列图。
8.后面的步骤
在完成了上面的过程后,就可以进行编码、调试、测试等工作了。
但这些已经超出了本文讨论的范围。