Java学习篇2-面向对象

来源:互联网 发布:手机可以激活淘宝店铺 编辑:程序博客网 时间:2024/06/05 09:05
面向对象的方式有OOA(面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个部分组成,其中,OOA和OOD的结构需要使用一种方式来描述并记录,业界统一采用UML(统一建模语言)来描述并记录OOA和OOD的结果。结构化程序设计主张按功能来分析系统需求,主要原则概括为自顶向下、逐步求精、模块化等。结构化程序设计首先采用结构化分析(Structured Analysis,SA)方法对系统进行需求分析,然后使用结构化设计(Structured Design,SD)方法对系统进行概要设计、详细设计,最后采用结构化编程(Structured Program,SP)方法来实现系统。使用SA,SD和SP的方式可以较好的保证软件系统的开发进度和质量。结构化程序设计最小程序单元室函数,设计不够直观,适应性差,可扩展性不强。任何简单或者复杂的算法都可以由顺序结构、选择结构和循环结构三种程序设计的基本结构组合而成。

1.顺序结构
顺序结构表示程序中的各操作是按照他们在源码中的排列顺序依次执行的。
2.选择结构
选择结构表示程序的处理需要根据某个特定的条件选择其中一个分支执行。选择结构又单选择、双选择和多选择三种形式。
3.循环结构
循环结构表示程序反复执行某个或者某些操作,知道某条件为加(或为真)时才停止循环。
当型循环:先判断条件,当条件为真时执行循环体,并且在循环体结束时自动返回到循环入口处,再次判断循环条件;如果条件为假,则推出循环到达流程出口处。
直到型循环:从入口处直接执行循环体,循环体结束时判断条件,如果条件为真,则返回入口处继续执行循环体,直到条件为假时推出循环体到达流程出口处,是先执行后判断。
面向对象最小的程序单元是类。
成员变量(状态数据)+方法(行为)=类定义
面向对象三个特征:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism).
UML一共包含13中正式图形:活动图、类图、通信图、组件图、复合结构图、部署图、交互概观图、对象图、包图、顺序图、状态机图、定时图、用例图。
UML2.0组成
a.用例图
用例图用于描述系统提供功能的系列功能,而每个用例则代表系统的一个功能模块。其主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用力图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括用例、角色、角色和用例之间的关系以及系统内用例之间的关系。用例图一般表示出用例的组织关系,要么是整个系统的全部用例,要么是完成具体功能的一组用例。
用例图
b.类图
类图表示系统中应该包含哪些实体,各实体之间如何关联;即它表示了系统的静态结构。类图包含三个部分的矩形描述,最上面部分显示类的名称,中间部分包含类的属性,最下面部分包含类的方法。类图除了可以表示实体静态内部结构之外,还可以表示实体之间的互相关系。
类图中类的表示方法
类之间的三种基本关系:关联(包括聚合、组合),泛化(与继承同一个概念),依赖。
关联:如果仅能从一个类单方向地访问另一个类,则被称为单向关联;如果两个类可以相互访问对象,则被称为双相关联。一个对象能访问关联对象的数据被成为多重性。关联使用一条实线表示,带箭头的实线表示单向关联。
类之间的关联关系
关联和属性的区别在于:类里的某个属性引用到另外一个实体时,则变成了关联。
当某个实体聚合成另一个实体时,该实体还可以同时事另一个实体的部分;当某个实体组合成另一个实体时,该实体则不能同时是一个实体的部分。聚合使用带空心菱形框的实现表示,组合则使用带实心菱形框的实现表示。
泛化:泛化与继承是同一个概念,都是指子类是一种特殊的父类,继承关系使用带空心三角形的实线表示。
类之间的继承关系
依赖:如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。
类之间的依赖关系
c.组件图
组件图通常包含组件、接口和Port等图元,UML使用带这里写图片描述
来表示组件,使用圆圈代表接口,使用位于组件边界上的小矩形代表Port.
组件与接口 组件的接口表示它能对外提供的服务规范,这个接口通常有两种表现形式:用一条实线连接到组件边界的圆圈表示,使用位于组件内部的圆圈表示。
组件依赖于某个接口使用一条带半圆的实线来表示
组件图
d.部署图
部署图用于描述软件系统如何部署到硬件系统中,它的用途是显示软件系统的不同的组件将在何处物理运行,以及它们如何彼此通信。
部署图中的符号包括组件图中所使用的符号元素,还增加了节点的概念:节点是各种计算资源的通用名称,主要包括处理器和设备两种类型,两者的区别是处理器能够执行程序的硬件构建(如计算机主机),而设备是一种不具备计算能力的硬件构建。UML使用三维立方体来表示节点,节点的名称位于立方体的顶部。
部署图
e.顺序图
顺序图显示具体用例(或者是用例的一部分)的详细流程,并且显示流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。顺序图描述了对象之间的交互(顺序图和通信图都被成为交互图),重点在于描述消息及其时间顺序。
顺序图有两个维度:垂直维度,以发生的时间顺序显示消息/调用的序列;水平维度,显示消息被发送大的对象实例。顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调用另一个对象的方法或方法的返回值,发送者和接收者之间的箭头表示消息。
顺序图的顶部每个框表示每个类的实例(对象),框中的类实例名称和类名称之间用冒号或空格来分隔,如果某个类实例向另一个类实例发送一条消息,则绘制一条指向接收类实例的带箭头的连线,并把消息/方法的名称放在连线上面。对于某些特别重要的消息,还可以绘制一条带箭头的指向发起类实例的虚线,将返回值标注在虚线上,绘制带返回值的信息可以是的序列图更易于阅读。
用户登录顺序图
当绘制顺序图时,消息可以向两个方向扩展,消息穿梭在顺序图中,通常应该把消息发送者与接收者相邻摆放,尽量避免消息跨越多个对象。对象的激活期不是其存在的时间,而是它占据CPU的执行时间,激活期要精确。
f.活动图
活动图和状态机图都被成为演化图,区别和联系如下:
活动图:用于描述用力内部的活动或方法的流程,如果除去活动图中的并行活动描述,它就变成流程图。
状态机图:描述某一对象生命周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以及对象状态改变时所采取的动作。
演化图的5要素如下:
状态:状态是对象响应时间前后的不同面貌,状态是某个时间段对象所保持的稳定性,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限的状态对象是容易计算的,对象的状态越多,对象的状态迁移越复杂。
事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而言发生了事件,事件是对象状态发生改变的原动力。
动作:动作是对象针对所发生的事件所做的处理,表现为某个方法被执行。
活动:活动是动作激发后的后续系统行为。
条件:条件是事件发生所需要具备的条件。
激发对象状态改变的事件,有以下两种类型:
内部事件:从系统内部激发的事件,一个对象的方法调用另一个对象的方法。
外部事件:从系统边界外激发的事件。
活动图主要用于描述过程原理、业务逻辑以及工作流技术。用圆角矩形表示活动,用带箭头的实线表示事件,与传统流程图区别是活动图支持并发。
活动图
g.状态机图
状态机图表示某个对象所处的不同状态和该类的状态转换信息。在系统活动期间具有三个或者更多潜在状态的对象才需要考虑使用状态机图进行描述。
状态机图的符号集包括5个基本元素:
初始状态:使用实心圆来绘制。
状态之间的转换:使用具有带箭头的线段来绘制。
状态:使用圆角矩形来绘制。
判断点:使用空心圆来绘制。
一个或者多个终止点:使用内部包含实心圆的圆来绘制。
要绘制状态机图,首先绘制起点和一条指向该类的初始状态的转换线段,状态本身可以在图中的任意位置绘制,然后使用状态转换线段将他们连接起来。
状态机图
绘制状态机图时应该保证对象只有一个初始状态,可以有多个终结状态。状态要表示对象的关键快照,有重要的实际意义。
Java不允许直接访问对象,而是通过对象的应用来操作对象。