资源描述
,HeFei University of Technology,School of Computer&Information,*,软件开发环境,主讲人:邵 堃,软件开发环境讲授内容:,软件开发环境重点教授面向软件开发过程的各类软件开发工具和使用方法。,讲述重点:,1.,了解软件工程中方法,工具和过程之间的基本概念,及其相互关系(讲述为主);,2.,了解当前的主要软件开发方法,结构化开发、面向对象开发、面向方面开发和面向组件的开发等(学生自己查找资料,然后做报告);,软件开发环境讲授内容:,3.,了解针对这些开发方法的主要工具软件(学生自己查找资料,然后做报告),重点介绍面向对象开发方法,UML,,及其开发工具,Rational Rose(,讲述为主,),。软件开发工具、软件测试工具和软件开发过程项目管理工具;,软件开发环境的背景,软件工程化的背景;,软件规模化的背景;,软件产业化的背景;,软件开发环境的定义,软件开发环境,(Software Development Environment),是指在基本硬件和宿至软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称,SDE,。,它由软件工具和环境集成机制构成,前者用以支持软件开发的相关过程、活动和任务,后者为工具集成和软件的开发、维护及治理提供统一的支持。,软件开发环境中各类元素之间的关系,Software Engineering,a“quality”focus,process model,methods,tools,注:软件工程的三个基本要素:方法、工具和过程,过程:规定了完成各项任务的过程;,方法:完成软件开发的各项任务的技术方法;,工具:软件工程的支撑环境;,软件开发环境的分类,-,按开发模型和开发方法分,支持,瀑布模型,、,演化模型,、,螺旋模型,、,喷泉模型,以及,结构化方法,、,信息模型方法,、,面向对象方法,等不同模型及方法的软件开发环境。,软件开发环境的分类,-,按功能及结构特点分类,有,单体型,、,协同型,、,分散型,和,并发型,等多种类型的软件开发环境。,软件开发环境的分类,-,按开发阶段分类,前端开发环境,(,支持系统规划、分析、设计等阶段的活动,),;,后端开发环境,(,支持编程、测试等阶段的活动,),;,软件维护环境;,逆向工程环境;,此类环境往往可通过对功能较全的环境进行剪裁而得到。,软件开发环境的分类,-,按应用范围分类,有,通用型,和,专用型,软件开发环境。其中专用型软件开发环境与应用领域有关;,软件开发环境的构造,软件开发环境由工具集和集成机制两部分构成,工具集和集成机制间的关系如同“插件”和“插槽”间的关系。,工具集,软件开发环境中的工具可包括:,支持特定过程模型和开发方法的工具,,如支持瀑布模型及数据流方法的分析工具、设计工具、编码工具、测试工具、维护工具,支持面向对象方法的,OOA,工具、,OOD,工具和,OOP,工具等;,独立于模型和方法的工具,,如界面辅助生成工具和文档出版工具;,亦可包括管理类工具和针对特定领域的应用类工具。,集成机制,对工具的集成及用户软件的开发、维护及管理提供统一的支持。按功能可划分为环境信息库、过程控制及消息服务器、环境用户界面三个部分。,环境信息库,是软件开发环境的核心,用以储存与系统开发有关的信息并支持信息的交流与共享。库中储存两类信息,一类是开发过程中产生的有关被开发系统的信息,如分析文档、设计文档、测试报告等;另一类是环境提供的支持信息,如文档模板、系统配置、过程模型、可复用构件等。,过程控制和消息服务器,是实现过程集成及控制集成的基础。过程集成是按照具体软件开发过程的要求进行工具的选择与组合,控制集成并行工具之间的通信和协同工作。,环境用户界面,包括环境总界面和由它实行统一控制的各环境部件及工具的界面。统一的、具有一致视感,(Look&Feel),的用户界面是软件开发环境的重要特征,是充分发挥环境的优越性、高效地使用工具并减轻用户的学习负担的保证。,完善的软件开发环境通常具有如下:,(1),软件开发的一致性及完整性维护;,(2),配置管理及版本控制;,(3),数据的多种表示形式及其在不同形式之间自动转换;,(4),信息的自动检索及更新;,(5),项目控制和管理;,(6),对方法学的支持;,软件开发环境与软件开发方法,软件开发方法,(Software Development Method),是指软件开发过程所遵循的办法和步骤。软件开发活动的目的是有效地得到一些工作产物,也就是一个运行的系统及其支持文档,并且满足有关的质量要求。软件开发是一种非常复杂的脑力劳动,所以经常更多讨论的是软件开发方法学,指的是规则、方法和工具的集成,既支持开发,也支持以后的演变过程,(,交付运行后,系统还会变化,或是为了改错,或是为了功能的增减,),。,典型的软件开发和系统演化的活动,分析、设计、实现、确认,(,测试验收,),、演化,(,维护,),覆盖开发全过程,并且便于在各阶段间的过渡;,便于在开发各阶段中有关人员之间的通信;,支持有效的解决问题的技术;,支持系统设计和开发的各种不同途径;,在开发过程中支持软件正确性的校验和验证;,软件开发方法应该考虑的一般因素,软件开发方法应该考虑的一般因素,便于在系统需求中列入设计、实际和性能的约束;,支持设计师和其他技术人员的智力劳动;,在系统的整个生存周期都支持它的演化;,受自动化工具的支持。,此外,在开发的所有阶段,有关的软件产物都应该是可见和可控的;软件开发方法应该可教学、可转移,还应该是开放的,即可以容纳新的技术、治理方法和新工具,并且与已有的标准相适应可称为应用型软件开发环境。,主要的面向对象软件工程方法,CRC,卡,UML,CRC,卡一种简单的面向对象建模方法,CRC,(,Class-Responsibility-Collaborator),卡建模是一种简单且有效的面向对象的分析技术。它由三部分组成:,1.,类,(Class)2.,职责,(Responsibility)3.,协作,(Collaborator),CRC,卡的类,一个类代表许多类似的对象。而对象是系统模型化中关注的事物。他们可以是一个人、地方、事情、或任何对系统有重要性的概念。类名一般列在,CRC,卡的顶部。,CRC,卡的职责,职责是类需要知道或做的任何事物。这些职责是类自身所知的知识,或类在执行时所需的知识。,CRC,卡的协作,协作是指为获取消息,或协助执行活动的其他类。在特定情形下,与指定的类按一个设想共同完成一个,(,或许多,),步骤。协作的类顺着,CRC,卡的右边排列。,CRC,模型,CRC,模型是,CRC,卡的集合,它代表一个应用域或问题域的全部或一部分。,CRC,范例,CRC,模型是最普遍的用户。图中展示了一个航运,/,存货控制系统的,CRC,模型例子,展示的,CRC,卡将被放在一张书桌或工作桌上。注意卡的放置:相互协作的卡是彼此接近的,无关系的卡不能放在附近。,CRC,卡的构建步骤一,1,、,CRC,模型组一起加入,(,模型组包括相关的客户领域人员、设计者、记录员、系统分析员等,),。,2,、安排模型房间。,3,、进行集体自由讨论内容根据此,CRC,模型的系统目标进行,如系统是为谁开发的?那些商业业务需要这个系统的何种支持?工作时需要什么信息?,总之尽量按能达到系统要求实现的目标进行,包括进行活动时对资源、条件、活动及人员的要求。,CRC,卡构建步骤二,4,、讲解,CRC,模型技术,(,完成集体讨论后,设计者将描述,CRC,模型过程。通常需要花费十至十五分钟,该过程包括创造几个,CRC,卡范例,范例参考上图,),。,5,、重复地执行,CRC,模型步骤。,6,、执行用例情景试验用户情景试验是一个任务过程模式,其中用户们将积极地参与以保证需求是准确的。基本的思想是一组商业领域专家(也就是客户方),设计者,系统分析员一步步通过一系列的用例证实,CRC,模能准确地反映出用户的需求。,CRC,模型的优点,CRC,模型就是一种沟通方式,客户方与开发方如何通过这种有效的、易实现、易操作的方式建立一个能描述准确的、双方达成共识的系统需求。,CRC,建模因为用户积极参与到模型的定义中,他们对工作的满意度就会增加,并与开发者们并肩创造这个,CRC,模型,通过这个一连串的模型卡,双方对待建的系统需求目标达成共识。,CRC,卡的缺点,CRC,模型只是一个面向对象应用的用户需求定义的一部分。你也应该考虑到用例,原型,和正式的需求文档。是否要使用,CRC,建模,就根据项目、企业、客户自身存在和所需的条件而定了,面向对象的软件过程,-,喷泉模型,需求阶段,面向对象分析阶段,面向对象设计阶段,编码阶段,集成和测试阶段,运行状态,进一步开发,维护期,喷泉模型的生命周期与结构化方法的生命周期是一致的,但喷泉模型的各个阶段是,迭代和无缝的,。,面向对象的软件过程,-RUP,RUP,的二维开发模型,横轴是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期,(Cycle),、阶段,(Phase),、迭代,(Iteration),和里程碑,(Milestone),;,纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动,(Activity),、产物,(Artifact),、工作者,(Worker),和工作流,(Workflow),。,RUP,的各个阶段和里程碑,-,横向,RUP,中的软件生命周期在时间上被分解为四个顺序的阶段,初始阶段,(Inception),(,生命周期目标里程碑,),前景文档:对核心项目要求、关键性质、主要限制的一般性的前景说明;,初始的用例模型(完成,10,20,);,初始的项目术语表;,初始的商业用例,包括商业环境、验收规范以及成本预测;,初始的风险评估;,项目规划,其中明确阶段和迭代;,商业模型,根据需要可选;,一个或多个原型;,细化阶段,(Elaboration),(,生命周期结构里程碑),构造阶段,(Construction),(,初始运行能力,),交付阶段,(Transition),(,产品发布里程碑),用例模型(至少完成,80,):识别出了所有的用例和角色,以及大多数用例的描述;,调整一些增加的需求,包括非功能性需求以及任何与特定用例无关的需求;,软件体系结构描述;,可执行的体系结构原型;,修订后的风险表和商业用例;,整个项目的开发计划,包括粗略项目规划,显示迭代过程以及相应的评估准则;,更新的开发用例,指定要使用的过程;,初步的用户手册(可选);,在特定平台上集成的软件产品;,用户手册;,对当前版本的描述,;,beta,测试确认新系统达到用户的预期;,与被取代的旧系统并行操作;,功能性数据库的转换;,用户和维护人员培训;,向市场、分销商和销售人员进行新产品的展示,;,RUP,的核心工作流,-,纵向,描述如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程,角色和责任。,描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需要的功能和约束进行提取、组织、文档化;最重要的是理解系统所解决问题的定义和范围。,设计活动以体系结构设计为中心,体系结构由若干结构视图来表达,结构视图是整个设计的抽象和简化。分析设计的结果是一个设计模型和一个可选的分析模型。,目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式,(,源文件、二进制文件、可执行文件,),实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。,目的是验证对象间的交互作用,验证软件中所有组件的正确集成,检验所有的需求已被正确的实现,识别并确认缺陷在软件部署之前被提出并处理。,RUP,提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低了修改缺陷的成本。,目的是成功的生成版本并将软件分发给最终用户。部署工作流描述了那些与确保软件产品对最终用户具有可用性相关的活动,包括:软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下,还可能包括计划和进行,beta,测试版、移植现有的软件和数据以及正式验收。,描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理工作流提供了准则来管理演化系统中的多个变体,跟踪软件创建过程中的版本。同时也阐述了对产品修改原因、时间、人员保持审计记录。,平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。,目的是向软件开发组织提供软件开发环境,包括过程和工具。,UML,语言,Jim Rumbaugh,Grady Booch,Ivar Jacobson,UML,的简介,UML(Unified Modeling Language),是一种构建软件系统和文档的通用可视化建模语言。,UML,能与所有的开发方法一同使用,可用于软件开发的整个生命周期。,UML,能表达系统的静态结构和动态信息,并能管理复杂的系统模型,便于软件团队之间的合作开发。,UML,不是编程语言,但支持,UML,语言的工具可以提供从,UML,到各种编程语言的代码生成,也可以提供从现有程序逆向构建,UML,模型。,UML,并不是万能的,它是一种离散的建模语言,对于特定的领域,比如:,GUI,、,VLSI,电路设计或基于规则的人工智能,用特定的语言和工具可能更合适。,最重要目标,:,UML,是所有建模人员可以使用的通用建模语言。它包含主流建模方法的概念,从而可以替代现有的软件分析和设计方法,比如:,OMT,Booch,OOSE,等。,UML,不是完整的开发方法,它不包括逐步的开发流程,但它提供所有必要的概念,具备足够的表达能力。,UML,的另一个目标是:能尽量简洁地表达系统的模型。,UML,的目标,UML,概念可以划分为以下范围:,系统需求,静态结构,动态行为,交互行为,物理实现,各种图之间的关系,模型组织,扩展机制,UML,的主要概念,用例视图,(Use Cases View),从外部用户的角度来描述系统的行为,它将系统功能划分为对用户有意义的事务,这些事务被称为,用例,,,用户被称为,执行者,,,用例视图,也就是描述活动者在各个用例中的参与情况,它指导所有的行为视图。,系统需求,静态视图,(Static View),,一个模型必须首先定义各种事物的内部特征和相互之间的关系,应用概念建模成,类,,类描述事物的,属性,和以及在这些属性上的,操作,。类之间可以存在不同的,关系,,比如,泛化,(继承)、,关联,和,依赖,等,静态视图表示成,类图,,静态视图在某一时刻的快照称为,对象图,。,静态结构,状态机视图,(State Machine View),,通过对每个类的对象的生命周期进行建模,描述了对象时间上的动态行为。,状态机,是由,状态,和,迁移,组成的图,状态机通常附属于类,描述类实例对接受,事件,的响应。,活动视图,(Activity View),是利用状态机对运算和,工作流,进行建模的特殊形式。,活动图,的状态代表了运算执行的状态,而非一般对象的状态,活动图和流程图很相似,不过它支持并发。,动态行为,交互视图,(Interaction View),,对象通过交互来实现行为,交互视图通过,协作,来进行建模,协作具有结构和行为两个方面,结构包含为行为方面而定义的一系列角色和关系,行为方面是绑定于角色的对象间的一系列交换的消息,这些消息在协作中称为,交互,,消息序列可用两种图来表示:,顺序图,(重点在消息的时间顺序)和,协作图,(重点在交换消息的对象间的关系)。,交互行为,物理视图,(Physical View),,许多系统模型独立于最终的实现,在实现方面,必须充分考虑系统的重用性和性能。,UML,有两种视图来表示系统的实现:,实现视图,和,部署视图,,实现视图将可重用的系统片段打包成,组件,,部署视图描述系统运行时资源的物理分布,这些资源称为,结点,。,物理实现,静态视图(类图,对象图),物理视图(实现视图,部署视图)是描述系统的静态结构。,用例图是描述系统的外部视图。,活动图描述系统的外部,/,内部视图。,交互视图(顺序图,协作图)描述系统的内部视图。,状态图描述单个类的动态行为。,各种图之间的关系,模型管理视图,(,Model Management View),,任何大系统必须划分为较小的单元,以使人们能在某一时刻只接触有限的信息,不影响团队间的并行工作。模型是利用,包,(Package),和,包的依赖,来进行管理的。包是,UML,模型中通用的层次组织结构,包上的依赖总结了包内容的依赖关系。,模型组织,扩展机制,(Extension Mechanisms),,,UML,能满足绝大部分系统建模的需要,但任何语言都不是万能的,它必须考虑一定的扩展机制,,UML,的扩展机制包括,约束,、,标签值,和,原型,。这些扩展机制可以用来为特定领域剪裁,UML,的配置,这样带来一些好处:根据自身需要来使用建模语言。,扩展机制,一个模型必须首先定义各种事物的内部特征和相互之间的关系,下面介绍一些基本的模型元素:,分类,:,类(,Class,),接口(,Interface,),子系统(,Sub System,),执行者(,Actor,),用例(,Use Cases,),组件(,Component,),结点(,Node,),注释(,Comment),关系:,关联(,Association,),泛化(,Generalization,),依赖(,Dependency,),实现(,Realization,),约束(,Constraint),静态视图:,类图,对象图,静态建模,类,是具有相同属性、操作和关系的对象集合的总称。通常在,UML,中类被画成矩形,,包括三个部分:名称、属性和操作。,名称:,每个类都必须有一个名字,用来区分其它的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如,Wall,、,java:awt:Wall,都是合法的类名。,属性:,类可以有任意多个属性,也可以没有属性。在类图中属性只要写上名字就可以了,也可以在属性名后跟上类型甚至缺省取值。,操作:,操作是类的任意一个实例对象都可以调用的,并可能影响该对象行为的实现。,静态建模,-,类,类名,属性,操作,接口,是未给出实现的对象行为的描述,接口包含操作,但没有属性,一个或多个类可以实现接口,每个类实现接口的操作。,String,isEqual(String):Boolean,Hash():Integer,Hashable,Comparable,接口标记,静态建模,-,接口,任何大系统都必须划分为较小的单元,以便人们在某一时刻可以和有限的信息工作,使团队的工作不相互影响。,包可以包含各种模型元素和其它的包,包之间还可能存在一定的依赖。,Finances,Credits,Accounts,BankInterface,静态建模,-,子系统(包),执行者,是与系统、子系统或类交互的外部人员,进程或事务。在运行时,具体人员会充当系统的多个执行者,不同用户可能会成为一个执行者。,Student,Professor,Billing System,Registrar,静态建模,-,执行者,用例,是系统提供的外部可感知的功能单元,用例的目的是定义清晰的系统行为,但不解释系统的内部结构。,用例可以与执行者关联,也可以参与其他的多种关系,比如扩展、泛化和包含等。,用户的动态部分用交互视图来描述,比如顺序图、协作图。,用例用椭圆来表示,用例名标在椭圆下方,用实线与同自身通信的用户相连。,Maintain Curriculum,静态建模,-,用例,Registrar-maintain the curriculum,Professor-request roster,Student-maintain schedule,Billing System-receive billing information from registration,Maintain Schedule,Maintain Curriculum,Request Course Roster,静态建模,-,用例,用例图,描述执行者在各个用例中的参与情况。,Student,Registrar,Professor,Maintain Schedule,Maintain Curriculum,Request Course Roster,Billing System,静态建模,-,用例图,组件,是可重用的系统片段,具有良好 定义接口的物理实现单元。每个组件 包含了系统设计中某些类的实现。,组件设计的原则,:良好的组件不直接 依赖于其它组件,而是依赖于其它组 件所支持的接口。这样的好处是系统 中的组件可以被支持相同接口的组件 所取代。,一个组件可能是,源代码,、,可执行程序,或,动态库,。,Student,静态建模,-,组件,结点,代表系统运行时的物理对象,结点通常拥有运算能力,它可以容纳对象和组件实例。,Registration,Database,Library,Dorm,Main,Building,静态建模,-,结点,注释,用于解释设计的思路,便于理解。,一个好的模型应该有详尽的注释。,Represents,an incorporated entity,Company,注释,静态建模,-,注释,关联,描述了系统中对象和其它实例之间的离散的连接,关联是有序的,它允许重复,关联的实例是,链,。,关联至对象的连接点称为,关联端点,,很多信息被附在关联端点上,它拥有角色名、重数(多少个类的实例可以关联于另一个类的实例),可见性等。,关联有自己的名称,可以拥有自己的属性,这时关联本身也是类,称为,关联类,。,静态建模关系关联,Manages,Job,boss,worker,employee,employer,1.*,*,*,0.1,Company,Person,Job,Salary,角色名,重数,关联名称,关联类,二元关联,自关联,聚集,(,Aggregation,)用来表达整体部分关系的关联。,组合,(,Composition,)是一种聚集,是关联更强的形式。,Polygon,Point,1,3.*,points,Contains,Polygon,Window,Slider,1,2,Scrollbar,Header,1,Title,1,1,Panel,1,Body,聚集,组合,静态建模关系聚合和组合,泛化,是一般化和具体化之间的一种关系。,继承,就是一种泛化关系,更一般化的描述称为,双亲,,双亲的双亲称为,祖先,,更具体化的描述称为,孩子,,在类的范畴,双亲对应超类,孩子对应子类。,Tree,Oak,Elm,Birch,孩子,双亲,Person,Student,Graduate,祖先,静态建模关系泛化,多重继承,:一个孩子可以从多个双亲继承属性和方法。多重继承可能存在,冲突,,因为被继承的双亲可能存在相同的类声明,这时,最好显式解决冲突问题。,Assistant,Teacher,Student,静态建模关系多重继承,依赖,指明两个或两个以上模型元素之间的关系。,依赖有很多种类,比如:实现(,realize,)、使用、(,usage,)、实例化(,instantiate,)、调用(,call,),派生(,derive,)、访问(,access,)、引入(,import,)、友元(,friend,)等等。,Application Server,DataBase,依赖类型,静态建模关系依赖,实现,是依赖的一种,但由于它具有特殊意义,所以将它独立讲述。实现是连接说明和实现之间的关系。,String,isEqual(String):Boolean,Hash():Integer,Comparable,Comparable,isEqual(String):Boolean,Hash():Integer,实现,特殊的实现标记,静态建模关系实现,约束,用来表示各种限制,如关联路径上的限制,和属性特征检测(存在、所有)。,Person,Committee,Member-of,约束,Chair-of,subset,静态建模关系约束,静态视图,是,UML,的基础,静态视图表示为类图,主要是描述类和类之间的关系。,继承,关联,Person,House,residence,0.*,owner,0.*,FinancialInstitution,client,creditor,0.*,0.*,Mortgage,principal,rate,term,关联类,ordered,0.*,1,Bank,TrustCompany,静态建模类图,对象图是系统在某一时刻的快照。,Smith:Person,cottage:House,home:House,first:Mortgage,second:Mortgage,RoyalBank:Bank,链,静态建模对象图,状态机图,用例图,活动图,顺序图,协作图,动态建模,状态机图,是对单个类的对象的生命周期进行建模,描述了对象时间上的动态行为,每个对象被认为是,事件驱动,的孤立实体。,状态机图是由,状态,和,跃迁,组成的图,通常状态机附属于类,描述类实例对接受事件的响应。,事件,表达对象间的调用、显式信号、值的改变或时间的推移。,调用事件、变更事件、信号事件、时间事件,状态,描述对象生命周期的一段时间,可以是等待其它事件时所处的时间,或是执行某一活动时所处的时间,状态分为,简单状态,和,复合状态,。,动态建模,-,状态机图,跃迁,定义对象对某一事件发生的反应,通常,迁移具有,触发事件,、,跃迁条件,、,动作,和,目标状态,。,跃迁的种类有,外部跃迁,和,内部跃迁,。外部跃迁是最普通的跃迁,会发生状态改变;内部跃迁不发生状态改变。,跃迁有两个隐式动作:,进入动作,和,退出动作,。无论何时进入和退出时都要执行,这方便进入时进行初始化工作,退出时进行资源的释放工作。,动态建模,-,状态机图,created,ready,HandleEvent,InitializeObject,TerminateObject,Wait forEvent,start/master.ready(),poll/master.ack(),stop/,初始状态,结束状态,状态机,状态,触发事件,动作表达式,跃迁,用例图,描述各个执行者在各个用例中的参与情况,描述系统为用户所感知的外部视图。,用例图的功能:,捕获系统用户需求,描述系统边界,指明系统外部行为,指导系统开发者的功能开发,系统建模的起点,指导所有的类图和交互图的设计,产生测试用例,用户文档,估计项目大小和进度。,动态建模,-,用例图,Customer,Salesman,Supplier,Supervisor,Sale,Management,Supply,执行者,用例,系统边界,活动图,是用状态机对工作流进行建模的特殊形式,它和流程图很类似,不过它支持并发控制。,活动图一般不描述所有的运算细节,它显示活动的流,但不显示执行活动的对象。,活动图处于系统的外部和内部视图之间,所以它可以作为设计的起点,为了完成设计,每个活动必须扩展成一个和多个操作,每个操作被指派给特定的对象来实现。,将商业组织控制的活动划分在一起,这类划分可以通过分隔的区域来表达,由于它们的外观,每个区域称为,泳道,(,swimlane,)。,动态建模,-,活动图,Customer,Sales,Stockroom,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,对象,对象行为是通过交互来实现的,,交互,是对象间为完成某一目的而进行的一系列,消息,交换。,消息,是对象间的单向通信,从发送者到接受者的携带信息的控制流。消息可能带有,值参,。,消息序列可用两种图表示:,顺序图,(重点在消息的时间顺序)和,协作图,(重点在交换消息的对象间的关系)。对协作图来说,时间顺序可以从顺序号获得。,动态建模,-,交互视图,顺序图,用二维表来表示交互,纵向是时间轴,横向是参与的角色以及它们交换的消息。,角色的生命周期表现为,生命线,,一条垂直的线,在激活的时间段里是双线,在状态保持的时间里是虚线。,消息表示为从一条生命线出发到另一条生命线的有向线,从上而下,表示消息的时间顺序。,动态建模,-,顺序图,Caller,Operator,Callee,时间轴,call,ack,number,call,ack,talk,transfer,顺序图,生命线,激活,状态保持,角色,协作图,包含分类角色和关联角色,当它实例化时,对象被绑定到分类角色,链被绑定到关联角色,.,关联角色还可能被各种暂时性的链来充当,如过程参数和局部过程变量,链可以指定暂时性的原型:,、,或自身调用,。,协作图对实现协作的对象和链进行建模,而忽略其他对象。,动态建模,-,协作图,Student,Registration Form,Registration Manager,1:fill in info,2:submit,3:add(smith,math),math,4:add(smith),通常在一个协作图中每个对象分配一个符号,然而有时不同状态的对象需要显式指出,,流,将同一个对象的不同状态版本关系在一起,使用,原型。流的,原型不太常用。,:Controller,:Directoryclosed,:Directoryopen,1:expand(),2:sort(),1.1,流,物理架构,-,实现视图,实现视图,描述可重用的系统组件以及组件之间的依赖。,Course,Course,Offering,Student,Professor,Course.dll,People.dll,Course,User,Register.exe,Billing.exe,Billing,System,部署视图,描述系统资源在运行时的物理分布,系统资源成为结点。,Registration,Database,Library,Dorm,Main,Building,物理架构,-,部署视图,UML,是一种建模语言而不是方法,这是因为,UML,中没有过程的概念,而过程正是方法的一个重要组成部分。,UML,本身独立于过程,这意味着用户在使用,UML,进行建模时,可以选用任何适合的过程。,一般采用的建模过程有:,喷泉模型,、,迭代递增开发模型,。,UML,建模过程,UML,建模过程,-,瀑布开发模型,需求阶段,面向对象分析阶段,面向对象设计阶段,编码阶段,集成和测试阶段,运行状态,进一步开发,维护期,设计,编码,测试,更多需求与分析,迭代递增开发模型,最初需求与分析,产品,维护请求,1,需求,最初,需求规格说明,应当由代表系统最终用户的人员提供,内容包括系统基本功能需求和对计算机系统的要求。,2,分析,分析的任务是找出系统的所有需求并加以描述,同时建立模型,以定义系统中的关键领域类,应由系统用户和开发人员合作完成。,分析的,第一步是定义用例,,以描述所开发系统的外部功能需求。用例分析包括阅读和分析需求说明,此时需要与系统的潜在用户进行讨论。,迭代递增开发模型,3,设计,设计阶段的任务是通过综合考虑所有的技术限制,以扩展和细化分析阶段的模型。,设计阶段可以分为两个部分:,结构设计,是高层设计,其任务是定义包(子系统),包括包间的依赖性和主要通信机制。我们希望得到尽可能简单和清晰的结构,各部分之间的依赖尽可能的少,并尽可能的减少双向的依赖关系。第二部分是,详细设计,,细化包的内容,使编程人员得到所有类的一个足够清晰的描述。,结构设计,一个设计良好的系统结构是系统可扩充和可变更的基础。包实际上是一些类的集合。类图中包括有助于用户从技术逻辑中分离出应用逻辑(领域类),从而减少它们之间的依赖性。,详细设计,详细设计的目的是通过创建新的类图、状态图和动态图(顺序图、协作图和活动图),描述新的技术类,并扩展和细化分析阶段的对象类。,4,实现,构造或实现阶段是对类进行编程的过程。可以选择某种面向对象对象编程语言(如,Java,)作为实现系统的软件环境。,Java,很容易实现从逻辑视图到代码部件的映射,因为类到,Java,代码文件之间是一一映射关系。,在实现阶段中,可以选取各种图的说明来辅助编程,比如:类图,状态图和动态图等。,5,测试和配置,完成系统编码后,需要对系统进行测试,它通常包括:,单元测试,、,集成测试,、,系统测试,和,验收测试,。,在单元测试中使用类图和类的规格说明,对单独的类或一组类进行测试;在集成测试中,使用组件图和合作图,对各组件的合作情况进行测试;在系统测试中,使用用例图,以检验所开发的系统是否满足例图所描述的需求。,系统的配置是实际地交付系统,包括文档和组成模型等。,ROSE,是美国,Rational,公司的面向对象建模工具,利用这个工具,我们可以建立用,UML,描述的软件系统的模型,而且可以自动生成和维护,C+,、,Java,、,VB,、,Oracle,等语言和系统的代码。,ROSE,的界面分为三个部分,Browser,窗口,、,Diagram,窗口,和,Document,窗口,。,Browser,窗口用来浏览、创建、删除和修改模型中的模型元素;,Diagram,窗口用来显示和创作模型的各种图;而,Document,窗口则是用来显示和书写各个模型元素的文档注释。,Rose,的使用,Browser,窗口,Diagram,窗口,Document,窗口,Specification,对话框,工具栏,工具箱,Browser,窗口有四个视图,:,Use Case,Logical,Component,Deployment,在,Use Case,视图的图的类型有:用例图、顺序图、协作图和活动图。,在,Logical,视图中的类型有:类图和状态图。,在,Component,视图的图的类型有:组件图。,在,Deployment,视图的图的类型有:部署图。,用例图,顺序图,协作图,活动图,类图,状态图,组件图,部署图,很多教科书上的第一个程序就是,Hello world,,一个在屏幕上简单地打印出,“,Hello world!”,语句的例子。,在,java,中一个在浏览器中显示,“,Hello World!,”,的,Applet,的,代码如下:,import java.awt.Graphics;,class HelloWorld extends java.applet.Applet,public void paint(Graphics g),g.drawString(Hello World!,10,10);,实例一,Hello World,用例图,HelloWorld,HelloWorld,类,HelloWorld,Paint(),g.drawString(Hello World!,10,10),注释,类图,HelloWorld,Paint(),Applet,Graphics,继承,使用依赖,顺序图,:Thread,:Toolkit,:ComponentPeer,target:HelloWorld,run,callbackLoop,handleExpose,paint,执行者,读者,图书馆员,管理员,用例,图书馆管理,实例二图书馆系统,用例图,读者用例图,图书馆员用例图,管理员用例图,下载网站:,UML,建模工具:,ROSE;,2.UML2.x,建模工具,TrufunPlato2008;,3.,开源,UML,建
展开阅读全文