疯狂Java之学习笔记(4)---------------UML及面向对象
疯狂Java之学习笔记(4)---------------UML及面向对象
在疯狂Java讲义中加入UML一些内容
我认为,学习UML,还是比较有用,在后期的JAVA EE的开发中,对项目中的各项事务之间的逻辑关系进行图形化显示有较大的作用,因此,在这里,我对UML的核心知识进行总结一下,仅供参考。
Unified Modeling Language (UML)又称统一建模语言或标准建模语言
用例图主要用来描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。帮助开发团队以一种可视化的方式理解系统的功能需求
类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
1.泛化(Generalization)
【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.
【箭头指向】:带三角箭头的实线,箭头指向父类
2.实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现
【箭头指向】:带三角箭头的虚线,箭头指向接口
3.关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
上图为自身关联:
4. 聚合(Aggregation)
【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系.
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
5. 组合(Composition)
【组合关系】:是整体与部分的关系.,没有公司就不存在部门 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
6. 依赖(Dependency)
【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化= 实现>组合>聚合>关联>依赖
下面这张UML图,比较形象地展示了各种类图关系:
下面详解一下各个UML图的详细内容:
下面的总结出自http://blog.csdn.net/column/details/u-m-l.html
类图
类图显示了系统的静态结构。类图就是用于对系统中的各种概念进行建模,并描绘它们之间关系的图。再简单一点,类就是一组具有相同结构、行为、关系的一群对象。
我们一张图总结类组成的基本概念:
对于类的可见性描述了该属性是否对于其他类能够可见,从而是否可以被其他类进行引用。可见性包含4种,公有类型(public)、受保护类型(protected)、私有类型(private)、Implementation。
1、公有类型(public):允许在类的外面使用或查看该属性
2、受保护类型(protected):允许子类访问父类中受保护类型的属性
3、私有类型(private):只有类本身能够访问,外部一概不能
4、Implementation:该属性仅仅在被定义的包中才能够可见
接口
接口是一种特殊的类,所有接口都是有构造型的类。
表示方式:实线小圆圈 + 名称
接口关系:接口同样具有依赖和泛化的关系
依赖:一个类通过依赖关系与接口相连接,仅仅依赖于接口中的操作
泛化:跟类之间泛化关系同理
类之间的关系,见我的上一篇博客(浅谈UML的概念和模型之UML类图关系)
2、序列图
序列图和协作图都是交互图,彼此等价,可以相互转化。序列图是对对象之间传送消息的时间顺序的可视化表示。序列图用于表现交互,侧重于强调时间顺序。
序列图将交互关系表示为一个二维图,如下图:
注:虚线表示,此时对象不处于激活状态,双道线,表示对象处于激活状态;消息使用从一个对象的生命线到另一个对象的生命线的箭头表示。
1.1序列图的作用:
确认和丰富一个使用语境的逻辑表达 细化用例,将用例表达的需求进一步精细表达 有效地描述各个类的职责以及各类具有相应职责的原因1.2序列图的组成:
序列图是由对象、生命线、激活和消息等构成的,一张图胜过千余万语:
1.3序列图的高级概念:
3、协作图
协作:在一定的语境中一组对象以及实现某些行为的对象间的相互作用。
协作图就是表现对象协作关系的图。
2.1协作图的作用:
1、与序列图第一个相同
2、显示对象及其交互关系的空间组织结构
3、表现一个类操作的实现
2.2协作图的组成:
协作图是由对象、消息和链等构成的。对象和消息的概念与序列图中的概念是相同的,我重点讲链。
链:两个或多个对象之间的独立连接,是对象引用元组,是关联的实例。
链的表示形式:一个或多个相连的线或弧。
4、序列图和协作图的对比:
协作图和序列图表达的信息一样,只是方法不同,可通过适当的方式进行转化。协作图和序列图的不同点:
1、协作图明确表示了角色关系,通过协作角色来限定协作中的对象或链。
2、协作图不将时间作为单独的维来表示,必须使用顺序号来判断消息的顺序以及并行线程。
3、序列图和协作图都表示对象间的交互作用,序列图侧重时间顺序,协作图侧重对象间的关系,时间顺序可以从对象流经的顺序编号中获得。
4、序列图被用于表示方案,而协作图被用于过程的详细设计。
5.状态图
我先简单的理解一下,什么是状态机?
在日常生活中,状态机,我们理解为记录下给定时刻状态的机器,根据不同的输入对每个给定的变化而改变其状态或引发一个动作。
在UML中,状态机由对象的各个状态和连接这些状态的转换组成,是展示状态与状态转换的图。
状态图本质上就是一个状态机或是状态机的特殊情况。由表示状态的节点和表示状态之间转换的带箭头的直线组成。
1.1认识状态的概念和分类:
1.2状态图组成还包括:
活动图:
活动图是另一个种动态视图,描述动作和动作导致对象状态改变的结果,而不用考虑引发状态改变的事件。
2.1活动图的图形标准:
1、起点
【作用】描述活动图的开始状态
【表示方式】黑的实心圆
2、终止点
【作用】描述活动图的终止状态
【表示方式】实心圆的空心圆
3、活动
【作用】可以是手动也可以自动的执行任务
【表示方式】圆角矩形
4、状态
【作用】活动的所处状态
【表示方式】椭圆矩形
5、转换
【作用】描述一个活动转向另一个活动
【表示方式】带箭头的实线段,指向转向的活动
2.2活动图的组成
状态图中“动作”和活动图中的“动作状态”区别:
相同点:
1、都是原子性的,动作要么不执行,要么就完全执行,不能中断
2、执行时间都极短
不同点:
动作状态和状态图中的状态不同,不能有入口动作和出口动作,也不能有内部转移
了解活动图和状态图的各自作用:
状态图的作用:
1、清晰描述状态之间的转换顺序,通过转换顺序可以清晰看出事件的执行顺序
2、清晰的事件顺序有利于程序员在开发程序时避免出现事件错序的情况
3、清晰地描述了状态转换时所必须触发德尔事件、监护条件和动作等影响转换的因素,有利于程序员汇总非法事件的进入
4、通过判断更好地描述工作流因为不同的条件发生的分支
活动图的作用:
活动图和状态图的区别:
1、目的不同
活动图的主要目的是描述动作及对象的改变结果,而状态图则是描述对象、子系统、系统在生命周期中的各种行为
2、活动图中的状态转换不需要任何触发事件,状态图则需要触发事件
3、活动图种的动作可以放在泳道中,状态图不可以
构件
将系统中可重用的模块封装为具有可替代性的物理单元,称为构件。
构件的特征:
1、代码特征:包含和封装了实现系统功能的类、其他元素的实现代码以及某些构成系统状态的实例对象
2、身份特征:构件拥有身份和状态,用于定位在其上的物理对象
构件图
构件图是用来表示系统中构件与构件之间、类或接口与构件之间的关系图
2.1构件之间的依赖关系
与类图中类间依赖关系相同,都是使用虚线箭头表示
2.2构件和接口之间的依赖关系
一个构件使用了其他元素的接口,依赖关系可以用箭头的虚线表示,箭头指向接口符号
部署图
部署图描述一个系统运行时的硬件节点、在这些节点上运行的软件构件将在何处物理运行以及它们将如何彼此通信的静态视图
部署图的组成:
部署图的作用:
1、描述一个具体应用的主要部署结构
2、平衡系统运行时的计算资源分布
超市信息管理系统的部署图:
Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承、封装和多态。Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一个的类组成。
Java完全支持使用对象、类、继承、封装、消息等基本概念来进行程序设计,允许从现实世界中客观存在的事物(即对象)出发来构造软件系统,在系统构造中尽可能运用人类的自然思维方式。实际上,这些优势是所有面向对象编程语言的共同特征。而面向对象的方式实际上由OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分有机组成,其中,OOA和OOD的结构需要使用一种方式来描述并记录,目前业界统一采用UML(统一建模语言)来描述并记录OOA和OOD的结果。目前UML的最新版是2.0它一共包括13种类型的图形,使用这13种图形中的某些就可以很好地描述并记录软件分析、设计的结果。
1、面向对象程序设计简介
面向对象的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。
采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映像成客观世界的各种事物。采用面向对象方式开发的软件系统逻辑上的组成结构。如图所示:
从图上可以看出,面向对象的软件系统由多个类组成,类代表了客观世界上具有某种特征的一类事物往往有一些内部的状态数据,比如人有身高、体重、年龄、爱好等各种状态数据--当然程序没有必要记录该事物所有的状态数据,程序只要记录业务关心的状态数据即可。
面向对象的语言不仅使用类来封装一类事物的内部状态数据,这种状态数据就对应于图中的Field;而且类会提供操作这些状态数据的方法,还会为这类事物的行为特征提供相应的实现,这种实现也是方法。因此:可以得到如下基本等式:
Field(状态数据)+方法(行为)=类定义
从这个等式来看,面向对象比面向过程的编程粒度要大;面向对象的程序单位是类;而面向过程的程序单位是函数(相当于方法)因此面向对象比面向过程更简单、易用。我们举个例子来说,希望完成“猪八戒吃西瓜”这样一件事情。
面向过程的思维:吃(猪八戒,西瓜); 面向对象的思维:猪八戒.吃(西瓜);
OVER!!!!!
转载自:https://blog.csdn.net/u011225629/article/details/45248231
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/79996428
- 点赞
- 收藏
- 关注作者
评论(0)