2022年面向对象的软件开发方法简介[借 .pdf

上传人:Q****o 文档编号:27077056 上传时间:2022-07-21 格式:PDF 页数:19 大小:512.85KB
返回 下载 相关 举报
2022年面向对象的软件开发方法简介[借 .pdf_第1页
第1页 / 共19页
2022年面向对象的软件开发方法简介[借 .pdf_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《2022年面向对象的软件开发方法简介[借 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象的软件开发方法简介[借 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1面向对象的软件开发方法简介面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点。把软件系统看成是各种对象的集合,这更接近人类的思维方式。软件需求的变动往往是功能的变动,而功能的执行者对象一般不会有大的变换。这使得按照对象设计出来的系统结构比较稳定。对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性。支持封装,抽象,继承和多态,提高了软件的可重用性,可维护性和可扩展性。1.1 对象模型在面

2、向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。1 自底向上的抽象建立对象模型的第一步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户和开发人员之间有了共同语言,使得开发人员能够彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维。把问题领域中的事物抽象为具有特定属性和行为的对象。把具有相同属性和行为的对象抽象为类。若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。再自底向上的

3、抽象过程中,为了使子类能更好的继承父类的属性和行为,可能需要自顶向下的修改, 从而使整个类体系更加合理。由于这类体系的构造是从具体到抽象,再从抽象到具体,符合人们的思维规律,因此能够更快,更方便的完成任务。2 自顶向下的分解再建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象, 显示器对象, 键盘对象和打印机对象等。接着对这些对象再进一步分解,例如主机对象有处理器对象,内存对象, 硬盘对象和主板对象组成。系统的进一步分解因有具体的对象为依据, 所以分解过程比较明确,而且也相对容易。因此面向对象建模也具有自顶向下开发方法的优点, 既能有效的控制系统的复杂性,又能同

4、时避免结构化开发方法中功能分解的困难和不确定性。1.1.2UML: 可视化建模语言面向对象的分析与设计方法,在 20 世纪 80 年代末至90 年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要有一种统一的符号来描述在软件分析和设计阶段勾画出来的对象模型,UML(Unified Modeling Language,统一建模语言)应运而生。 UML 是一种定义良好,易于表达,功能强大且普遍适用的可视化建模语言。而采用UML语言的可视化建模工具是Rational 公司开发的Rational Rose。1.2 面向对象开发

5、中的核心思想和概念在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型,如何用程序代码来实现对象模型,并且保证软件系统的可重用性,可扩展性和可维护性呢?本节节主要阐述面向对象开发的核心思想和概念,这些核心思想为从事面向对象的软件开发实践提供理论武器。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - 1.2.1 问题领域,对象,属性,状态,行为,方法,实现问题领域是指软件系统

6、所模拟的真实世界中的系统。随着计算机技术的发展和普及,软件系统渗透社会的各个方面,几乎可用来模拟任何一种问题领域,如学校,医院,商场,银行和太阳系等。对象是对问题领域中事物的抽象。对象具有以下特性:1) 万物节杰皆为对象。问题领域中的实体和概念都可以抽象为对象。例如:在学校领域,对象包括学生,成绩单,教师,课程,和教室等;在商场领域,对象包括客户,商品,订单。发票,仓库和管理员等;在用Java 语言创建的图形用户界面中,窗口,滚动面板,按钮,列表,菜单,文本框等也是对象。2) 每个对象都是唯一的。对象的唯一性来自于真实世界中事物的唯一性。世界上不存在两片一摸一样的叶子,因此在软件系统中用来模拟

7、两片叶子的对象也具有唯一性。3)对象具有属性和行为。例如一部手机:牌子是诺基亚,价格是 2000 元,银白色,能够拍照,打电话和收发短信等。这部手机的属性包括品牌类型type,价格price 和颜色color ,行为包括拍照takePhoto() , 打 电 话call() , 发 短 信sendMessage()和 收 短 信receiveMessage()。对象的行为包括具有的功能和具体的实现。在建立对象模型阶段,仅仅关注对象有什么样的功能,而不需要考虑如何实现这些功能。对象的属性用成员变量表示,对象的行为用成员方法表示。图 11 是手机的 UML 类图。4) 对象具有状态。 状态是指某个

8、瞬间对象的各个属性的取值。对象的某些行为往往会改变对象自身的状态,即属性的取值。例如:小王的本来体重为80kg,经过减肥后,体重减到45kg,参见图 1-2. 5)对象都属于某个类,每个对象都是某一个类的实例。例如:演员小红,小白和小黄,他们都属于演员类。再例如中文和英文都属于语言类。类是具有相同属性和行为的对象的集合。同一个类的所有实例具有相同属性,表明他们的属性的含义相同,但是他们的状态不一定相同,也就是属性取值不一定相同。例如演员小红, 小白和小黄, 都有姓名, 性别, 年龄和体重这些属性,但他们的属性值不同。同一个类的所有实例包括类本身的所有实例及其子类的所有实例。类的所有实例具有相同

