1、计算机与信息学院软件教研室,软件工程导论,软件教研室,问题: 汇编语言编写程序、高级语言的结构化编程和面向对象编程之间的比较?,第三讲 面向对象方法学,软件教研室,第一节 面向对象软件工程,面向对象=对象+类+继承+消息,软件教研室,计算机处理的实体对象:,面向对象方法与 结构化方法的比较分析,面向对象方法 :这里的对象是指数据以及可以施加在这些数据之上的操作所构成的统一体 。类(数据+行为),结构化方法 :是各种预定义类型的变量、数组、记录和文件等数据描述 。模块(数据+部分行为),软件教研室,计算机处理对象的操作:,面向对象方法与 结构化方法的比较分析,面向对象方法 :通过消息驱动对象主动
2、的执行起自身的数据处理行为,结构化方法 :通过对象(参数)传送,并调用外部的处理功能来处理对象,软件教研室,处理观点上的不同:,面向对象方法与 结构化方法的比较分析,面向对象方法 :把程序看成是相互协作而又彼此独立的对象的集合。每个对象就是一个微型的程序,有自己的数据、操作、功能和目的,结构化方法 :看作是工作在数据之上的一系列过程或函数的集合,软件教研室,通讯机制:,面向对象方法与 结构化方法的比较分析,面向对象方法 :消息的传递,结构化方法 :模块调用和参数的传递,软件教研室,思维的特点:,面向对象方法与 结构化方法的比较分析,面向对象方法 :该方法使用现实世界的概念抽象地思考问题从而自然
3、地解决问题。他强调模拟现实世界中的概念而不强调算法。在进行面向对象设计时,计算机处理问题方式被放弃,而重点针对需要处理的问题进行分析。,结构化方法 :这种方法以算法为核心,把数据和过程作为相互独立的部分,数据代表问题空间中的客体,程序代码则用于处理这些数据。这种思维方法与计算机处理问题的方法是相一致的。对于那些非常熟悉计算机处理过程的程序员来说具有不可替代的优势。,软件教研室,软件开发过程的特点 :,面向对象方法与 结构化方法的比较分析,面向对象方法 :面向对象的方法重点强调反映现实需求的对象业务模型的建立,相对而言设计和编码部分的工作则较为次要。,结构化方法 :重点在软件处理过程的设计和实现
4、上。,软件教研室,适用范围的比较:,面向对象方法与 结构化方法的比较分析,面向对象方法 :适合于比较大型的应用。,结构化方法 :对于要求涉及底层处理的应用或需要较高处理效率直接对硬件系统进行操作的系统比较适用。另外对一些小的需要复杂处理流程(强调算法设计)的软件系统也比较适用。,软件教研室,一般特点比较:,面向对象方法与 结构化方法的比较分析,面向对象方法 :稳定、可重用、易维护;但执行效率比较低,结构化方法 :执行效率高;但难维护,软件教研室,两种方法的交互性:,面向对象方法与 结构化方法的比较分析,面向对象方法 :面向对象方法是在传统软件工程方法上发展起来的一种新方法,许多传统的软件工程方
5、法在面向对象的分析上也同样起作用,(模块设计的原则等),结构化方法 :在面向对象的设计中还存在一些不可消除的作用,当前提出的面向方面的设计就是这种作用的体现。,软件教研室,面向对象方法的基本原则,面向对象方法的基本原则:是按照人们习惯的思维方式,用面向对象的观点建立问题域的模型,开发出尽可能自然的表现求解方法的软件,软件教研室,问题:汇编语言软件、结构化的高级语言软件和面向对象软件在基本理念上有什么异同点?,思考题,软件教研室,软件过程模型的比较:,第二节 面向对象的软件过程,软件教研室,面向对象的软件过程-喷泉模型,需求阶段,面向对象分析阶段,面向对象设计阶段,编码阶段,集成和测试阶段,运行
6、状态,进一步开发,维护期,喷泉模型的生命周期与结构化方法的生命周期是一致的,但喷泉模型的各个阶段是迭代和无缝的。,软件教研室,面向对象的软件过程-RUP,RUP的二维开发模型,横轴是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);,纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。,软件教研室,RUP的各个阶段和里程碑-横向,RUP中的软件
7、生命周期在时间上被分解为四个顺序的阶段,初始阶段(Inception) (生命周期目标里程碑 ),前景文档:对核心项目要求、关键性质、主要限制的一般性的前景说明;初始的用例模型(完成1020);初始的项目术语表;初始的商业用例,包括商业环境、验收规范以及成本预测;初始的风险评估;项目规划,其中明确阶段和迭代;商业模型,根据需要可选;一个或多个原型;,细化阶段(Elaboration)(生命周期结构里程碑),构造阶段(Construction)(初始运行能力 ),交付阶段(Transition)(产品发布里程碑),用例模型(至少完成80):识别出了所有的用例和角色,以及大多数用例的描述;调整一些
8、增加的需求,包括非功能性需求以及任何与特定用例无关的需求;软件体系结构描述;可执行的体系结构原型;修订后的风险表和商业用例;整个项目的开发计划,包括粗略项目规划,显示迭代过程以及相应的评估准则;更新的开发用例,指定要使用的过程;初步的用户手册(可选);,在特定平台上集成的软件产品;用户手册;对当前版本的描述 ;,beta测试确认新系统达到用户的预期;与被取代的旧系统并行操作;功能性数据库的转换;用户和维护人员培训;向市场、分销商和销售人员进行新产品的展示;,软件教研室,RUP的核心工作流-纵向,描述如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程,角色
9、和责任。,描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需要的功能和约束进行提取、组织、文档化;最重要的是理解系统所解决问题的定义和范围。,设计活动以体系结构设计为中心,体系结构由若干结构视图来表达,结构视图是整个设计的抽象和简化。分析设计的结果是一个设计模型和一个可选的分析模型。,目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式(源文件、二进制文件、可执行文件)实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。,目的是验证对象间的交互作用,验证软件中所有组件的正确集成,检验所有的需求已被正
10、确的实现, 识别并确认缺陷在软件部署之前被提出并处理。RUP提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低了修改缺陷的成本。,目的是成功的生成版本并将软件分发给最终用户。部署工作流描述了那些与确保软件产品对最终用户具有可用性相关的活动,包括:软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下,还可能包括计划和进行beta测试版、移植现有的软件和数据以及正式验收。,描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理工作流提供了准则来管理演化系统中的多个变体,跟踪软件创建过程中的版本。同时也阐述了对产品修改原因、时间、人员保持审
11、计记录。,平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。,目的是向软件开发组织提供软件开发环境,包括过程和工具。,软件教研室,第三节 面向对象分析,面向对象分析的主要工作就是理解、表达和验证,软件教研室,面向对象的分析文档,软件需求规格说明模型文档:主要描述对象模型(静态结构)、动态模型(交互结构)和功能模型(数据变换),表示静态的结构化的系统的“数据”性质。他是对客观世界实体的对象以及对象之间关系的映射,描述了系统的静态结构。是三种模型中最重要的模型。,所谓模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。概括地说模型是一种表示工具,利
12、用这种工具可以把知识规范地表示出来。,表示瞬时的行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。,表示变化的系统的“功能”性质,它表明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。,软件教研室,复杂对象的五个层次,依据抽象程度的不同通常将对象模型在五个层次上进行抽象: 主题层; 类与对象层; 结构层; 属性层; 服务层;,高抽象层,低抽象层,注:主题的含义是理解大型、复杂模型的一种机制。也就是说通过划分主题把一个大型、复杂的对象分解成几个不同的概念范畴。,软件教研室,面向对象分析的大体顺序,寻找类与对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模
13、型,定义服务,注:具体的分析工作没有必要一定要求按照上面的顺序完成。根据不同人的思维习惯,可以灵活地在不同的抽象层次上分析完善系统。,软件教研室,建立对象模型,对象模型是从系统的静态结构上描述系统的需求。,建立对象模型的参考步骤: 1.对于大型系统首先划分出若干个主题,有一些小系统就可以直接确定对象类和关联。 2.给每个对象类和关联增添属性,以进一步描述。 3.对对象模型进行优化,利用适当的继承关系来合并和组织对象类。 4.明确对象类中的部分服务。 5.通过其他模型的建立来修改调整对象模型。 6.更准确地描述对类中提供的服务的需求。,软件教研室,建立动态模型,动态模型是描述系统的交互行为的需求
14、。,动态模型的设计步骤: 1.编写典型交互行为的脚本。 2.从脚本中提取出事件,确定每个事件的动作对象以及接受事件的目标对象。 3.排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描述。 4.最后,比较各个对象的状态图,检查他们之间的一致性,确保事件之间的匹配。,软件教研室,建立功能模型,功能模型表明的是系统中数据之间的依赖关系,以及有关的数据处理功能,一般采用数据流图描述。,功能模型的设计步骤: 1. 绘制基本系统模型图。 2. 绘制功能级数据流图。 3. 编写数据字典。,软件教研室,定义服务,定义服务作为对对象模型的补充,进一步明确定义出每个类所提供的服务内容,也
15、就是其提供的操作功能。,服务定义启发式规则: 1. 对于一些常规行为,可以在定义中进行省略。 2. 从事件导出的操作。 3. 依据功能模型描述的处理内容获取相应的操作。 4. 利用继承减少冗余操作。,软件教研室,第四节 面向对象设计,面向对象分析和面向对象的设计之间既有区别也有关联。从面向对象分析到面向对象设计是一个逐步扩充模型的过程,两者之间的界限并不明显,之间是一个反复迭代的过程。,软件教研室,面向对象的设计准则,1.模块化; 2.抽象; 3.信息隐藏; 4.弱偶合; 5.强内聚; 6.可重用;,软件教研室,面向对象设计的启发式规则,1.设计结果应该清晰易懂; 2.一般-特殊结构的深度应适
16、当; 3.设计简单的类; 4.使用简单的协议; 5.使用简单的服务; 6.把设计变动减至最小;,软件教研室,面向对象设计的阶段分类,与生命周期模型(总体设计和详细设计)类似,面向对象设计也可以再细分为高层设计(系统设计)和类设计(对象设计),软件教研室,高层设计(系统设计),高层设计阶段开发系统的结构,即构造应用软件的总体模型;高层设计阶段标识在计算机环境中进行问题解决工作所需要的概念,并增加了一批需要的类;这些类包括那些可使应用软件与系统的外部世界交互的类。,注:此阶段的输出是适合应用软件要求的类、类间的关系、应用的子系统视图规格说明,软件教研室,高层设计应遵循的原则,1.应使得在子系统的各
17、个高层部件之间的通信量达到最小; 2.子系统应当把那些成组的类打包,形成高度的内聚; 3.逻辑功能分组,提供一个一个单元,识别并定位问题事件;,软件教研室,类设计(对象设计),类与具有概念封装的子系统十分类似。 每个子系统都可以被当做一个类来实现,这个类聚集它的部件,提供了一组操作。 类和子系统的结构是正交的,一个单个类的实例可能是不止一个子系统的一部分。,软件教研室,设计模式(MDA),设计模式是从大量成功设计实践中总结出来的在面向对象设计过程中的一些启发式规范,重点描述了面向对象系统设计过程一些常见问题的规范解决方案。,软件教研室,设计模式(MDA),23种设计模式:抽象工厂模式;适配器模
18、式;桥模式;Facade模式等。,软件教研室,抽象工厂模式 (Abstract Factory),Abstract Factory设计模式的目的是用于封装具体的平台,从而使应用程序可以在不同的平台上运行。,软件教研室,CatalogDAOFactory是典型的工厂方法,catDao是通过动态类装入器className获得CatalogDAOFactory具体实现子类,这个实现子类在Java宠物店是用来操作catalog数据库,用户可以根据数据库的类型不同,定制自己的具体实现子类,将自己的子类名给与CATALOG_DAO_CLASS变量就可以。,软件教研室,思考题,问题1:深入比较结构化方法软件
19、工程与面向对象软件工程在开发过程、分析方法和设计理论上的异同点?,问题2:为了彻底地解决软件危机,实现软件工程的最高理想,当前软件工程理论还存在什么问题需要更好地进行解决?,软件教研室,第五节 面向对象设计语言UML,Jim Rumbaugh,Grady Booch,Ivar Jacobson,软件教研室,UML的简介,UML(Unified Modeling Language)是一种构建软件系统和文档的通用可视化建模语言。 UML能与所有的开发方法一同使用,可用于软件开发的整个生命周期。 UML能表达系统的静态结构和动态信息,并能管理复杂的系统模型,便于软件团队之间的合作开发。 UML不是编
20、程语言,但支持UML语言的工具可以提供从UML到各种编程语言的代码生成,也可以提供从现有程序逆向构建UML模型。 UML并不是万能的,它是一种离散的建模语言,对于特定的领域,比如:GUI、VLSI电路设计或基于规则的人工智能,用特定的语言和工具可能更合适。,软件教研室,最重要目标:UML是所有建模人员可以使用的通用建模语言。它包含主流建模方法的概念,从而可以替代现有的软件分析和设计方法,比如:OMT,Booch,OOSE等。 UML不是完整的开发方法,它不包括逐步的开发流程,但它提供所有必要的概念,具备足够的表达能力。 UML的另一个目标是:能尽量简洁地表达系统的模型。,UML的目标,软件教研
21、室,UML概念可以划分为以下范围: 系统需求 静态结构 动态行为 交互行为 物理实现 各种图之间的关系 模型组织 扩展机制,UML的主要概念,软件教研室,用例视图(Use Cases View)从外部用户的角度来描述系统的行为,它将系统功能划分为对用户有意义的事务,这些事务被称为用例,用户被称为执行者,用例视图也就是描述活动者在各个用例中的参与情况,它指导所有的行为视图。,系统需求,软件教研室,静态视图(Static View),一个模型必须首先定义各种事物的内部特征和相互之间的关系,应用概念建模成类,类描述事物的属性和以及在这些属性上的操作。类之间可以存在不同的关系,比如泛化(继承)、关联和
22、依赖等,静态视图表示成类图,静态视图在某一时刻的快照称为对象图。,静态结构,软件教研室,状态机视图(State Machine View),通过对每个类的对象的生命周期进行建模,描述了对象时间上的动态行为。状态机是由状态和迁移组成的图,状态机通常附属于类,描述类实例对接受事件的响应。 活动视图(Activity View)是利用状态机对运算和工作流进行建模的特殊形式。活动图的状态代表了运算执行的状态,而非一般对象的状态,活动图和流程图很相似,不过它支持并发。,动态行为,软件教研室,交互视图(Interaction View),对象通过交互来实现行为,交互视图通过协作来进行建模,协作具有结构和行
23、为两个方面,结构包含为行为方面而定义的一系列角色和关系,行为方面是绑定于角色的对象间的一系列交换的消息,这些消息在协作中称为交互,消息序列可用两种图来表示:顺序图(重点在消息的时间顺序)和协作图(重点在交换消息的对象间的关系)。,交互行为,软件教研室,物理视图(Physical View),许多系统模型独立于最终的实现,在实现方面,必须充分考虑系统的重用性和性能。UML有两种视图来表示系统的实现:实现视图和部署视图,实现视图将可重用的系统片段打包成组件,部署视图描述系统运行时资源的物理分布,这些资源称为结点。,物理实现,软件教研室,静态视图(类图,对象图),物理视图(实现视图,部署视图)是描述
24、系统的静态结构。 用例图是描述系统的外部视图。 活动图描述系统的外部/内部视图。 交互视图(顺序图,协作图)描述系统的内部视图。 状态图描述单个类的动态行为。,各种图之间的关系,软件教研室,模型管理视图(Model Management View),任何大系统必须划分为较小的单元,以使人们能在某一时刻只接触有限的信息,不影响团队间的并行工作。模型是利用包(Package)和包的依赖来进行管理的。包是UML模型中通用的层次组织结构,包上的依赖总结了包内容的依赖关系。,模型组织,软件教研室,扩展机制(Extension Mechanisms),UML能满足绝大部分系统建模的需要,但任何语言都不是万
25、能的,它必须考虑一定的扩展机制,UML的扩展机制包括约束、标签值和原型。这些扩展机制可以用来为特定领域剪裁UML的配置,这样带来一些好处:根据自身需要来使用建模语言。,扩展机制,软件教研室,一个模型必须首先定义各种事物的内部特征和相互之间的关系,下面介绍一些基本的模型元素:,分类: 类(Class) 接口(Interface) 子系统(Sub System) 执行者(Actor) 用例(Use Cases) 组件(Component) 结点(Node) 注释(Comment),关系: 关联(Association) 泛化(Generalization) 依赖(Dependency) 实现(Re
26、alization) 约束(Constraint) 静态视图: 类图 对象图,静态建模,软件教研室,类是具有相同属性、操作和关系的对象集合的总称。通常在UML中类被画成矩形, 包括三个部分:名称、属性和操作。 名称:每个类都必须有一个名字,用来区分其它的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如Wall、java:awt:Wall都是合法的类名。 属性:类可以有任意多个属性,也可以没有属性。在类图中属性只要写上名字就可以了,也可以在属性名后跟上类型甚至缺省取值 。 操作:操作是类的任意一个实例对象都可以调用的,并可能影响该对象行为的实现。,静态建模-类,软
27、件教研室,类名,属性,操作,软件教研室,接口是未给出实现的对象行为的描述,接口包含操作,但没有属性,一个或多个类可以实现接口,每个类实现接口的操作。,String,isEqual(String) : Boolean Hash() : Integer ,Hashable,Comparable,接口标记,静态建模-接口,软件教研室,任何大系统都必须划分为较小的单元,以便人们在某一时刻可以和有限的信息工作,使团队的工作不相互影响。 包可以包含各种模型元素和其它的包,包之间还可能存在一定的依赖。, Finances, Credits, Accounts, BankInterface,静态建模-子系统(
28、包),软件教研室,执行者是与系统、子系统或类交互的外部人员,进程或事务。在运行时,具体人员会充当系统的多个执行者,不同用户可能会成为一个执行者。,静态建模-执行者,软件教研室,用例是系统提供的外部可感知的功能单元,用例的目的是定义清晰的系统行为,但不解释系统的内部结构。 用例可以与执行者关联,也可以参与其他的多种关系,比如扩展、泛化和包含等。 用户的动态部分用交互视图来描述,比如顺序图、协作图。 用例用椭圆来表示,用例名标在椭圆下方,用实线与同自身通信的用户相连。,静态建模-用例,软件教研室,Registrar - maintain the curriculum Professor - req
29、uest roster Student - maintain schedule Billing System - receive billing information from registration,静态建模-用例,软件教研室,用例图描述执行者在各个用例中的参与情况。,静态建模-用例图,软件教研室,组件是可重用的系统片段,具有良好 定义接口的物理实现单元。每个组件 包含了系统设计中某些类的实现。 组件设计的原则:良好的组件不直接 依赖于其它组件,而是依赖于其它组 件所支持的接口。这样的好处是系统 中的组件可以被支持相同接口的组件 所取代。 一个组件可能是源代码、可执行程序或动态库。,静态
30、建模-组件,软件教研室,结点代表系统运行时的物理对象,结点通常拥有运算能力,它可以容纳对象和组件实例。,静态建模-结点,软件教研室,注释用于解释设计的思路,便于理解。 一个好的模型应该有详尽的注释。,Represents an incorporated entity,Company,注释,静态建模-注释,软件教研室,关联描述了系统中对象和其它实例之间的离散的连接,关联是有序的,它允许重复,关联的实例是链。 关联至对象的连接点称为关联端点,很多信息被附在关联端点上,它拥有角色名、重数(多少个类的实例可以关联于另一个类的实例),可见性等。 关联有自己的名称,可以拥有自己的属性,这时关联本身也是类,
31、称为关联类。,静态建模关系关联,软件教研室,Manages,Job,boss,worker,employee,employer,1*,*,*,01,Company,Person,角色名,重数,关联名称,关联类,二元关联,自关联,软件教研室,聚集(Aggregation)用来表达整体部分关系的关联。组合(Composition)是一种聚集,是关联更强的形式。,Polygon,Point,1,3*,points,Contains,Polygon,Window,Slider,1,2,Scrollbar,Header,1,Title,1,1,Panel,1,Body,聚集,组合,静态建模关系聚合和组合
32、,软件教研室,泛化是一般化和具体化之间的一种关系。 继承就是一种泛化关系,更一般化的描述称为双亲,双亲的双亲称为祖先,更具体化的描述称为孩子,在类的范畴,双亲对应超类,孩子对应子类。,Tree,Oak,Elm,Birch,孩子,双亲,Person,Student,Graduate,祖先,静态建模关系泛化,软件教研室,多重继承:一个孩子可以从多个双亲继承属性和方法。多重继承可能存在冲突,因为被继承的双亲可能存在相同的类声明,这时,最好显式解决冲突问题。,Assistant,Teacher,Student,静态建模关系多重继承,软件教研室,依赖指明两个或两个以上模型元素之间的关系。 依赖有很多种类
33、,比如:实现(realize)、使用、(usage)、实例化(instantiate)、调用(call),派生(derive)、访问(access)、引入(import)、友元(friend)等等。, Application Server, DataBase,依赖类型,静态建模关系依赖,软件教研室,实现是依赖的一种,但由于它具有特殊意义,所以将它独立讲述。实现是连接说明和实现之间的关系。,String,isEqual(String) : Boolean Hash() : Integer ,Comparable, Comparable,isEqual(String) : Boolean Hash
34、() : Integer ,实现,特殊的实现标记,静态建模关系实现,软件教研室,约束用来表示各种限制,如关联路径上的限制,和属性特征检测(存在、所有)。,Person,Committee,Member-of,约束,Chair-of,subset,静态建模关系约束,软件教研室,静态视图是UML的基础,静态视图表示为类图,主要是描述类和类之间的关系。,继承,关联,Person,House,residence,0*,关联类,ordered,静态建模类图,软件教研室,对象图是系统在某一时刻的快照。,链,静态建模对象图,软件教研室,状态机图 用例图 活动图 顺序图 协作图,动态建模,软件教研室,状态机图
35、是对单个类的对象的生命周期进行建模,描述了对象时间上的动态行为,每个对象被认为是事件驱动的孤立实体。 状态机图是由状态和跃迁组成的图,通常状态机附属于类,描述类实例对接受事件的响应。 事件表达对象间的调用、显式信号、值的改变或时间的推移。 调用事件、变更事件、信号事件、时间事件 状态描述对象生命周期的一段时间,可以是等待其它事件时所处的时间,或是执行某一活动时所处的时间,状态分为简单状态和复合状态。,动态建模-状态机图,软件教研室,跃迁定义对象对某一事件发生的反应,通常,迁移具有触发事件、跃迁条件、动作和目标状态。 跃迁的种类有外部跃迁和内部跃迁。外部跃迁是最普通的跃迁,会发生状态改变;内部跃
36、迁不发生状态改变。 跃迁有两个隐式动作:进入动作和退出动作。无论何时进入和退出时都要执行,这方便进入时进行初始化工作,退出时进行资源的释放工作。,动态建模-状态机图,软件教研室,初始状态,结束状态,状态机,状态,触发事件,动作表达式,跃迁,软件教研室,用例图描述各个执行者在各个用例中的参与情况,描述系统为用户所感知的外部视图。 用例图的功能: 捕获系统用户需求 描述系统边界 指明系统外部行为 指导系统开发者的功能开发 系统建模的起点,指导所有的类图和交互图的设计 产生测试用例,用户文档 估计项目大小和进度。,动态建模-用例图,软件教研室,Customer,Salesman,Supplier,S
37、upervisor,Sale,Management,Supply,执行者,用例,系统边界,软件教研室,活动图是用状态机对工作流进行建模的特殊形式,它和流程图很类似,不过它支持并发控制。 活动图一般不描述所有的运算细节,它显示活动的流,但不显示执行活动的对象。 活动图处于系统的外部和内部视图之间,所以它可以作为设计的起点,为了完成设计,每个活动必须扩展成一个和多个操作,每个操作被指派给特定的对象来实现。 将商业组织控制的活动划分在一起,这类划分可以通过分隔的区域来表达,由于它们的外观,每个区域称为泳道(swimlane)。,动态建模-活动图,软件教研室,Customer,Sales,Stockr
38、oom,Request Service,Pay,Take Order,Fill Order,Deliver Order,Collect Order,泳道,软件教研室,带有对象流的活动图,Customer,Sales,Stockroom,Request Service,Pay,Take Order,Fill Order,Deliver Order,Collect Order,泳道,Order Placed,Order Entered,Order Filled,Order Delivered,对象,软件教研室,对象行为是通过交互来实现的,交互是对象间为完成某一目的而进行的一系列消息交换。 消息是对
39、象间的单向通信,从发送者到接受者的携带信息的控制流。消息可能带有值参。 消息序列可用两种图表示:顺序图(重点在消息的时间顺序)和协作图(重点在交换消息的对象间的关系)。对协作图来说,时间顺序可以从顺序号获得。,动态建模-交互视图,软件教研室,顺序图用二维表来表示交互,纵向是时间轴,横向是参与的角色以及它们交换的消息。 角色的生命周期表现为生命线,一条垂直的线,在激活的时间段里是双线,在状态保持的时间里是虚线。 消息表示为从一条生命线出发到另一条生命线的有向线,从上而下,表示消息的时间顺序。,动态建模-顺序图,软件教研室,Caller,Operator,Callee,时间轴,顺序图,生命线,激活
40、,状态保持,角色,软件教研室,协作图包含分类角色和关联角色,当它实例化时,对象被绑定到分类角色,链被绑定到关联角色.关联角色还可能被各种暂时性的链来充当,如过程参数和局部过程变量,链可以指定暂时性的原型:、或自身调用。 协作图对实现协作的对象和链进行建模,而忽略其他对象。,动态建模-协作图,软件教研室,Student,Registration Form,Registration Manager,math,软件教研室,通常在一个协作图中每个对象分配一个符号,然而有时不同状态的对象需要显式指出,流将同一个对象的不同状态版本关系在一起,使用原型。流的原型不太常用。,:Controller,:Dire
41、ctoryclosed,:Directoryopen,1:expand(),2:sort(),1.1 ,流,软件教研室,物理架构-实现视图,实现视图描述可重用的系统组件以及组件之间的依赖。,Course,User,Billing System,软件教研室,部署视图描述系统资源在运行时的物理分布,系统资源成为结点。,物理架构-部署视图,软件教研室,UML是一种建模语言而不是方法,这是因为UML中没有过程的概念,而过程正是方法的一个重要组成部分。UML本身独立于过程,这意味着用户在使用UML进行建模时,可以选用任何适合的过程。 一般采用的建模过程有:喷泉模型、迭代递增开发模型。,UML建模过程,软
42、件教研室,UML建模过程-瀑布开发模型,软件教研室,迭代递增开发模型,最初需求与分析,产品,维护请求,软件教研室,1 需求 最初需求规格说明应当由代表系统最终用户的人员提供,内容包括系统基本功能需求和对计算机系统的要求。 2 分析 分析的任务是找出系统的所有需求并加以描述,同时建立模型,以定义系统中的关键领域类,应由系统用户和开发人员合作完成。分析的第一步是定义用例,以描述所开发系统的外部功能需求。用例分析包括阅读和分析需求说明,此时需要与系统的潜在用户进行讨论。,迭代递增开发模型,软件教研室,3 设计 设计阶段的任务是通过综合考虑所有的技术限制,以扩展和细化分析阶段的模型。 设计阶段可以分为
43、两个部分:结构设计是高层设计,其任务是定义包(子系统),包括包间的依赖性和主要通信机制。我们希望得到尽可能简单和清晰的结构,各部分之间的依赖尽可能的少,并尽可能的减少双向的依赖关系。 第二部分是详细设计,细化包的内容,使编程人员得到所有类的一个足够清晰的描述。,软件教研室,结构设计 一个设计良好的系统结构是系统可扩充和可变更的基础。包实际上是一些类的集合。类图中包括有助于用户从技术逻辑中分离出应用逻辑(领域类),从而减少它们之间的依赖性。 详细设计 详细设计的目的是通过创建新的类图、状态图和动态图(顺序图、协作图和活动图),描述新的技术类,并扩展和细化分析阶段的对象类。,软件教研室,4 实现
44、构造或实现阶段是对类进行编程的过程。可以选择某种面向对象对象编程语言(如Java)作为实现系统的软件环境。Java很容易实现从逻辑视图到代码部件的映射,因为类到Java代码文件之间是一一映射关系。在实现阶段中,可以选取各种图的说明来辅助编程,比如:类图,状态图和动态图等。,软件教研室,5测试和配置 完成系统编码后,需要对系统进行测试,它通常包括:单元测试、集成测试、系统测试和验收测试。在单元测试中使用类图和类的规格说明,对单独的类或一组类进行测试;在集成测试中,使用组件图和合作图,对各组件的合作情况进行测试;在系统测试中,使用用例图,以检验所开发的系统是否满足例图所描述的需求。 系统的配置是实
45、际地交付系统,包括文档和组成模型等。,软件教研室,ROSE是美国Rational公司的面向对象建模工具,利用这个工具,我们可以建立用UML描述的软件系统的模型,而且可以自动生成和维护C+、Java、VB、Oracle等语言和系统的代码。 ROSE的界面分为三个部分Browser窗口、Diagram窗口和Document窗口。Browser窗口用来浏览、创建、删除和修改模型中的模型元素;Diagram窗口用来显示和创作模型的各种图;而Document窗口则是用来显示和书写各个模型元素的文档注释。,Rose的使用,软件教研室,Browser窗口,Diagram窗口,Document窗口,Speci
46、fication对话框,工具栏,工具箱,软件教研室,Browser窗口有四个视图: Use Case Logical Component Deployment,软件教研室,在Use Case视图的图的类型有:用例图、顺序图、协作图和活动图。,软件教研室,在Logical视图中的类型有:类图和状态图。,软件教研室,在Component视图的图的类型有:组件图。,软件教研室,在Deployment视图的图的类型有:部署图。,软件教研室,用例图,软件教研室,顺序图,软件教研室,协作图,软件教研室,活动图,软件教研室,类图,软件教研室,状态图,软件教研室,组件图,软件教研室,部署图,软件教研室,很多教
47、科书上的第一个程序就是Hello world,一个在屏幕上简单地打印出“Hello world!”语句的例子。 在java中一个在浏览器中显示“Hello World!”的Applet的代码如下:import java.awt.Graphics;class HelloWorld extends java.applet.Appletpublic void paint( Graphics g )g.drawString(“Hello World!“,10,10 );,实例一Hello World,软件教研室,用例图,软件教研室,HelloWorld类,HelloWorld,Paint(),g.dr
48、awString(“Hello World!“,10,10),注释,软件教研室,类图,HelloWorld,Paint(),Applet,Graphics,继承,使用依赖,软件教研室,顺序图,:Thread,:Toolkit,:ComponentPeer,target:HelloWorld,run,callbackLoop,handleExpose,paint,软件教研室,执行者 读者 图书馆员 管理员 用例 图书馆管理,实例二图书馆系统,用例图,软件教研室,读者用例图,软件教研室,图书馆员用例图,软件教研室,管理员用例图,软件教研室,思考题,思考题:应用UML语言描述加油卡充值业务的模型。,软件教研室,下载网站:http:/ UML技术网站:http:/