您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > chap5_面向对象分析和设计
高级软件工程2面向对象方法•概述•面向对象的分析和设计方法•UML建模3什么是面向对象(ObjectOriented,OO)?•面向对象是一种风范(Paradigm),是一种观察和分析问题的方法论(Methodology)•从本质上来说,面向对象方法是确定动作的主体在先(先确定系统中的对象),执行动作在后(再确定在这些对象上可能实施的操作)–传统的面向过程的程序设计,最关心的是过程•面向对象技术:是一种软件系统设计的工程技术,将“对象”作为软件系统的基本组成单元,将数据及其上作用的操作一起封装,以标准的接口规范对外提供服务4面向对象技术的基本观点•客观世界是由对象组成的•从动态观点看,对对象施加的操作就是该对象的行为•具有相同数据和相同操作的对象可以归并为一个类,对象是类的一个实例•对象之间通过消息传递相互联系•类具有封装性•类可以派生出子类,子类继承父类的全部特性,又可以有自己的新特性5面向对象技术的发展历史•初始阶段(60年代末~80年代中期)–挪威,Simula语言:引入了类的概念和继承机制–Xerox,Smalltalk语言•发展阶段(80年代中期到90年代)–面向对象编程语言的繁荣:C++、ObjectPascal、Java等•成熟阶段(90年代中期以后)–面向对象分析和设计方法的发展与规范:Booch方法、Rumbaugh的OMT方法、Coad/Yourdon方法、Jacobson的OOSE方法等–形成一整套面向对象软件工程体系6面向对象的基本概念•对象(Object)–由一组属性和在这些属性数据上的容许操作对组成•类(Class)•封装(Encapsulation)•继承(Inheritance)•多态性(Polymorphism)•消息(Message)7面向对象的软件工程•面向对象的分析(OOA):分析和理解问题域,找出类及对象,分析它们的内部构成和外部关系•面向对象的设计(OOD):运用面向对象技术进行软件设计•面向对象的编程(OOP):用面向对象的编程语言将设计模型转换成程序•面向对象的测试(OOT):运用OO技术进行以对象概念为中心的软件测试,以类作为基本测试单位•面向对象的维护(OOM)8喷泉模型•迭代和无间隙特征–迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统–无间隙:开发活动之间不存在明显的边界9面向对象分析一般步骤如下:1.获取客户对系统的需求:包括标识场景(scenario)和用例(usecase),建造需求模型2.用基本的需求为指南,选择类和对象(包括属性和操作)3.定义类的结构和层次4.建造对象-关系模型5.建造对象-行为模型6.利用用例/场景来复审分析模型10面向对象设计1.系统设计•子系统划分•选择实现数据管理、界面支持和任务管理的设计策略•为系统设计合适的控制机制•复审并考虑权衡2.对象设计•在过程级别设计每个操作的实现细节•定义内部类•为类属性设计内部数据结构3.消息设计·使用对象间的协作和对象--关系模型,设计消息模型4.复审·复审设计模型并在需要时迭代11代表性的OO分析与设计方法•Booch方法•Rumbaugh的对象模型化技术(OMT)•Coad和Yourdon方法•Jacobson的OOSE(面向对象软件工程)12建模四原则①选择建立什么样的模型对如何发现和解决问题具有重要的影响。②每个模型可以有多种表达方式。③最好的模型总是能够切合实际。④孤立的模型是不完整的。任何好的系统都是由一些几乎独立的模型拼凑出来的。13面向对象的建模语言——UML统一建模语言(UnifiedModelingLanguage,UML):一种直观化、明确化、构建和文档化软件系统产物的可视化建模语言BoochUnifiedMethod0.8UML1.0OMTOOSE/ObjectoryUML0.9OOPSLA´95´96BetaversionOOPSLA´96SubmissiontoOMG,Jan´97DocumentationSet‘97OMGVote,Oct‘97UML1.4Sep.2001UML1.2,1.3’98~’99Mar.2003UML1.5PresentUML2.014UML的诞生-Rational三剑客JimRumbaughGradyBoochIvarJacobson15UML是什么?•UML是Booch、OOSE和OMT方法的结合,同时吸收了其他方法的思想•UML是一种语言•UML是一种可视化的建模语言•UML是一种可用于详细描述的语言•UML是一种构造语言•UML是一种文档化语言16UML的主要组成•视图(View):用于构造系统模型•图(Diagram):用于描述视图•模型元素:用于表示图的一组符号17UML中的视图(View)•用例视图(UseCaseView):描述系统应该具有的功能集•设计视图(DesignView):描述系统功能的内部设计和协作情况,包括静态结构和动态行为•进程视图(ProcessView):描述系统的并发工作状况,包含并发与同步的线程和进程•实现视图(ImplementationView):描述系统的实现模块(组件或者文件)及其之间的关系•部署视图(DeploymentView):描述系统的物理架构和硬件拓扑结构的节点18视图与图主题域视图(view)图(diagram)结构化静态视图类图(class)设计视图内部结构(internalstructure)协作图(collaboration)构件图(component)用例视图用例图(usecase)动态的状态机视图状态机图(statemachine)活动视图活动图(activity)交互视图顺序图(sequence)通信图(communication)物理的部署视图部署图(deployment)模型管理模型管理视图包图(package)19UML定义的图图名功能备注类图描述类、类的特性以及类之间的关系UML1原有对象图描述一个时间点上系统中各个对象的一个快照UML1非正式图复合结构图描述类的运行时刻的分解UML2.0新增构件图描述构件的结构与连接UML1原有部署图描述在各个节点上的部署UML1原有包图描述编译时的层次结构UML中非正式图用例图描述用户与系统如何交互UML1原有活动图描述过程行为与并行行为UML1原有状态机图描述事件如何改变对象生命周期UML1原有顺序图描述对象之间的交互,重点在强调顺序UML1原有通信图描述对象之间的交互,重点在于连接UML1中的协作图定时图描述对象之间的交互,重点在于定时UML2.0新增交互概观图是一种顺序图与活动图的混合UML2.0新增20UML2.0与1.4的比较•对UML1.4进行了一些扩充。•用更为受限的通信图代替了协作图。•增加了交互综述图、定时图、协议状态图、组成结构图等新图。21•模型元素模型元素指模型中的实体以及实体间相互连接的关系部分模型元素注解类属性操作对象:类属性操作状态用例节点供应接口包依赖关联泛化主动类属性操作请求接口构件实现22简单的UML例子•例子描述:–在Web浏览器中,编写JAVA程序Hello,World!importjava.awt.Graphics;classHelloWorldextendsjava.applet.Applet{publicvoidpaint(Graphicsg){g.drawString(Hello,World!,10,10);}}23HelloWorld类图1类注释24HelloWorld类图2继承关系依赖关系25HelloWorld顺序图Paint的顺序图26HelloWorld的UML图(续)HelloWorld包HelloWorld构件图27基于UML的分析、设计和实现•描述需求:使用用例来确定用户需求和系统必须为用户提供的服务•静态建模:根据需求建立系统的静态模型•动态建模:描述系统的动态行为参与者用例问题陈述分析模型视图模型数据库实现模型动态模型静态模型设计模型28一、用例模型和用例图29现代需求实践实践名称描述用例(Usecase)描绘一个系统外在可见的需求情况,是代表系统中各个项目相关人员(风险承担人,Stakeholder)之间就系统的行为所达成的契约用户故事(userstory)由客户参与编写,说明他们需要系统为他们做什么,一般用客户的术语编写,其长度约为三句话左右•共性:站在用户的角度看待系统、定义系统;使用用户能够看懂的语言来表述30需求获取•采用场景和用例的技术,是需求获取过程中弥补多个具有不同背景的参与者团队之间代沟的有力工具•场景:表达了用户和系统之间的一系列交互,描述了一个系统实例•用例:是对一类场景所进行的抽象•场景和用例两者一般均用自然语言描述,这一形式对用户而言是易于理解的31用例驱动开发过程•知名的“用例驱动”的开发过程代表:RUP•在这些开发过程中,开发人员首先捕获客户的需求,并以用例的形式组织成用例模型。然后分析并设计系统来满足这些用例,因此在用例模型之后就是分析模型,接着是设计模型和实施模型。在实现了整个系统之后,还将根据用例模型设计出测试模型来对系统进行验证•这些模型之间并不是线性转变的,它们是一个迭代、增量的开发过程。也就是在整个项目开发周期中,将会多次经过这五个模型的迭代,每次都将越来越精化32用例模型的用处–客户:详细说明系统应有的功能和使用方法–开发人员:理解系统的需求,作为后续工作的基础–测试人员:验证系统实现是否与用例模型说明的功能一致–文档人员:为编写用户手册提供参考33基于用例技术的需求获取活动•(1)标识参与者•(2)标识场景•(3)标识用例•(4)求精用例•(5)标识用例之间的关系•(6)标识非功能需求•(7)绘制用例图,编写详细的用例描述34用例图•用例图包含的模型元素–系统–参与者(actor):与系统进行交互的外部实体。可以是人或者其它系统–用例:描述系统提供的功能(从外部视点角度)–模型元素之间的关系•参与者之间:继承关系•参与者与用例之间:关联关系•用例之间:继承、扩展和包含关系35参与者•系统外部的一个实体。是直接与系统相互作用的系统、子系统或类的外部实体的抽象•参与用例的执行过程。通过向系统输入或请求系统输入某些事件来触发系统的执行•它是用户所扮演的角色,是系统的用户。每个参与者定义了一个角色集合每个参与者可以参与一个或多个用例36参与者的种类①系统用户②与所建造的系统交互的其他系统③一些可以运行的进程④硬件设备⑤时钟⑥……参与者是为了完成一个事件而与系统交互的实体,是用户相对系统而言所演的角色。参与者不仅可以由人承担,还可以是事物37参与者的例子1)其它软件系统:当系统需要与其它系统交互时,如ATM柜员机系统中,银行后台系统就是一个参与者;2)硬件设备:如果系统需要与硬件设备交互时,如在开发IC卡门禁系统时,IC卡读写器就是一个参与者;3)时钟:当系统需要定时触发时,时钟就是参与者38参与者的UML表示UML中的Actor实际上是一个版型化的类,可以有三种表示形式Icon形式Label形式Decoration形式39参与者间的关系•在用例图中,使用泛化关系来描述多个参与者之间的公共行为。•参与者间的泛化关系示例:参与者实际上是一个类,因此它们之间可以存在一定的关系40用例•用例:是能够被参与者感受到的、系统将完成的一系列动作,是一个完整功能–这些动作除了完成系统内部的计算工作外,还包括与参与者通信。•用例是对一组动作序列的描述,系统通过执行这一组动作序列为参与者产生一个可观察的结果•不是需求或功能的规格说明,但是也展示和体现其所描述的过程中的需求情况•用例通过关联与参与者连接–关联指出一个用例与哪些参与者交互41用例图举例42用例的命名从参与者的角度出发进行命名(如使用“登录”而不用“身份验证”)使用动宾结构或主谓结构命名.尽量使用行业术语(如用“报销”,而不用
本文标题:chap5_面向对象分析和设计
链接地址:https://www.777doc.com/doc-3195475 .html