9、的行为, 意味着他们具有一些相同的功能。类本身的所有实例按同样方式实现相同功能,而子类与父类之间,以及子类之间的实例则可能采用不同的方式来实现相同的功能。1.2.2 类,类型类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容如图 1-3 所示,对象模型用来模拟问题领域,Java 程序实现对象模型, Java 程序运行在Java虚拟机提供的运行时环境中,Java 虚拟机运行在计算机上。计算机受存储单元的限制,只能表示和操作一些基本的数据类型,比如整数,字符和浮点数。 对象模型中的类可以看作是开发人员自定义的数据类型,Java虚拟机的运行时环境封装了把自定义的数据类型映射

10、到计算机的内置数据类型的过程,使得开发人员不受计算机的内置数据类型的限制,对任意一种问题领域,都可以方便地根据先识别对象,再进行分类(创建任意的数据类型)的思路来建立对象模型。图 1-1 手机的UML类图肥胖状态: 80kg 苗条状态: 40kg 减肥行为图 1-2 小王的减肥行为导致体重的下降名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 面向对象编程的主要任务就是定义对象模型中的各个类。例如一下是手机类的定义。如何创建手机

11、对象呢?Java 语言采用new 语句类创建对象,new 语句会调用对象的构造方法。以下程序代码创建了两个手机对象,一个是诺基亚牌,银白色,价格为2000 元,一个是摩托罗拉牌,蓝色,价格为1999 元的。在运行时环境中,Java虚拟机首先把CellPhone 类的代码加载到内存中,然后根据这个模板来创建两个CellPhone 对象;所以说,对象是类的实例,类是对象的模板。问题领域(事物)对象模型(自定义类型)C+程序可执行程序计算机(内置数据类型)执行机器指令编译、联接实现模拟Student, Teacher, Lesson, Class 等类型int,long,float,double 和

12、 char等基本类型图 1-3 从对象模型中的类型到计算机的内置数据类型的映射public class CellPhone private String type; private String color; private double price; /* 构造方法 */ public CellPhone(String type,String color,double color) this.type=type; this.color=color; this.price=price; Public void takephoto() ; Public void call() ; Public

13、void sengMessage() ; Public void receiveMessage() ; Cellphone phone1=new CellPhone ( “诺基亚”, “Silvery ”,2000); Cellphone phone2=new CellPhone ( “摩托罗拉”, “ blue”,1999); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 1.2.3 消息,服务软件系统的复杂功能是由各种对

