您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 清华大学殷仁昆教授讲授《软件工程》讲义-04
软件工程1软件工程第四章面向对象技术4.1面向对象的概念4.2Rational统一开发过程4.3UML统一建模语言软件工程2客观世界中的应用问题面对的主体都是物理的或概念的实体。从这些实体出发,分析实体的作用、责任以及它们之间协作,从而找出问题的解,是很自然的。面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是问题领域中识别出来的各种对象。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习惯相一致。4.1面向对象的概念软件工程3什么是面向对象PeterCoad和EdwardYourdon提出面向对象方法的概念:面向对象=对象+分类+继承+消息通信采用这四个概念开发的软件系统就是面向对象的软件系统。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。软件工程4面向对象范型的特点面向对象系统中的对象是数据抽象与过程抽象的综合体。所谓过程抽象是指当使用某个过程时,无需关心过程内部的实现细节,只要知道如何调用该过程以及该过程完成什么功能即可。所谓数据抽象是指使用结构或记录等方式把某个实体的数据集中起来,使得使用者能够以单元为单位使用数据。面向对象范型在数据抽象中组织过程抽象。软件工程5面向对象系统的状态分别保存在各个对象的数据存储中,而不是保存在一些全局变量中。系统解决问题的控制流包含在各个对象中的操作内。并通过消息传递,控制流从一个对象转移到另一个对象。算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。软件工程6面向对象的特点抽象性:对象包含数据抽象和行为抽象;封装性:信息隐蔽(使用与实现分开);共享性:同一个类中所有对象共享相同的数据结构和行为;同一应用中的对象通过继承关系,共享共同的数据结构和行为;不同应用中的对象通过复用,共享数据结构和行为。软件工程7对象(object)对象是系统中描述客观事物的实体,是构成系统的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。对象=对象名+数据(属性)+操作(行为)属性值一般只能通过执行对象的操作来改变。操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。对象可以是外部实体、信息结构、事件、角色、组织结构、地点或位置、操作规程等。软件工程8计算机窗口中的三个多边形对象(50,60)(50,85)(35,60)(35,85)(50,45)(60,35)(56,10)(46,37)(10,50)(20,20)(23,30)软件工程9表示多边形的三个对象drawmove(x,y)contains?(aPoint)(10,50)(20,20)(23,30)triangledrawmove(x,y)contains?(aPoint)(46,37)(50,45)(60,35)(56,10)quadrilateral1drawmove(x,y)contains?(aPoint)(35,60)(35,85)(50,85)(50,60)quadrilateral2软件工程10类(class)把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了类。类的定义包括一组数据属性和在数据上的一组合法操作。属于某一个类的各个对象都是该类的实例(instance),它们都可使用类中的操作。类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态。软件工程11由两个四边形对象导出一个类drawmove(x,y)contains?(aPoint)(46,37)(50,45)(60,35)(56,10)quadrilateral1drawmove(x,y)contains?(aPoint)(35,60)(35,85)(50,85)(50,60)quadrilateral2drawmove(x,y)contains?(aPoint)point1point2point3point4quadrilateral软件工程12消息(message)消息是一个对象向另一个对象传递的信息。有四类消息:发送对象请求接收对象提供服务、发送对象激活接收对象、发送对象询问接收对象、发送对象仅传送信息给接收对象。消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的),如quadrilateral1.move(15,20)。接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来。软件工程13继承(inheritance)如果某几个类之间具有共性的东西(属性和行为),抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。继承是使用已有的类定义做为基础建立新类的定义技术。已有的类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。软件工程14建立继承结构的好处:易编程、易理解代码短,结构清晰易修改共同部分只要在一处修改即可易增加新类只须描述不同部分怎样建立一个好的继承层次类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。软件工程15a)建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。起重车类汽车类汽车载重车大轿车救火车起重车软件工程16b)增加一个新类拖拉机。它的底盘、发动机等与汽车不同,但驱动装置、轮胎等与汽车相同。调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。车辆是抽象类,相关操作到子类汽车找。汽车拖拉机车辆汽车拖拉机软件工程17c)另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的泛化类。三角形类四边形类多边形类六边形多边形四边形三角形软件工程18d)前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。多继承软件工程19多态性和动态绑定对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。退休者教师退休教师软件工程20多态性指同名的函数或操作可在不同类型的对象中有各自相应的实现。例如a)整数“+”:整数加法b)浮点数“+”:浮点数加法c)字符串“+”:字符串连接d)点“+”:两个点的坐标位置分别叠加具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此即动态绑定。软件工程21例如,想要在屏幕上画一系列多边形,多态性允许发送消息draw,根据消息接收对象的类型不同,画出不同的多边形。draw针对的是一系列的类型(类族)而不仅仅是一个类型。多态性的实现有2种:利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。软件工程22利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。动态绑定保证在程序执行时实施与对象P连接的操作。如果P是矩形类的实例,则执行与矩形连接的操作,如果P是三角形类的实例,则执行与三角形连接的操作。动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。软件工程234.2Rational统一开发过程1.最佳软件开发实践为了以一种更好的、迭代的、可预测的方式开发软件产品,总结了软件开发的最佳实践:1)迭代式软件开发;2)需求管理;3)基于构件的软件体系结构;4)建立软件可视化模型;5)不断验证软件质量;6)控制变更。软件工程242.Rational统一开发过程软件开发过程的作用是:1)成为开发组活动顺序的向导。2)详细说明需要开发哪些制品,何时开发。3)指导每一个成员及整个开发组的工作。4)提供监控和度量项目产品和活动所依据的准则。如果没有一个良好定义的过程,开发组将各行其是,开发成功与否完全依赖个别优秀的人才,这不是能够长久的。软件工程25Rational统一开发过程(RUP,RationalUnifyProcess)描述了如何在软件开发组织中严格分配任务和职责的方法。RUP是一个过程产品,软件过程也是软件。RUP采用二维的过程结构:横轴表明过程的生存周期,它反映了过程被激活时的动态情况,用周期、阶段、迭代和里程碑表示。纵轴表明过程的静态状况,通过过程构件、活动、工作流、制品和工作人员描述过程。软件工程26初始细化构造移交阶段初始化细化#1细化#2构造#1构造#2构造#3移交#1移交#2迭代工作流业务建模需求分析与设计实现测试实施配置和变更管理项目管理环境沿时间轴的组织结构沿内容轴的组织软件工程273.过程的静态描述:过程模型过程模型中的主要模型元素有4种:工作人员:谁做(Who)活动:怎么做(How)制品:做什么(what)工作流:何时做(when)1)过程的中心概念是工作人员,工作人员不是指某一个人,而是指完成工作的角色。工作人员定义人们应履行的行为和职责。软件工程282)活动定义了工作人员所执行的工作。有3类步骤:a)思考步骤b)执行步骤c)评审步骤3)制品是过程生产、修改或使用的一些信息。RUP的制品分为5个信息集。a)管理集:计划制品、操作制品b)需求集:构想文档、项目相关人员需求、用例模型和业务模型软件工程29c)设计集:设计模型、软件体系结构描述、测试模型d)实现集:源代码和可执行程序、相关数据结构和数据文档e)实施集:安装资料、用户文档、培训材料4)工作流用来描述生成结果的活动序列,用以描述工作人员之间的交互。在RUP中共有9个核心过程工作流,包括6个核心工程工作流和3个核心支持工作流。软件工程30a)业务建模工作流:描述业务过程的本质和执行情形。b)需求工作流:定义系统构想,使用用例模型和补充规格说明定义系统软件需求,管理系统范围和需求变更。c)分析和设计工作流:研究实现环境和系统构件的效用,定义软件的组织结构,把需求获取结果转化为实现规格。d)实现工作流:建立代码的分层结构,实现类和对象,进行单元测试和系统集成。软件工程31e)测试工作流:根据事先定义的度量和准则检查产品,确认产品是否满足或者超出事先定义并被一致接受的需求。f)实施工作流:在实际使用环境中测试软件、包装要交付的软件、发布软件产品、培训最终用户及销售人员。核心支持工作流有a)项目管理工作流b)配置和变更管理工作流c)环境工作流软件工程324.过程的动态描述:迭代开发将一个大项目分解为可连续应用瀑布模型的几个小部分。在对一部分进行分析、设计、实现并确认后,再对下一部分进行分析、设计、实现和确认。以此进行下去,直到整个项目完成。在RUP中,迭代过程分为几个阶段。初始细化构造移交生存周期构架里程碑生存周期目标里程碑最初运行能力里程碑产品发布里程碑时间软件工程331)初始阶段:确定最终产品的构想及其用例,定义项目范围。2)细化阶段:计划需完成活动和资源,详细说明产品特性并设计软件体系结构。3)构造阶段:构造整个产品,逐步完善软件体系结构和计划,直到产品(完整的构想)已完全准备好交付给用户。4)移交阶段:移交产品给用户,包括制造,交付,培训,支持及维护产品。软件工程34这4个阶段构成开发周期,周期结束时产生一代新的软件产品。软件产品产生于初始开发周期,随着重复执行同样的过程,软件发展到下
本文标题:清华大学殷仁昆教授讲授《软件工程》讲义-04
链接地址:https://www.777doc.com/doc-5306263 .html