软件工程PPT-09面向对象方法学引论

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

tjm第九章面向对象方法学引论面向对象方法学概述面向对象的基本概念面向对象建模对象模型动态模型功能模型tjm面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。面向对象方法学概述1.面向对象方法学的要点tjm面向对象方法具有下述4个要点:(1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。(4)对象彼此之间仅能通过传递消息互相联系。tjm面向对象就是运用对象、类、继承、封装、消息、结构与连接等面向对象的概念对问题进行分析、求解的系统开发技术,或者说,是以对象(类)为数据中心、对象之间的动态行为模式为运行机制的一种问题求解方法。用公式可表示为:面向对象=对象+类+继承+封装+消息+结构与连接tjm也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。如果仅使用对象和消息,则这种方法可以称为基于对象的(object-based)方法,而不能称为面向对象的方法;如果进一步要求把所有对象都划分为类,则这种方法可称为基于类的(class-based)方法,但仍然不是面向对象的方法。只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。tjm1)与人类习惯的思维方法一致传统的程序设计技术是面向过程的设计方法,这种方法以算法为核心,把数据和过程作为相互独立的部分,数据代表问题空间中的客体,程序代码则用于处理这些数据。2)稳定性好传统的软件开发方法以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立起来的软件系统的结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。事实上,用户需求变化大部分是针对功能的,因此,这样的软件系统是不稳定的。2.面向对象方法学的优点tjm3)可重用性好用已有的零部件装配新的产品,是典型的重用技术,例如,可以用已有的预制件建筑一幢结构和外形都不同于从前的新大楼。重用是提高生产率的最主要的方法。4)较易开发大型软件产品在开发大型软件产品时,组织开发人员的方法不恰当往往是出现问题的主要原因。用面向对象方法学开发软件时,构成软件系统的每个对象就像一个微型程序,有自己的数据、操作、功能和用途,因此,可以把一个大型软件产品分解成一系列本质上相互独立的小产品来处理。tjm5)可维护性好用传统方法和面向过程语言开发出来的软件很难维护,是长期困扰人们的一个严重问题,是软件危机的突出表现。由于下述因素的存在,使得用面向对象方法所开发的软件可维护性好:(1)面向对象的软件稳定性比较好。(2)面向对象的软件比较容易修改。(3)面向对象的软件比较容易理解。(4)易于测试和调试。tjm迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。喷泉模型tjm由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作称为服务或方法。面向对象的基本概念1、对象对象是人们要进行研究的任何事物,具体一点讲就是研究对象。它可以是有形实体,也可以是作用、事件、性能说明等,当然,如果朋友成为你研究的对象时,对象也可以是你的朋友。tjm2)对象的定义目前,对对象所下的定义并不完全统一,人们从不同角度给出对象的不同定义。这些定义虽然形式不同,但基本含义是相同的。(1)定义1:对象是具有相同状态的一组操作的集合。这个定义主要是从面向对象程序设计的角度看“对象”。(2)定义2:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。这个定义着重从信息模拟的角度看待“对象”。tjm(3)定义3:对象∷=〈ID,MS,DS,MI〉。其中,ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口)。这个定义是一个形式化的定义。从动态角度或对象的实现机制来看,对象是一台自动机。具有内部状态S,操作fi(i=1,2,…,n),且与操作fi对应的状态转换函数为gi(i=1,2,…,n)的一个对象,可以用下图所示的自动机来模拟。tjmtjm3)对象的特点(1)以数据为中心。(2)对象是主动的。(3)实现了数据封装。(4)本质上具有并行性。(5)模块独立性好。tjm3)对象的状态和行为对象有自身的状态,比如你的女朋友有她的姓名(张朋)、年龄(25岁)、工作单位等状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为,比如“张朋跳槽到某公司”这个行为将使她的工作单位这个状态发生变化。tjm2、其他概念1)类(class)在面向对象的软件技术中,具有相同或相似性质的对象的抽象就是类。如桃树、李树、樟树等是具体的树,抽象之后得到“树”这个类。类具有属性,属性是状态的抽象,如一棵李树的高度是3米,樟树是10米,树则抽象出一个属性“高度”。类具有操作,它是对象行为的抽象。tjm类的结构类的结构有两种,一种是“一般-具体”结构,如植物、树都是类,它们之间是抽象到具体的关系,即树是一种(isa)植物。还有一种就是“整体-部分”结构,如计算机是类、CPU也是类,则计算机与CPU之间就是整体与部分的关系,即计算机有一个(hasa)CPU。tjm实例(instance)实例就是由某个特定的类所描述的一个具体的对象。类是对具有相同属性和行为的一组相似的对象的抽象,类在现实世界中并不能真正存在。当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。tjm3)消息(message)消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。即对象之间进行通信的构造。比如张朋是一个对象,上司发出一个出差通知消息:张朋出差到深圳。这样,相应的对象接收到这个消息就会给予响应。通常,一个消息由下述3部分组成:接收消息的对象;张朋消息选择符(也称为消息名);出差通知零个或多个变元。张朋出差到深圳tjm4)方法(method)方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C++语言中把方法称为成员函数。比如张朋是一个对象,上司发出一个消息:张朋出差到深圳。这样,相应的对象接收到这个消息就会给予响应,在这个消息中,张朋是对象名,出差到就是方法名,深圳就是参数。在类中操作的实现过程叫做方法。上面的出差到(某地)这个方法如何实现呢,就是买车票,乘车到某地。这个过程就是方法。tjm5)属性(attribute)属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在C++语言中把属性称为数据成员6)封装(encapsulation)在面向对象的程序中,把数据和实现操作的代码集中起来放在对象内部。一个对象好像是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码与局部数据,都被封装在黑盒子里面,从外面是看不见的,更不能从外面直接访问或修改这些数据和代码。tjm对象具有封装性的条件如下:(1)有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。(2)有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。(3)受保护的内部实现。实现对象功能的细节(私有数据和代码)不能在定义该对象的类的范围外访问。tjm7)继承(inheritance)广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。下图描绘了实现继承机制的原理:tjm8)多态性(polymorphism)多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。在C++语言中,多态性是通过虚函数来实现的。在类等级不同层次中可以说明名字、参数特征和返回值类型都相同的虚拟成员函数,而不同层次的类中的虚函数实现算法各不相同。虚函数机制使得程序员能在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据接收消息的对象所属于的类,决定到底执行哪个特定的版本,这称为动态联编,也叫滞后联编。tjm9)重载(overloading)有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当然,当参数特征不同或被操作数的类型不同时,实现函数的算法或运算符的语义是不相同的。在C++语言中函数重载是通过静态联编(也叫先前联编)实现的。tjm所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。为了开发复杂的软件系统,系统分析员应该从不同角度抽象出目标系统的特性,使用精确的表示方法构造系统的模型,验证模型是否满足用户对目标系统的需求,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。面向对象建模tjm面向对象的建模分析从概念上分为二个层次。①问题分析:主要任务是收集并确认用户的需求信息,对实际问题进行功能分析和过程分析。②应用分析:主要任务是动态描述系统中对象的合法状态序列。tjm在对目标系统进行分析的初始阶段,面对大量模糊的、涉及众多专业领域的、错综复杂的信息,系统分析员往往感到无从下手。模型提供了组织大量信息的一种有效机制。通常,用户和领域专家可以通过快速建立的原型亲身体验,从而对系统模型进行更有效的审查。tjm1.面向对象的模型面向对象的模型包括三个,它们分别是:①描述系统数据结构的对象模型。②描述系统控制结构的动态模型。③描述系统功能的功能模型。tjm对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。它从客观世界实体对象的关系角度来描述,表现了对象的相互关系。事实上,这个模型可以当作扩充的实体——关系模型(E-R)。面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型为建立动态模型和功能模型,提供了实质性的框架。对象模型tjm1.类图的基本符号类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。一个系统可以由多张类图来描述,一个类也可以出现在几张类图中。tjm1)定义类UML中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域(下面两个区域可省略),3个区域分别放类的名字、属性和服务。表示类的图tjm类名是一类对象的名字。命名是否恰当对系统的可理解性影响相当大,因此,为类命名时应该遵守以下几条准则:(1)使用标准术语。例如,“交通信号灯”比“信号单元”这个名字好,“传送带”比“零件传送设备”好。(2)使用具有确切含义的名词。例如,“库房”比“房屋”或“存物场所”更确切。(3)必要时用名词短语作名字。例如,“最小的领土单元”、“储藏室”、“公司员工”等都是比较恰当的名字。tjm2)定义属性UML描述属性的语法格式如下:可见性属性名:类型名=初值{性质串}属性的可见性(即可访问性)通常有下述3种:公有的(public)、私有的(private

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功