14、象的协同工作共同完成的。例如,电视机和遥控器之间存在着这种协作关系。当用户按下遥控器的“开机”按钮后,遥控机对象对电视对象发送一个“开机”消息。电视机对象接受到这个“开机”消息后,就执行相应的操作。每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其它对象提供服务。例如电视机具有的功能包括:开机,关机,选择频道,调节音量等。遥控器为了获得电视机的服务,需要向提出获得特定服务的请求,提出请求的过程被成为发送信息。对象提供的服务是由对象的方法来实现的,因此发送信息也就是调用一个对象的方法。例如遥控器向电视机发送“开机”消息,意味着遥控器对象调用电视机对象的开机方法。从使用者的角度出发,整

15、个软件系统就是一个服务提供者。在UML 语言中,系统边界被称为角色。 在系统的内部, 每一个子系统也是服务的提供者,他们为其他子系统提供服务,子系统之间通过发送消息来相互获得服务,一个孤立的不对外提供任何服务的系统是没有任何的意义的。对于电视机系统,看电视的观众就是它的系统边界。电视机系统是观众的服务提供者,电视机系统内的电视机对象是遥控器对象的服务提供者。图 1-4 显示了观众打开电视的UML时序图。遥控器电视机1: 选择开关按钮2: 开机1.2.4 接口既然每个对象都是服务的提供者,如何对外提供服务呢?对象通过接口对外提供服务。例如电视机的红外线接收器就是为遥控器提供的接口。在现实世界中,

16、接口也是实体,比如电源插口,洗衣机上的按钮和电灯的开关。而在面向对象范畴中,接口是一个抽象的概念,是指系统对外提供的所有服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现细节。这里的系统既可以指整个软件系统,也可以指一个子系统。对象是最小的子系统,每个对象都是服务的提供者,因此每个对象都有接口。站在使用者的角度,对象中所有向使用者公开的方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务。使用者在获得服务时,不必关心对象时如何实现服务的。在设计对象模型阶段,系统的接口就确定下来了,例如在手机 CellPhone 类的 UML 类图中,它的方法声明就是手机的接口,参见图1-

17、5 接口是提高系统之间松耦合的有力手段。例如电视机向遥控器公开了红外线接收器接手机的接口图 1-5 手机的接口图 1-4 观众打开电视机的UML 视图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - 口,使得电视机和遥控器之间相互独立,当电视机的内部实现发生变化时,比如由电子显示器改为液晶显示器,只要它的红外接收器接口不变,就不会影响遥控器的实现。接口还提高了系统的可扩展性。例如台式计算机上预留了很多供扩展的插槽(接口),只要在

18、主板上插上声卡,计算机就会增加播放声音的功能,只要插上网卡, 计算机就会增加联网的功能。在 Java语言中,接口有两种意思:一是指以上介绍的概念性的接口,即指系统对外提供的所有服务,在对象中表现为public 类型的方法的声明。二是指用interface 关键字定义的实实在在的接口,也称为接口类型,它用于明确地描述系统对外提供地所有服务,它能够更加清晰地把系统地实现细节与接口分离。后面我们会对接口做详细地介绍。1.2.5 封装,透明封装是指隐藏对象地属性和实现细节,仅仅对外公开接口。封装能为软件系统带来以下优点。1) 正确,方便地理解和使用系统,防止使用者错误修改系统地属性。比如电视机系统,尽

19、管它本身地实现很复杂,但用户使用起来却非常地简单,只要通过遥控器上地几个按钮就能享受电视机提供地服务。电视机的实现细节就被藏在它的大壳子里,没有必要向用户公开。2) 有助于建立各个系统之间的松耦合关系,提高系统地独立性。当某一个系统发生变化时,只要它地接口不变,就不会影响其他的系统。3) 提高软件的可重用性,每个系统都是一个相对独立的整体,可以在多种环境下得到重用。例如干电池就是一个可重用的独立系统,在相机,手电筒,电动剃须刀和玩具赛车中都能发挥作用。4) 降低了构建大型系统的风险,即使整个系统不成功,个别子系统有可能依然是有价值的。例如如果相机损坏了,它的干电池依然有用,可以安装到手电筒中。

