软件工程7.ppt
《软件工程7.ppt》由会员分享,可在线阅读,更多相关《软件工程7.ppt(147页珍藏版)》请在三一办公上搜索。
1、软 件 工 程,1,第七章 面向对象技术,7.1 面向对象的概念7.2 面向对象的软件开发过程7.3 核心过程工作流,软 件 工 程,2,7.1 面向对象的概念,方法的唯一性 从生存期的一个阶段到下一个阶段的高度连续性,生存期后一阶段的成果只是前一阶段成果的修改和补充。系统结构的稳定性 系统的基本成分是对象,对象在软件开发和运行过程中是稳定的,经常变化的是功能。在面向对象系统中,功能是由对象中的操作和对象之间的消息序列来实现的,变更发生在对象内部。,软 件 工 程,3,1.面向对象开发模式,在过程性开发模式中优先考虑的是过程抽象,(即过程的逐步求精,但在使用者面前只呈现顶层的功能);在面向对象
2、开发模式中优先考虑的是实体(问题领域中的对象)。在面向对象开发模式中,把标识和模型化问题领域的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。,软 件 工 程,4,面向对象开发模式的特点,面向对象系统中的对象是数据抽象与过程抽象的综合。系统的状态保存在各个数据抽象的所定义的数据存储中。控制流包含在各个数据抽象中的操作内。在面向对象体系结构。消息从一个对象传送到另一个对象。算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。,软 件 工 程,5,软 件 工 程,6,2.什么是面向对象,Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通
3、信如果一个软件系统是使用这样 4 个概念设计和实现的,则认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,软 件 工 程,7,面向对象的特点,抽象性:对象的数据抽象和行为抽象;封装性:信息隐蔽;共享性:同一类中所有实例共享数据结构和行为特征;同一应用中所有实例通过继承共享数据结构和行为特征;不同应用中所有实例通过复用共享数据结构和行为特征,软 件 工 程,8,3.对象(object),对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。属性一般只能通过执行对象的操作来改
4、变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。,软 件 工 程,9,计算机窗口中的三个多边形,软 件 工 程,10,表示多边形的三个对象,软 件 工 程,11,对象的分类,外部实体:与系统交换信息的外部设备、相关子系统、操作员或用户等;信息结构:问题领域中的概念实体,如信号、报表、显示信息等;需要记忆的事件:系统执行过程中产生并需要记忆的事件,如单击鼠标,击打键盘等;角色:与系统交互的人员所扮演的角色,如学生、教师、会计等;,软 件 工 程,12,组织机构:有关机构,如公司、部门、小组等;地点或位置:用做系统环境或问题上下文的场所、位置,如客户地址、收
5、件人地址等;操作规程:如操作菜单、某种数据输入过程等。,软 件 工 程,13,4.类(class),把具有相同特征(属性)和行为(操作)的对象归在一起就形成了类(class)。类的定义包括一组数据属性和在数据上的一组合法操作。在一个类中,每个对象都是类的实例(Instance),它们都可使用类中的函数。类定义了各个实例所共有的结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态(实例变量)。,软 件 工 程,14,由两个四边形对象导出一个类,软 件 工 程,15,Quadrilateral类的每个实例有相同的一组属性和操作。因此,类Quadrilateral提供了一个模板,表示了
6、四边形对象。类可视为是一个抽象数据类型的实现。但把类看做是某种概念的模型更合适。建立类的实例时常常使用其他类的实例,它们提供了该类所需要的服务。用到的这些实例应当受到保护防止其他对象存取,包括同一个类的其他实例。,软 件 工 程,16,5.消息(Message),消息是一个实例与另一个实例之间传递的信息,要求该实例执行类中定义的某个操作。消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的)。接收消息的实例执行消息中指定的操作,并将形式参数与参数表中相应的值结合起来。消息有 4 类:,软 件 工 程,17,发送对象激活接收对象;发送对象传送信息给接收对象;发送对
7、象询问接收对象;发送对象请求接收对象提供服务。,软 件 工 程,18,6.继承(Inheritance),如果某几个类之间具有共性的东西(信息结构和行为),抽取出来放在一个一般化类(泛化类)中,而将各个类的特有的东西放在特殊化类(特化类)中分别描述,则可建立起特化类对泛化类的继承。继承是使用已有的类定义做为基础建立新类的定义的技术。已有的类可当做基类来引用,则新类相应地可当做派生类来引用。,软 件 工 程,19,各特化类中的底盘、发动机、轮胎、驱动装置等可以作为共性集中到泛化类汽车类中。各个特化类可以从泛化类中继承共性,这样避免了重复。复用共同的描述,继承性往往被看作是软件复用的核心概念。,软
8、 件 工 程,20,建立继承结构的好处:易编程、易理解、代码短,结构清晰易修改 共同部分只要在一处修改即可易增加新类 只须描述不同部分怎样建立一个好的继承层次类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能需要调整原来的层次结构。,软 件 工 程,21,现要建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。,软 件 工 程,22,现要增加一个新类拖拉机。它的底盘、发动机等与汽车类不同,但驱动装置、轮胎等与汽车类相同
9、。关系如下图所示。调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。车辆是抽象类,相关操作到子类汽车找。,软 件 工 程,23,另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。例如,已经存在三角形类,四边形类,想加入一个多边形类,并使之成为三角形和四边形类的泛化类。,软 件 工 程,24,多继承,如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。,前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整
10、继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。,软 件 工 程,25,7.多态性和动态绑定,对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。,软 件 工 程,26,发送消息的对象可能不知道另一个对象的类型是什么。例如在C语言程序中使用命令 ClearInt()时要区分该命令适合一个整数,还是一个整数数组。但在C+情形,ClearInt()对两者都适用,它自己判断对象是哪个。这就是多态性(Polymorphism)。它意味着一个操作在不同类中可以有不同的实现方式。如 ClearInt()针
11、对消息对象是 int array 还是int,其实现是不同的。,软 件 工 程,27,例如,想要在屏幕上画一系列多边形,多态性允许一个表的元素可以属于一组指定的类型而不仅仅是一个类型,可以认为这是一个类族。通过遍历这个表,发送给各个表元素以draw消息,画出所有的多边形。多态性的实现有 2 种:利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。,软 件 工 程,28,动态绑定保证执行与对象 P 连接的操作。如果 P 是矩形类的实例,则执行与矩形连接的操作,而不用与四边形类或多边形类连接的操作。动态绑定把函数调用与目标代码块
12、的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。,软 件 工 程,29,7.2 Rational统一开发过程,软件开发项目多种多样,但都存在不同的不足或缺陷。导致软件项目“出局”的原因,总结起来,有以下几个方面:对于最终用户提出的要求理解不够精确;对需求变更采取的对策不适当;程序块之间不兼容;软件不易维护,不易扩充;,1.最佳软件开发实践,软 件 工 程,30,对项目中的严重缺陷发现得太迟;软件质量低劣;软件性能差到令人无法接受;开发组每个人按各自方式进行开发,当某人修改了部分软件,则很难与其他部分集成;一个不可靠的实现和发布过程。尽管不同项目失败的方式各不相同,但
13、究其原因,可能是以下几方面的问题造成的:需求管理不规范;,软 件 工 程,31,沟通不通畅,沟通信息模糊或不精确;软件体系结构脆弱、不稳定;软件过度复杂;需求、设计与实现之间不一致;测试不够;对于项目状况的估计过于主观;未解决存在的风险;无法控制变化的产生和传播;自动控制不足。,软 件 工 程,32,为解决这些问题,需要以一种更好的、迭代的、可预测的方式开发软件产品,这就是软件开发中的最佳实践。最佳实践包括:迭代式软件开发;需求管理;基于构件的软件体系结构;建立软件可视化模型;不断验证软件质量;控制变更。,软 件 工 程,33,1)迭代式地开发软件,经典的软件开发过程模型是瀑布模型,它最大的问
14、题是把风险留给了后面的阶段。要想清除早期阶段引入的故障需付出很大的代价。另一种是基于螺旋模型的迭代和增量的过程。,软 件 工 程,34,这种方法是一个连续地发现、创造和实现的过程。在生存期早期,可以及时发现和改正严重的需求理解错误;允许和鼓励用户反馈信息,以明确系统的真实需求;使开发人员重视项目中最关键问题,抓住可能导致项目真实风险的问题;不断迭代地测试可以给出项目状况的客观评价;尽早发现需求、设计和实现间的不一致;,软 件 工 程,35,2)需求管理,需求在整个软件项目生存期中是变化的。需求是系统必须达到的条件或性能。动态需求管理包括三项活动:获取、组织系统的功能和约束,并记入文档;估计需求
15、的变化并评估它们的影响;跟踪、记录和权衡所做出的各种决策。项目的需求管理提供了一系列方案,用以解决软件开发中所遇到的问题。,软 件 工 程,36,它规定了一系列需求管理的原则性方法;人员之间的交流都建立在已定义的需求上;规定了需求的优先级,可对它们进行过滤和跟踪;对功能和性能可做出尽可能客观的评价;易于发现系统中的不一致性。,软 件 工 程,37,3)使用基于构件的软件体系结构,一个软件体系结构包括一系列重要决策:确定软件系统的组织;确定构成系统的结构元素及其接口;用结构元素之间的协作关系说明各个结构元素的行为;将这些结构元素及其行为组合为更大的子系统;依据软件体系结构风格约定,指导系统的构建
16、:约定涉及元素和它们的接口、协作和组合。,软 件 工 程,38,基于构件建立软件体系结构提供了一系列方案,用以解决软件开发中所遇到的问题:使用构件可以创建有弹性的体系结构;模块化方法使得人们可以分别关注系统中容易变化的不同元素;通过使用标准化的框架(如 CORBA,EJB,COM+)和其他商品化的构件可以提供软件的可复用性;构件为软件配置管理提供了一个非常自然的基础。,软 件 工 程,39,4)建立软件的可视化模型,模型是现实的简化,它从特定的视角完整地描述一个系统。,模型,软 件 工 程,40,通过模型化,可将系统体系结构的结构和行为可视化,具体化。应用UML(统一建模语言),开发人员可以清
17、楚地,无二义性地与其他人交流他们的想法和决定。可视化建模可以帮助开发人员提高管理软件复杂性的能力。通过迭代开发实践,还可以展示体系结构的变化,有助于人们评估这些变化,确保在每次迭代过程中协调模型与源代码的一致性。软件的可视化建模可以提供一系列方案,用以解决软件开发所遇到的问题:,软 件 工 程,41,通过用例和场景可以无二义性地详细说明系统的行为;通过模型可以无二义性地理解软件设计;可以发现软件体系结构中不灵活的地方;必要时可以隐藏某些细节;无二义性的设计易于揭示某些不一致性;好的应用程序从好的设计开始;可视化建模工具可以为 UML 建模提供支持。,软 件 工 程,42,5)不断地验证软件质量
18、,在软件实施之后再查找和发现软件问题,比在早期就进行这项工作需多花10 到100 倍的费用。因此,必须从功能、可靠性、性能等方面不断对软件质量进行评估。验证系统功能,需要对每一个关键场景进行测试。场景描述了系统应实现的某一种行为。场景测试检测:哪些场景执行有问题,在什么地方出问题,出现什么问题(有缺陷或未实现)等,从而评估软件功能。,软 件 工 程,43,6)控制软件的变更,当软件开发在不同组、不同地点并行进行时,开发人员同时工作于多个迭代过程、发布版本、产品和平台上,如果没有严格的变更控制,开发过程就很容易陷入混乱。为使软件开发人员、开发组的活动和制品协调一致,必须建立管理软件变更的循环工作
19、流,在迭代过程中,持续监控变更,动态地发现问题并及时反映。每次迭代过程结束时需建立和发布经过测试的基线,保证迭代过程与发布版本协调一致。,软 件 工 程,44,在每个版本元素之间和在多个平行版本元素之间保持可跟踪性,以便能够评估和动态管理变更造成的影响。控制软件的变更可以提供一系列方案,用以解决软件开发所遇到的问题:定义需求变更的工作流并在开发过程中反复使用这个工作流。建立变更请求报告,促进了人们的交流。变更中建立变更人员的专用工作空间,减少了平行工作的小组成员之间的相互干扰。,软 件 工 程,45,建立变更率统计,可客观度量和评价项目的状况。在变更专用工作空间中需包括全部涉及的制品,这样有利
20、于保持一致性。可以评价和控制变更的产生和传播(影响)。可以在一个健壮的定制系统中维护变更。,软 件 工 程,46,2.Rational统一开发过程,软件开发过程的作用是:成为开发组活动顺序的向导。详细说明需要开发哪些制品?何时开发?指导每一个成员及整个开发组的工作。提供监控和度量项目产品和活动所依据的准则。如果没有一个良好定义的过程,开发组将各自为政。开发成功与否完全依赖个别优秀的人才,这不是能够长久的。,软 件 工 程,47,成熟的开发组织能够利用定义良好的开发过程,采用上述的最佳实践活动,以一种可预测的循环方式开发复杂的系统。这样,软件开发组织的能力能够保持稳定,并能随着新项目不断改进,从
21、而提高整个软件开发的效能和生产率。Rational 统一开发过程正是建立在上述六项最佳实践活动的基础之上,目的是交付一个定义良好的过程。,软 件 工 程,48,1)什么是Rational统一过程,Rational 统一开发过程简称 RUP(Rational Unified Process),是一种软件工程过程。RUP描述了如何在软件开发组织中严格分配任务和职责的方法。其目标是:按照预先制定的时间计划和经费预算,开发高质量的软件产品,以满足最终用户的需要。RUP 是一个过程产品。Lee Osterweil 提出:软件过程也是软件。RUP 可以像任一软件工具那样设计,开发,交付和维护。,软 件 工
22、 程,49,RUP有自己的过程框架。该框架的特点是:RUP是用例驱动的、以体系结构为核心的、迭代的增量的过程。RUP 采用二维的过程结构:过程的第一维(横轴)表明过程的生存期,它反映了过程被激活时的动态情况,用周期、阶段、迭代和里程碑表示。过程的第二维(纵轴)表明过程的静态状况,通过过程构件、活动、工作流、制品和工作人员描述过程。,软 件 工 程,50,初始,细化,构造,移交,阶 段,初始化,细化#1,细化#2,构造#1,构造#2,构造#3,移交#1,移交#2,迭 代,工作流,业务建模,需求,分析与设计,实现测试实施,配置和变更管理项目管理环境,沿时间轴的组织结构,沿内容轴的组织,软 件 工
23、程,51,2)过程的静态描述:过程模型,过程模型中的主要模型元素有 4 种:工作人员:谁做(who)活动:怎么做(how)制品:做什么(what)工作流:何时做(when),用况实现,活动,工作人员,制品,软 件 工 程,52,(1)工作人员(Worker),过程的中心概念是工作人员。工作人员不是指某一个人,而是指完成工作的角色。工作人员定义人们应履行的行为和职责。通常。用活动描述行为,用制品衡量职责。一个人可以扮演一个或多个角色。在过程中,可以是系统分析员、设计师、用例设计师、测试设计师等。,软 件 工 程,53,项目经理在计划项目和人员分配时根据每个人的技能安排每个人担当的角色。一个人可以
24、担当几个工作人员;一个工作人员也可以由几个人担当。,软 件 工 程,54,(2)活动(Activity),活动定义了工作人员所执行的工作。活动有明确的目的,通常是生产制品或更新制品(如模型、类或计划)。每一个活动都分配给特定的工作人员。为生成一个制品,可能会多次重复某些活动,特别是从一个迭代过程到下一个迭代过程,可以不断细化和扩展该制品。在面向对象方法中,把工作人员定义为对象,工作人员完成的活动就是对象执行的操作。,软 件 工 程,55,(3)制品(Artifact),制品是过程生产、修改或使用的一种信息。制品可分为输入制品和输出制品。在面向对象设计中,制品被当作活动的参数。制品有多种可能的形
25、式,如:模型:如用例模型或设计模型;模型元素:如类、用例或子系统;文档:如一个业务用例或体系结构文档;源代码;可执行文件。,软 件 工 程,56,(4)工作流(工作流程),工作流用来描述能够生成有用结果的活动序列,用以描述工作人员之间的交互。一个工作流可以用顺序图、协作图或活动图来描述。RUP 的工作流由下列方式组织:,核心工作流 工作流细节 迭代计划,软 件 工 程,57,核心工作流,在 RUP 中共有 9 个核心过程工作流。它们将所有工作人员和活动进行逻辑分组。核心过程工作流分为 6 个核心工程工作流和 3 个核心支持工作流。核心工程工作流有:业务建模工作流、需求工作流、分析和设计工作流、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4096080.html