UML(Unified Modeling Language)统一建模语言-----第一节

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处。 https://blog.csdn.net/weixin_39885282/article/details/81161208

统一建模语言(不同图的表示法)
类图
领域模型(分析模型)
交互图(顺序图和协作图)
UML活动图
UML状态图
GRASP:(软件职责分配,任何多于两个类程序,每个类中写哪些方法,两个对象之间如何交互)与GOF(设计模型);

UML是什么?
标准定义:统一建模语言是描述、构造和文档化系统制品的可视化语言;是一个庞大的图形化表示法体系
1、是一种用面向对象(OOA/D)方法进行分析设计用于软件开发的工具;
        隐藏在后面的是一种面向对象的想法,重要的是OOAD
2、表达我们想法的工具(首先要有想法)
3、学习各种表示法(用不同的图形来描述)
4、是一个文档化的东西,把想法用某种方式固定下来
5、用UML实际上就是写文档(用图形)
与编程语言之间的某些东西是可以直接映射的但是不把它当成编程语言;

UML不是什么?
UML不是OOA/D,也不是方法,仅仅是一种图形表示法
如果不掌握对象思想,那么UML或任何case工具将毫无意义
需要一种用于OOA/D的语言,即是一种思考的工具,也是一种沟通的形式,因此将在OOAD中应用UML
应用UML的三种方式?
草图:最常用的方式;草稿:可以随时丢弃,在分析中逐步精华,中间很多过程是要丢弃的,不断发生变化,用于沟通;------最终得到蓝图
蓝图:比较完善的设计方案;可以基于蓝图开发,但不一定有这些图形;软件开发的差不多了才画,这种情况下的图比较稳定,并且是为了以后的需要(eg、软件非常复杂,在图中把关键的部分画出来,以便以后的人员来维护和理解系统)
编程语言:通常不把其当成编程语言,UML类图里面有类的概念,其可以映射到面向对象里面的一个类,atribute可以映射到java中的变量,operation(操作)可以映射到方法,但并不是所有东西都可以映射
UML失败的地方?
在分析和设计中设计的不好的话,设计和开发脱节的过程,开发中需求不断的变化,这时设计图就没多少意义,此时建议变化非常大的话蓝图不用画的太细;
UML使用?
从大的概念上非常简略的用它,不应该写的非常细,需要画才画,并且其只具有指导性的意义,指导编程;
算法的话,一般用流程图来描述,更好的方法用一段代码
如何将UML作为一种编程语言?(就画几张图)
MDD:( Model-Driven Development模型驱动开发)eg:在图中设计上user(string),password(string),id(int)然后可以通过MDD的工具生成代码包括egSSH的有实体类,有Hamlet映射文件,有配置文件,usermanager接口、实现useraction,jsp(form表单);可以根据平台无关模型生成平台相关模型再根据平台相关模型生成代码
如何提高自己的分析和设计能力?
写代码,多想,why?why not that
什么是建模?
理解:给现实世界建立一种能被人理解的模型(eg 如何从A地到B地,方法:语言描述或画图并用图例,但是全都表示在一个图里面会看不懂);
对现实世界的描述,从各角度。软件需要从概念(干嘛)、需求,给谁用等多方面理解,描述完了就需要实现,捕获完需求以后需要对需求进行分析,结果就得到模型(概念模型),需求可以通过需求文档、用例图来分析;-----》(1、分析概念(eg:课程管理系统:有学生、课程、班级,老师,课程名称等,以及之间的关系,并建立关联)得到概念及概念之间的联系)-----》实现(采用BS还是CS,什么架构等)----》设计(提交数据,接收、存储等,类之间的关系,依赖等)需要静态及动态来理解
软件建模包含:静态(概念模型【都有哪些东西】,客户端+服务器(负载均衡,so需要多台服务器)+分布式部署(数据库)等)和动态【交互】
UML的要素?
1、表示法--图形:画出来,圈表示一个接口,框表示一个类,线表示消息
2、过程(uml与过程无关,但最好用于RUP)
3、工具(Rational Rose),可以在纸上啥的画
分析?
对问题和需求的调查研究
面对对象的分析?
在问题域内发现和描述对象:ge学生(本科与研究生)
设计?
满足需求的概念上的解决方案,eg对象及其属性
面对对象设计?
如何定义软件对象以及它们之间如何协作以实现需求。eg(东北人都是活雷锋:东北人继承人--属性,活雷锋(表示一种精神、行为(动作)--接口),关系:实现,)
如何将UML用于面向对象的设计?
eg:
1、你要做什么?

这里写图片描述

用例:描述怎么用(交互),情节的描述,干什么
领域模型(类似于业务模型)

2、从中抽象出概念————类图(静态)【在传统的软件开发中此过程类似设计数据库表(字段外键ER图等),若是面向对象的方式来开发抽象出概念】
分析:抽出概念,暂时先不考虑骰子的属性,不要先陷入细节中,需要逐步分解,需求分析和功能分析都是如此,从大方向确定其模块,逐步进行功能分解。

这里写图片描述

各对象之间究竟是如何交互才能实现(游戏者请求骰子展示结果这些过程需要对象完成)

3、各对象之间如何交互———–顺序图(动态建模),某个action,dao等并分析出其中各有哪些方法
这里写图片描述
需要和骰子游戏进行交互,骰子游戏对象又跟两个骰子对象进行交互

箭头表示调用的方向:谁调用谁

eg;游戏者调用骰子游戏,骰子游戏调用另一个对象骰子,so投掷这个动作实际上是由骰子本身完成的并还提供获取点数的功能,投掷以后就会产生点数这个概念,这个游戏就需要获得点数;此种设计方案把点数产生的职责交给骰子,(why交给骰子,一扔骰子需要提供点数,why不将点数获得写在骰子游戏里面,因为不符合面向对象的习惯,职责分配,写给骰子可以改变规则,对所有的骰子游戏都是一样的——GRASP(我要完成某个功能,该功能交给谁完成))

箭头的指向表示这个功能是谁完成的

4、进一步分析–设计阶段(实现)
中间的箭头表示关联性,2表示多重名称,箭头表示导航性
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39885282/article/details/81161208