20、一个设计良好的系统会封装所有的实现细节,把他的接口与实现清晰的隔离开来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问控制机制来进行封装,这种机制能控制对象的属性和方法的可访问性。在Java语言中提供了以下4 种控制级别。public: 对外公开,访问级别最高。protected: 只对同一个包中的类或者子类公开。默认:只对同一个包中的类公开。Private: 不对外公开,只能在对象内部访问,访问级别最低。灵活的运用4 中访问级别就能有效的控制对象的封装程度。后面我们会对此做详细的介绍。到底对象的那些属性和方法应该公开,那些应该隐藏呢?这必须具体问题具体分析。这里指提供封装的两个大

21、致原则:1:把尽可能多的东西隐藏起来,对外提供简洁的接口系统的封装程度越高,它的相对独立性就越高使用起来就越方便。例如半自动洗衣机HalfAutoWasher 和全自动洗衣机AutoWasher 就是两个明显的例子。图1.6 是他们的类图。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - 对比以上两个类图,可以看出全自动洗衣机封装了进水,排水和定时等洗衣服的细节,为使用者提供了更加简单易用的接口,所以全自动洗衣机洗衣服更方便。2

22、: 把所有的属性藏起来假如某种属性允许外界访问,那么提供访问该属性的公开方法。例如电视机有个音量属性 volume,这是允许使用者访问的。使用者通过setVolume()和 getVolume()方法来访问这个属性。为什么不把volume 属性定义为public 类型,让使用者直接访问呢?这样做有以下原因。1) 更符合现实世界中外因通过内因起作用的客观规律。一个对象属性发生变化应该是外因和内因共同作用的结果。外因就是使用者向电视机对象发送信息,请求电视机对象调节到某个高度,即调用电视机对象的setVolme()方法;内因就是电视机对象本身的音量控制装置调节音量,即执行setVolume()方法

23、。2) 能够灵活地控制属性地读和修改地访问级别。对象地有些属性指允许使用者读,但不允许使用者修改, 而只有对象内部才能修改,例如电表上显示的用电度数就是这样的属性,此时可以公开读方法,封装写方法。3)防止使用这错误地修改属性。例如银行帐户Account 对象有一个口令属性password,当用户设置口令时,要求口令必须是六位数,在Account 对象地 setPassword()方法中就很容易实现这段逻辑。图 1-6 半自动洗衣机和全自动洗衣机的类图private int volume; /* 设置音量 */ public void setV olume(int volume) this.vo

24、lume=volume; /* 查看当前音量 */ public int getV olume() return volume; Public void setPassword(String password) If(password=null | password.length() !=6) Throw new IllegalArgument Axception(“ 口令不合法 ” );else this.password=password; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

25、 - 第 6 页,共 19 页 - - - - - - - - - 4)有助于对象封装实现细节。有时候,如果对象的一个属性发生变化,在他的内部就会发生一系列的连锁反应,但这些反映对使用者来说是透明的。例如计算器有一个内部属性scale 表示数学进制。如果用户选择二进制,计算器就会把当前数字转化为二进制数;如果选择十六进制,计算器就会把当前数字转化为十六进制数。与封装具有相同含义的一个概念就是透明。对象封装实现细节,也就意味着对象的实现细节对使用者来说是透明的。透明在这里应该理解为“看不见”。1.2.6 抽象抽象是从特定角度出发,从已存在的事务中抽取出我们所关注的特性,形成一个新的事物的思维过程

26、。抽象是一种由具体到抽象,由复杂到简洁的思维方式。如图1-17 所示,在面向对象的开发过程中,抽象体现在以下方面。1:从问题领域中的事物到软件模型中对象的抽象在建立对象模型时,分析问题领域的实体,把它抽象为对象。真实世界中的事物往往由多种多样的属性,应该根据事物所处的问题领域来抽象出具有特定属性的对象。比如一只小白兔,如果问题领域是菜市场,那么会关注它的体重和价格;如果问题领域是研究所,那么会关注它的年龄,性别和健康状况等。从问题领域的事物到对象的抽象还意味着分析事物所具有的功能,在对象中定义这些功能的名称, 但不必考虑如何实现它们。这种抽象过程使得设计阶段创建的对象模型仅仅用来描述系统应该做

