1中间件技术Middlewaretechnology第四章面向对象中间件ODP赖永炫博士厦门大学软件学院2009.092内容面向对象的技术和方法论开放分布式参考模型ODP3面向对象的技术和方法论软件危机结构化程序设计软件工程面向对象技术4软件危机softwarecrisis:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付。在交付使用后的系统中仍发现大量(2000个以上)的错误。5软件危机软件危机主要表现在以下几个方面:软件系统急剧膨胀软件的复杂程度呈指数上升软件的可靠性不能控制几乎不可能的软件管理和维护6解决软件危机的途径62年美国金星探测器水手2号卫星失败…程序是什么?软件是什么?怎样保证程序的绝对可靠?一场对程序本质的研究导致goto之争–从理论上无法证明基于任意赋值、任意goto的程序是正确的。–程序测试只能证明程序有错,不能证明程序无错。出路-结构化程序程序设计7结构化程序设计取消goto!只允许顺序、分支、循环三种结构组成结构化程序。每一种结构只能一个入口,一个出口。设计重于编码,分析重于设计。自顶向下,逐步求精。易编程、易维护、提高了软件开发效率和质量8结构化程序设计程序块条件真假入口出口程序块程序块循环体表达式真假程序块9解决软件危机的途径-软件工程1968年在德国召开的NATO(NorthAtlanticTreatyOrganization,北大西洋公约组织)会议上首次提出了“软件工程”概念,希望用工程化的原则和方法来克服软件危机鉴于手工作坊式的开发与硬件不成比例,以及结构化的成功经验-以工程化的方法开发软件。为设计、制造软件产品,要定出规程、规范和标准,有了规范和标准,就可以制造用于设计、开发、管理、测试软件的工具10软件工程时代软件开发应该是一种组织良好、管理严密、各类人员协同配合而共同完成的工程项目。必须充分吸收和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸收几十年来计算机硬件工业的发展经验。既要有技术措施(方法和工具),又要有组织管理措施。11生命周期方法学-瀑布模型需求分析概要设计详细设计使用、维护编码、测试需求分析报告,计划书概要设计说明书详细设计说明书源代码、测试报告用户手册,维护报告软件=程序+文档从时间角度对软件开发和维护的复杂问题进行分解可行性研究退役可行性研究报告12计算机辅助软件工程-CASE软件工程-规范-每一阶段工具–结构编辑器–由算法描述-自动生成源代码–文档自动生成工具–工程进度管理工具工具箱、开发平台13传统方法学的缺点软件生产率的提高不能满足用户需求没有很好地解决软件重用问题软件仍然很难维护软件往往不能真正满足用户需要–开发人员不能理解用户需求,开发的软件与用户预期的系统不一致。–开发的系统不能适应用户需求的不断变化。14问题的原因结构化技术的弱点–围绕处理过程进行分解,不适应应用功能变化。–把处理分解为子处理的工作带有任意性。–把数据和操作作为分离的实体,潜在的具有可重用价值的软件由于和具体应用环境密不可分,失去重用价值。僵化的瀑布模型–某些系统需求是模糊的(特别是一些应用系统)–项目参加人员存在沟通问题。–预期定义的需求就可能是过时的。15软件工程新途径-快速原型法用交互的、快速建立起来的原型代替形式的、僵硬的(不可修改的)规格说明,用户通过在计算机上实际运行和试用原型系统向开发者提供真实的反馈信息。高度迭代的动态方法开发、修改系统运行原型系统修改意见16快速原型法快速作出一个原型,让用户作出评审后逐步扩充、完善,得到目标系统。开发阶段不严格评审,允许需求、设计编码、试运行同时进行。各阶段可以反复。原型法基于:–快速开发的CASE工具–软件复用技术成果–软件工程环境的集成化17快速原型法z区分两类不同的软件系统}需求比较稳定,可预先定义(火箭发射跟踪系统,操作系统)。生命周期方法学仍然适用。}模糊的或随时间变化的系统,运行后还可能对系统进行修改(商业、行政管理)需要一种进行反复试探的技术-快速原型法18统一过程UPTheUnifiedSoftwareDevelopmentProcessorUnifiedProcessisapopulariterativeandincrementalsoftwaredevelopmentprocessframework.Thebest-knownandextensivelydocumentedrefinementoftheUnifiedProcessistheRationalUnifiedProcess(RUP).TheElaboration,ConstructionandTransitionphasesaredividedintoaseriesoftimeboxediterations.Eachiterationresultsinanincrement,whichisareleaseofthesystemthatcontainsaddedorimprovedfunctionalitycomparedwiththepreviousrelease.19Diagramillustratinghowtherelativeemphasisofdifferentdisciplineschangesoverthecourseoftheproject20面向对象技术把数据和操作封装在一起。一个程序由各个对象组成,程序的执行就是对象相互作用的结果面向对象的封装、抽象、继承等天然地符合软件工程所要求的软件的局部性、概括性、易维护、可重用、易扩充等性能。21组件技术基于组件的软件开发来自于面向对象的程序设计理论,但又是这一理论的延伸和发展。组件技术是以二进制级提供规格化的软件组件,并以图标等可视方式提供组件。由于能直观地理解组件的功能与作用,就有可能使以用户为主导的应用软件开发引向成功。22组件技术软件开发的组件技术给软件业带来很大冲击,它使应用程序的开发方式发生了重大变化,它使面向对象技术得到了推广与应用。在软件开发中,以前那种程序编码工作将大大减少,程序员的工作将集中在挑选组件和利用组件上。23面向对象技术的基本概念面向对象-人类认识周围世界的观点现实世界中对象有两个共同的特点:–状态(静态的属性)如一台空调机,有自己的重量、尺寸、颜色、摆放位置、是开机还是关机等。–行为(动态的功能)如空调机的开机、关机、制冷、制热、定时、摆风等。我们可以通过遥控器向空调发出指令,让它执行某项功能。24面向对象技术的基本概念面向对象技术就是以要解决的问题领域中所涉及到的各种对象为主要考虑因素计算机世界中的对象是现实世界对象的模型化,所以它也应该具有状态和行为在计算机程序环境中:–对象的状态-属性-变量–对象的行为-方法-代码因此,解空间中的对象是由描述该对象属性的数据以及可以施加于这些数据上的操作(方法代码)所组成25对象实例建立一个“电梯”对象。–电梯对象的属性有:电梯编号、昀大载重量、空间大小、电梯门的当前状态(开或关)、电梯当前所在楼层等–电梯对象的方法(电梯对象所具有的功能)开门、关门、上升、下降、停靠、检测载重量等在计算机中,一个对象与另一个对象区分:–对象的属性取值不同26对象与类计算机世界实体对象类创建现实世界概念世界抽象类抽象定义类对应27LowerRepresentationalGap28类与对象类是对象的抽象及描述,它是具有统一属性和方法的一类对象的统一描述体,是用来定义某类对象共有属性和方法的模板。类是用来创建对象实例的模板,它包含了该类对象的属性声明和方法定义。类是一个型,而对象则是这个型的一个实例。在面向对象程序中,类是静态概念,而对象则是一个动态概念,因为只有在运行时才为对象分配空间,对象才真正存在。29封装封装使得对象内部成为一个结构完整、可自我管理、自我平衡、高度集中的整体对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机单元对象的接口就是它的公共属性及方法软件芯片接口实现30类的继承如果类“A”是一个已存在的类,我们定义一个新的类“B”,并声明它继承类“A”。对于A、B两个类,我们称A为父类,B为子类。子类继承父类意味着:–子类继承了父类所有非私有的属性和方法–凡是从父类继承下来的属性,子类就不用再做说明–凡是从父类继承下来的方法,子类就无须重新编码31多态封装产生了一种多态(Polymorphism)的效果用抽象类类型的引用来引用对象,但真正引用的是从抽象类派生的类的具体实例。因此,当我们通过抽象引用概念性地要求对象做什么时,将得到不同的行为具体行为取决于派生对象的具体类型,同一个调用能够获得很多不同形态的行为:–讲师告诉学生“去下一个听讲座的教室”,但是根据学生类型的不同,他们会采取不同的行为,这就是多态的具体形式32类库及类的继承系统都会提供大量的类供程序员使用系统通常以类库形式将这些类按不同的专题加以组织,便于用户使用在Delphi,VB等开发环境中,系统还以组件板的形式提供可视化的类库33面向对象的重要方法抽象封装层次34抽象抽象(Abstraction)的结果反映出事物的重要的本质和显著的特征,言外之意是忽略那些次要的、非本质的和分散注意力的特征。抽象的过程强调被抽象事物的重要共性,而忽略不重要的差异在面向对象方法中,抽象活动主要抽取事物的结构特征和行为特征,两方面特征是有机的整体。35在概念上,面向对象的方法昀核心的抽象内容是对象(Object)。准确地讲,对象是一个具有明确边界和唯一标识的、封装了行为和状态的实体。36封装封装将对象特征的实现方式(包括相关的设计决定)隐藏在一个公共接口之后的黑盒之中对于和某对象沟通的其他对象而言,只需了解它的消息接口,即可顺利地与该对象进行沟通371对象内部的状态被保护起来,不会被与该对象沟通的对象直接篡改;2对象内部特征的变化不会改变与其他对象的沟通方式,即封装为面向对象系统带来一种叫做“多态”(Polymorphism)的能力,即呈现在一个接口后面的多种实施形态,不会影响接口的使用方式。封装的作用38封装使得系统具有更明显的高内聚、低耦合特征,进而使整个系统的构架变得更加具有延展性概念上,接口是封装原则的准确描述手段。接口用于声明类或者构件能够提供的服务。所谓服务就是响应消息的能力。39层次层次(Hierarchy)的基本含义是不同级别的抽象组成一个树形的结构。层次的种类是多种多样的,可以是集合的层次、类属的层次、包含的层次、继承的层次、分区的层次、专业化的层次等等。40简单地讲,层次就是一个描述分类的结构。层次的典型例子是生物中的门、纲、属、种、科等。注意,层次化的思维活动建立在抽象思维活动的基础之上。在某种意义上,不同的层次反映了抽象主体关注被抽象客体的概括程度。层次41层次的本质目的是表述并使用事物之间的相似性,同时事物之间的区别可以显著暴露不同层次之间的描述不存在重复和冗余,而是自上而下的重复使用。在得到必要的技术支撑之后,层次概念带来的直接价值是提升事物特征描述的可复用能力。42附:面向对象的一统天下编程语言和平台篇Java、.NET和C++无疑仍是编程语言中的王者,各自占据擅长的市场。Java在大规模企业级应用中翻手为云,.NET在中小企业信息化市场上呼风唤雨,C++宝刀不老、在内核级开发和嵌入式软件应用上独擅胜场。PHP等Web专用的脚本语言,没有想象中那么风光。毕竟面向公众的Web应用,在整个IT市场中未见得占到多大的份额。企事业单位信息化进程日渐深入,IT正在成为基础设施,更架构化的Java和.NET,以及更底层化的C++,一占企