27、什么,而不必关心如何去做, 从而清晰地划清软件设计与软件编码的界限。2:从对象到类的抽象在建立对象模型时,把具有相同属性和功能的对象抽象为类。比如某学校里有1000 个学生,他们都属于学生类。3:从子类到父类的抽象当一些类之间具有相同属性和功能时,把这部分属性和功能抽象到一个父类中。从子类到父类的抽象有两种情况:不同子类之间具有相同功能时,并且功能的实现方式完全一样。例如自行车和三轮车的父类为非机动车类。二者都有刹车功能,并且实现方式也一样。在这种情况下把这个功能放在父类即非机动车类中实现。不同子类之间具有相同的功能,但功能的实现方式不一样。例如日光灯和电灯都能照明,但实现方式不一样。在这种情

28、况下,父类即照明设施类仅仅声明这种功能,但不提供具体的实现。这种抽象方式与面向对象的多态性相结合,有助于提高系统对象模型中的父类对象模型中的类对象模型中的对象问题领域中的事物抽取与问题领域相关的事物的属性和行为,抽象为对象从具有相同属性和行为的类中抽象出父把具有相同属性和行为的对象抽象为类图 1-7 在面向对象的开发过程中运用抽象思维名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - 的松耦合性。在 Java语言中,抽象有两种意思

29、:当抽象作为动词时,就是指上述的抽象思维过程。当抽象作为形容词时,可以用来修饰类和方法。若一个方法被abstract 修饰,则表明这个方法没有具体的实现:若一个类被abstract 修饰,则表明这个类不能被实例话。1.2.7 继承,扩展,覆盖在父类和子类之间同时存在者继承和扩展关系。子类继承了父类的属性和方法,同时,子类还可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式。覆盖也是专用术语,是指在子类中重新实现父类中的方法。从每个对象都是服务提供者的角度来理解,子类会提供和父类相同的服务。此外,子类还可以提供父类所没有的服务,或者覆盖父类中服务的实现方式。继承和扩展同时提高了系统的可

30、重用性和可扩展性。例如,手机和计算机之所以能迅猛的更新换代, 具备越来越多的功能,就是因为厂商在生产新型号的手机和计算机时,他们不必从头生产,而在原有手机和计算机的基础上进行升级。继承和发展导致面向对象的软件开发领域中架构类软件系统的发展。从头构建一个复杂软件系统的工作量巨大,为提高开发效率,有一些组织开发了一些通用的软件架构。有了这些软件架构, 新的软件系统就不必从头出发,只需要在这些通用软件架构的基础上进行扩展即可。如何在这些通用软件架构的基础上进行扩展呢?这些通用软件架构中都提供了一些扩展点。 更具体地说, 这些扩展点就是专门让用户继承和扩展地类。这些类已经具备了一些功能,并且能和软件架

31、构中其他地类紧密协作。用户只需创建这些类的子类,然后在子类中增加新功能活重新实现某些功能。用户自定义地子类能够和谐地融合到软件架构中,顺利地与软件架构中的其他类协作。目前在 Java 领域比较流行的架构软件包括:J2EE,Struts,JSF和 Spring。1.2.8 组合组合是一种用多个简单子系统来组装出复杂系统的有效手段。如图 1-8 所示,个人计算机系统就是一个典型的组合系统,它由主机 ( MainFrame) , 键盘(Keyboard) ,鼠标(Mouse) ,显示器(Screen) 和外围设备打印机 (Printer) 等组成。而主机(MainFrame)由处理器(CPU) ,内

32、存( RAM ) ,一个和多个硬盘(HardDisk ) ,显卡( GraphicsCard) ,声卡( SoundCard)和网卡( NetCard)等组成。Computer Printer MainFrame KeyBoard MonitorMouse CPU HardDisk RAM NetCard SoundCard GraphicsCard 图 1-8 计算机组合系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - 面

33、向对象的组合具有以下优点:1)在软件的分析和设计阶段,简化为复杂系统建立对象模型的过程。2)在软件的编程阶段,简化创建复杂系统的过程,只需要分别创建独立的子系统,然后将他们组合起来,就构成了一个复杂系统。而且允许第三方参与系统的建设,提高了构建复杂系统的效率。3)向使用者隐藏系统的复杂性。4)提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂系统中。以下以台灯ReadingLamp 为例,介绍如何实现组合系统。如图18 所示,台灯由灯泡Bulb 和电源线路Circuit 组成。图 1-10 显示了显示了使用者开灯的UML 时序图从图 1-10 可以看出,使用者开灯包含以下过程。1)使

34、用者打开台灯,即调用ReadingLamp 对象的 on()方法。2)台灯接通电源线路,即ReadingLamp 对象调用Circuit 对象的 SwitchOn() 方法。3)电流通过灯泡,灯泡发光,即Circuit 对象调用Bulb 对象的 light() 方法。4)灯泡从电源线路中获得电能,即 Bulb 对象调用Circuit 对象的 transportPower()方法。1-2-9 多态,动态绑定图 1-9 台灯 ReadingLamp 的组合系统ReadingLampCircuitBulb1: on2: switchOn3: light4: transportPower图 1-10

35、使用者开灯的UML 时序图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 19 页 - - - - - - - - - 。 例如某些电动剃须Shaver即允许使用干电池,也允许直接使用交流电。干电池 Battery和交流电源AcPower 都具有供电功能,不防抽象出父类电源类Power. 如图 1-11 所示,电动剃须刀是一个包含电源子系统的组合系统。电源类 Power 是一个抽象类,它有一个抽象方法 providePower() ,它是电源子系统对外提供的接口。在运行时

36、环境中,如果Shaver 对象的 power 对象引用AcPower 对象,Java 虚拟机就会调用AcPower 对象的 providePower() 方法;如果 Shaver 对象中的power 变量引用 Battery 对象, Java虚拟机就会调用Battery 对象的 providePower() 方法。 Java的这种运作机制被称为动态绑定。1.3 UML 语言简介1997 年。 OMG 组织( Object Mangement Group ,对象管理组织)发布了统一建模语言(Unified Modeling Language,UML ) .UML 的目标之一就是为开发团队提供标准

37、的通用的面向对象设计语言。UML 提供了一套IT 专业人员期盼多年的统一的标准建模符号。UML 采用一些标准图形元素来直观的表示对象模型,所以它是一种可视化的建模语言。在这里主要介绍常见的UML 框图的用法。用例图( Use Case Diagram) :从用户角度描述系统功能。类框图( Class Diagram) :描述对象模型中类与类之间的关系。时序图( Sequence Diagram)和协作图( Cooperation Diagram ) :描述对象间的相互关系。其中时序图显示对象之间的动态协作关系,它强调对象之间消息发送的时间顺序, 同时显示对象之间的交互;协作图能直观地显示对象间

38、的协作关系。这两种图合称为交互图。状态转化图(State Transition Diagram) :描述对象所有可能的状态以及导致状态转化的转移条件。组件图 (Component Diagram ) :描述系统中各个软件组件之间的依赖关系,还可以描述软件组件的源代码的组织结构。部署图( Deployment Diagram )定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备,以及它们之间的连接关系,在节点中还可以软件组件在硬件环境中的布局。在以上框图中,其中用例图,类框图,组件图,和部署图,构成了系统的静态模型;而状态转化图,时序图和协作图则构成了系统的动态模型。1.3.1 用例图

39、用例图描述了系统提供的功能。用例图的主要目的是帮助团队以一种可视化的方式来理解系统的功能需求。用例图包含以下内容. 角色:角色是系统的边界,即使用特定功能的用户,用人形符号表示。用例:表示系统的某一个功能,用椭圆符号来表示。角色和用例的关系:角色和用例之间是使用关系,用带实线的箭头符号来表示。用例之间的关系: 用例之间存在着包含关系和扩展关系。包含关系是指一个用例包含了另一个用例的功能,继承关系是指一个用例继承了另一个用例的功能。本节介绍的Panel 系统的功能是绘制用户指定的形状。图1-12 显示了 Panel 系图 1-11 电动剃须刀的组合系统用户绘制形状名师资料总结 - - -精品资料

40、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 统的用例功能。在软件的分析和设计阶段,还要分析用例的细节和处理流程,以文档的形式来描述用例。用例文档中应该包含以下内容。前置条件:开始使用这个用例之前必须满足的条件。主事件流:用例的正常流程。其他时间流:用例的非正常流程,如错误流。后置条件:用例使用完之后必须为真的条件。并不是每个用例都有后置条件。以下是 Panel 系统中绘制形状用例的细节。前置条件:无。主事件流:用户输入形状类型,然后绘制该形状。其他事件

41、流: 如果用户输入非法的形状类型,则显示错误提示信息“输入的形状类型不存在”。后置条件:无。1.3.2 类框图类框图显示了系统的静态结构,它包括以下内容。类:类是类框图的主要元素,用矩形表示。矩形的上层表示类名,中间表示属性,下层表示行为。抽象类的类名用斜体字表示,抽象方法也用斜体字表示。类之间的关系:包括联想,依赖。聚集,泛化和实现这5 种关系。后面我们会做详细的介绍图 1-13 是 Panel 的类框图。在这个 Panel 系统中定义了如下6 个类。Panel 类:画出用户指定的形状。它的Sselecthape()实现这个功能。ShapeFactory类:根据提供的形状类型,创建相应的Sh

42、ape形状对象它的getshape()实现这一个功能。Shape类:绘制自身的形状。这是一个抽象类,其方法也是一个抽象方法,没有实现绘画功能。Circle 类, Line 类, Rectangle 类:分别画一个圆,线和椭圆。相应的方法draw()实现这个功能。图 1-12 Panel 系统的用例图图: 1-13 Panel 的类框图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - 以上五个类存在依赖和泛化的关系,在后面会有详

43、细的解释。1.3.3 时序图时序图显示用例(或者一部分)的详细流程。时序图有以下两个纬度。水平纬度:显示对象之间发送消息的过程。垂直纬度:显示发送消息的时间顺序。图 1-14 是 Panel 系统绘制形状用例的时序图。PanelShapeFactoryShape1: SelectShape()2: getShape()3: new()4: draw()从图 1-25 看出,绘制形状用例包括以下步骤。1)用户选择特定的形状类型。2)画板从形状工厂中获取形状对象。3)形状工厂创建一个形状对象。4)画板调用形状对象的绘画方法绘制形状。1.3.4 协作图协作图与时序图包含的信息相同,Ration Ro

44、se 工具能够根据时序图自动生成协作图,反之亦然。 两者的区别在于,时序图演示的是对象与角色随着时间的变化进行的交互,而协作图则不参照时间,直接显示对象与角色之间的交互过程。协作图更能直观地显示出对象之间地协作过程, 设计师可以根据协作图来分析和调节对象之间地功能分布。图 1-15 是 Panel系统地绘制形状用例地协作图,这个图直观地反映了Panel,ShapeFactory 和 Shape 对象地协作过程。图 1-14 Panel 系统中绘制形状用例的时序图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

45、 - - - - - 第 12 页,共 19 页 - - - - - - - - - userPanelShapeFactoryShape1: SelectShape()2: getShape()3: new()4: draw()1.3.6 状态转换图状态转换图表示在它的生命周期内所处的不同的状态,以及状态之间的转换过程。没有必要为每个类建立状态转换图。通常对于那些状态转换比较复杂的对象,才有必要用状态转换图来直观地描述它地状态转换过程。状态转换图包括以下基本元素。初始点:用实心圆来表示。状态之间地转换:用箭头来表示。状态:用圆角矩形来表示。终止点:用内部包含实心圆的圆来表示。假定信用卡帐户有

46、三种状态:打开状态,透支状态和关闭状态。初始状态为打开状态;客户从帐户中取款导致余额小于零时,就转入透支状态;如果在30 天以内,余额始终小于零,就转入关闭状态;如果在透支状态,用户向帐户中存款使得余额大于零,就恢复为打开状态。此外,客户也可以请求关闭帐户。在打开状态,客户可以存款和取款;在透支状态,客户只允许存款;在关闭状态,客户不能存款和取款。图1-16 显示了信用卡帐户的状态转换图。打开透支通知客户关闭存款取钱 余额 0检查余额小于 0达 30天以上 客户请求关闭1.3.6 组件图组件图的主要用途时显示软件系统中组件之间的依赖关系,以及和其他第三方组的依图 1-15 绘制形状用的协作图图

47、 1-16 信用卡帐户的装态转换图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - 赖关系, 此外, 它还能显示包含软件源程序代码的文件的物理组织结构。组件图即可以在一个非常高的层次上仅显示粗粒度的组件,也可以在较低的层次上展示某个组件的组成结构。这里的组件也就是指软件系统中的子系统,它由一组协作完成特定服务的类组成。每个组件都能封装实现细节,对外公开接口。 组件之间具有较高的独立性,他们只存在依赖关系,即一个组件会访问另一个

48、组件的服务。例如,图 1-17 是一个企业Java应用的高层次的组件图。这个 Java应用分为客户端组件和服务器端组件两部分,客户端组件负责创建客户端界面,服务器端组件负责实现各种业务逻辑,此外,服务器端组件通过JDBC 驱动程序类库组件访问数据库,通过JavaMail 类库组件来收发电子邮件。1 1.3.8 部署图部署图表示软件系统如何部署到硬件环境中,能够展示系统中的组件在硬件环境中的物理布局。 部署图中最主要的元素是节点,一个节点可以代表一台物理机器,或代表一个虚拟机器节点。节点用三位立体表示,每个节点下方可以表明此节点上运行的可执行程序。图 1-18 显示了一个按照客户端组件和服务器组

49、件来划分的企业Java应用的部署图。 客户端组件运行在客户机上,服务器端组件运行在应用服务器上。客户机应用服务器数据库服务器邮件服务器客户端组件服务器端组件1.4 类之间的关系UML 把类划之间的关系划分为以下五种。关联:类 A 与类 B 的实例之间存在特定的对应关系。依赖:类 A 访问类 B 提供的服务聚集:类 A 为整体类,类B 是局部类,类A 的对象由类B 的对象组合而成。泛化:类 A 继承类 B。实现:类 A 实现了 B 接口。1.4.1 关联( association )关联指的是类之间的特定的对应关系,在UML 中用箭头表示。按照类之间的数量比,关联可以分为三种:一对一关联, 一对

50、多关联和多对多关联。关联还可以分为单向关联和双向关联。例如客户和订单之间的存在着的关联关系如图1-19 到图 1-21 客户端组件服务器端组件JavaMail类库JDBC 驱动程序类库图: 1-17 一个企业 Java应用的高层次的组件图图 1-18 一个企业 Java应用的部署图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 1.4.2 依赖依赖是指类之间的调用关系,在 UML中用带虚线的箭头表示。如果类 A 访问类 B的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