
面向对象的开发方法.ppt
73页面向对象的开发方法•第一节 面向对象概述•第二节 面向对象的基本概念•第三节 面向对象分析(OOA)•第四节 面向对象设计(OOD)•第五节 面向对象编程第一节 面向对象概述一、发展概述–面向对象并非是一个新的概念,实际上它已有30多年的历史寻其根源可追溯到60年代的挪威,当时挪威计算中心的Kristen Nygaard和Ole-Johan Dahl开发了一种称作Simula67的语言Simula67首次引入了类、协同程序和子类的概念,这很象今天的面向对象语言–70年代中期,Xerox Palo Alto研究中心的研究人员设计了Smalltalk语言,该语言的每个元素都被当作一个对象来实现,其程序设计环境及相关的各个方面都是面向对象的第一节 面向对象概述–但是,面向对象的推广很慢例如:Samlltalk的成果直到1981年8月因Byte杂志的介绍才为外界所知,许多软件开发人员了解Samlltalk时,都把它看作是一个窗口系统,而不是程序设计技术的一次革命–80年代,C成为很受欢迎的程序设计语言,它不仅可用在微机上,还可用在多种结构的系统和环境中80年代早期,AT&T贝尔实验室的Bjarne Stroustrup把C语言扩展为支持面向对象程序设计的C++。
在C++中,程序员可以在其熟悉的语言环境下学习掌握面向对象的程序设计技术,而不必去探究一种新的语言和环境第一节 面向对象概述–自90年代以来,软件与硬件之间的差距至少有两代处理器之多,并且这种差距还在增大当软件系统变得更加复杂时,常规软件工具、技术和概念已不足以应付,从而使软件开发者陷入了困境但面向对象的方法能够控制软件的复杂性,从而促进了面向对象的发展,掀起了一股“面向对象”热第一节 面向对象概述二、研究领域–目前国内外关于面向对象的研究领域主要在以下几个方面:1.理论:包括方法、面向对象设计的本质以及语义模型的研究2.语言:包括现有面向对象的程序设计语言的研究、设计新的面向对象的程序语言,将面向对象的设计思想引入其它语言(如Ada,Prolog,Lisp,C,Pascal,Foxpro等)3.实现:包括体系结构的支撑、编译与解释、其它特殊技术等4.环境:包括面向对象的软件开发环境的设计与实现第一节 面向对象概述5.重用:为了实现重用,需要研究对象的规格说明等6.原型:面向对象的设计方法如何用于实现快速原型7.应用:将面向对象的设计方法用于商业、教育及科学等实际问题的处理中。
8.其它方面:将面向对象的设计方法用到数据库、操作系统、知识工程、人工智能、自然语言处理等其它领域第二节 面向对象的基本概念一、对象1.定义•对象是和有数据及可对这些数据施加的操作结合在一起所构成的独立单位的总称,是具有一定知识和处理能力的独立个体它可以是具体的物理实体,如一个文件;也可是是人为抽象概念的,如多任务操作系统中的调度策略•从面向对象程序设计的角度看:对象是具有相同状态的一组操作的集合•从信息模拟的角度看:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息和与它交互的能力,即对象是对属性值和操作的封装第二节 面向对象的基本概念–从形式化角度看:对象::=
从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变第二节 面向对象的基本概念–动态产生性:对象是在系统执行过程中根据需要而动态产生的–一定的“智力”性:对象具有一定的“智力”,表现在能够解释传来的信息,理解由消息带来的要求,并独立第二节 面向对象的基本概念3.表现形式–外部实体(如一个系统、设备、人等):产生或消耗一个基于计算机的系统所用的信息–物(如报告、显示、信件、信号等):问题信息域的一部分–事件(如一次信号传输或一系列机器人动作的完成):发生于系统操作的有关时刻–角色(如管理者、工程师等):由与系统交互作用的人来扮演–组织单位(如部门、小组等):与应用相关的机构第二节 面向对象的基本概念–场所(如制作平台、办公室等):使问题和系统的整个运作有固定的位置–结构(如传感器、计算机等):定义一类对象或定义对象的相关类第二节 面向对象的基本概念二、类1.定义•类是对象类的略写,是对象的抽象,是一种对象模型,它描述了属于该对象类型的所有对象的性质•例如:Integer是一个整数类,它描述了所有整数的性质第二节 面向对象的基本概念2.实现•类是关于对象性质的描述,包括外部特性和内部实现两个方面。
类通过描述消息模式及其相应的处理能力定义类的外部属性,通过描述内部状态的表现形式及固有处理能力的实现定义类的内部实现类的实现图示消息模式1:处理能力1……消息模式n:处理能力n消息模式1 处理能力1的实现……消息模式n 处理能力n的实现内部状态的表现形式外部特性内部实现第二节 面向对象的基本概念3.父类、子类、超类•父类:一个类的上层是父类•子类:一个类的下层是子类•超类:如果C2是C1的子类,C3是C2的子类,则C1是C3的超类4.描述类名属性、方法等第二节 面向对象的基本概念三、实例–实例是某个具体类所描述的一个具体对象例如:“张三”、“李四”是类“中国人”的实例–对象既可以是一个具体的对象,也可以泛指一般的对象;而实例只能是一个具体的对象第二节 面向对象的基本概念四、属性–属性是类中对象所具有的数据值,是对对象的描述如对象Person的属性有姓名、年龄、体重等–不同对象的同一属性可以具有相同或不同的属性值如张三的年龄为19,李四的年龄为20张三、李四是两个不同的对象,他们共同属性“年龄”的值不同–属性值应该指的是纯粹的数据值,而不能指对象–属性表示在类图中的第二部分。
每个属性名后均可附加一些说明,诸如类型和缺省值之类第二节 面向对象的基本概念五、操作和方法–操作以某种方式改变对象,即改变对象包含的一个或多个属性值–对象所能执行的操作称为方法,也就是类中所定义的服务方法描述了对象执行操作的算法、响应消息的操作–每个操作都有一目标对象作为其隐含参数,操作的行为取决于其目标对象所归属的类对象“知道”其所归属的类,所以能正确地实现该操作–同一操作可适用于不同的类操作的多态性指的是在不同的类中,同一操作的形式不同第二节 面向对象的基本概念–操作一般分为三个类型1.以某种方式处理数据的操作:如添加、删除、修改、选取等2.执行一次计算的操作3.监控一个对象的操作第二节 面向对象的基本概念六、消息–消息是用来请求对象执行某一处理或回答某一要求的信息,是对象之间建立的一种通信机制,它统一了数据流和控制流–通常一个消息由三部分组成:•接收消息的对象•消息标识符(即消息名)•零个或多个变元例如:MyCircle.Show(Green)•MyCircle是接收消息的对象的名字,Show是消息名,Green是消息的变元第二节 面向对象的基本概念–如何要求对象完成一定的处理动作?对象间如何进行联系?所有这一切都只能通过消息传递来实现。
–传递消息的对象称为发送者,接受消息的对象称为接受者–消息中只包含传递者的要求,它告诉接受者需要哪些处理,但并不指示接受者应该怎样完成这些处理–消息完全由接受者解释,接受者独立决定采用什么方式完成所需的处理,发送者对接受者不起任何控制作用第二节 面向对象的基本概念–一个对象能够接受不同形式、不同内容的多个消息;相同形式的消息可以送往不同的对象,不同的对象对于形式不同的消息可以有不同的解释,能够做出不同的反映–一个对象可以同时往多个对象传递信息,两个对象也可以同时向某个对象传递消息–接受者响应消息的过程:•选择符合消息要求的操作•执行该操作•将控制权返回调用者第二节 面向对象的基本概念七、继承性–广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们在面向对象中,继承是子类自动地共享基类中定义的数据和方法的机制–父类:类的上层–子类:类的下层第二节 面向对象的基本概念A的操作A的变量类A类AA的实例变量A的实例a1从A继承特性B的操作B的变量类B:A的子类类B继承来的A的实例变量B的实例变量B的实例b1实现继承机制的原理第二节 面向对象的基本概念–继承具有传递性•如果类C继承类B,类B继承类A,则类C继承类A。
–单继承与多继承•单继承:一个类只允许有一个父类,即类等级为树形结构•多继承:一个类允许有多个父类第二节 面向对象的基本概念–继承性的优点•共享程序代码和数据结构,大大减少程序中的冗余信息,提高软件的可重用性•便于软件修改维护当需要扩充原有的功能时,派生类的方法可以调用其基类的方法,并在此基础上增加必要的程序代码;当需要完全改变原有的算法时,可以在派生类中实现一个与基类方法同名而算法不同的方法;当需要增加新的功能时,可以在派生类中实现一个新的方法•“站在巨人的肩头上”用户在开发新系统时不必从零开始,可以继承原有相似功能或者从类库中选取需要的类,再派生新类第二节 面向对象的基本概念八、多态性–对象根据所接受的消息而做出动作,同样的消息为不同的对象接受时可导致完全不同的行动,该现象称为多态性–利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接受消息的对象–优点:•多态性机制增加了面向对象软件系统的灵活性,进一步减少了信息冗余•显著提高软件的可重用性和可扩展性第二节 面向对象的基本概念九、重载–函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
–运算符重载是指同一个运算符可以施加于不同类型的操作数上面–优点:重载进一步提高了面向对象系统的灵活性和可读性第二节 面向对象的基本概念十、封装–封装是指将方法与数据同放于一对象中以使对数据的存取只通过该对象本身的方法面向对象程序的其它部分(对象以外的部分)都不能直接作用于一对象的数据,对象间的通信只能通过明确的消息来进行第二节 面向对象的基本概念面向对象面向对象传统技术传统技术方法过程、函数或子例程实例变量数据消息过程或参数调用类抽象数据类型继承无类似技术调用处于系统控制之下调用处于程序员控制之下第三节 面向对象分析•面向对象分析的关键,是识别出问题域内的对象,并分析它们相互间的关系,最终建立起问题域的简洁、精确、可理解的正确模型•面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件第三节 面向对象分析•用面向对象方法开发软件,通常需要建立三种形式的模型:–对象模型:描述系统数据结构–动态模型:描述系统控制结构–功能模型:描述系统功能对象模型•什么是对象模型–对象模型表示静态的、结构化的系统的“数据”性质。
–对象模型是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构对象模型•对象模型的图形符号–类&对象类名属性服务类名属性服务类&对象符号类符号v类符号是类&对象符号的变种,通常用来代表一个没有实例的抽象类对象模型–当不需要详细描述一个类内定义了哪些属性和服务时,可以在矩形框内省略员工姓名地址身份证号码工资通讯地址对象模型•结构的图形符号–结构表示了问题域中的复杂关系,是对客观世界实体相互间关系的抽象–结构与目标系统的任务直接相关,目标系统的任务决定了系统的结构–结构有三种形式:归纳关系、组合关系、关联关系对象模型•归纳关系–即“一般-特殊”关系,它反映了一个类与若干个互不相容的子类之间的分类关系–高层类(即基类)说明一般性的属性–低层类(即派生类)说明特殊属性,继承高层类中定义的属性和服务对象模型一般化类具体类1具体类2表示归纳关系的图形符号对象模型•组合关系–组合关系即“整体-部分”关系,反映了对象之间的构成关系也称为聚集关系–结构线每端标出的数值(或值的范围),表示在此结构中该端对象的数量(当值为1时无须标出)–组合关系具有传递性:如果A是B的一部分,B是C的一部分,则A是C的一部分。
–当组合关系具有多个层次时,可以用一棵简单的聚集树来表示对象模型整体部分1部分2表示组合关系的图形符号1,m0,n对象模型•关联关系–关联关系反映对象之前相互依赖、相互作用的关系–两个对象之间关联关系一般有三种类型:•一对一(1:1)•一对多(1:M)•多对多(M:N)对象模型•二元关联关系的讨论–表示符号•通过连线,表示两个对象之间的关联关系•连线上的数字,表示参与关联对象的个数教师书1+对象模型–链属性•链属性是指关联链的性质•例如:文件与用户之间是多对多的关系,但每个用户对不同文件拥有不同的访问权限,访问权限是文件与用户之间关联链的属性文件用户1+1+访问权限对象模型–限定•一个受限的关联由两个对象及一个限定词组成限定词可以看作是一种特殊的链属性,利用其能有效地减少关联的阶数•例如:目录与文件通常是多对一的关系,通过文件名的限定,就成为一对一的关系目录文件文件名对象模型发送者接受者–消息连接•消息连接反映了一个对象对另一个对象的处理依赖性•通常一个对象为了完成自己的任务,需要借助于另一个对象提供的服务带箭头动态模型•什么是动态模型–动态模型表示瞬时的、行为化的系统的“控制”性质,规定了对象模型中对象的合法变化序列。
即对象的动态行为–用状态图来描绘对象的状态、触发状态转换的事件、以及对象的行为(对事件的响应)–每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型动态模型•相关术语–事件:指某个时刻所发生的事情,是对引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象–状态:指对象在其生命周期中的某个特定阶段所处的某种情形–行为:指对象达到某种状态时所做的一系列处理操作动态模型•表示方法状态1DO:行为1状态2DO:行为2初始事件事件1[条件1]结束事件功能模型•什么是功能模型–功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,故更直接反映了用户对目标系统的需求•表示方法–功能模型也通常由一组数据流程图表示–在面向对象方法中,数据流程图没有在结构化分析中重要,有时可以省略三种模型之间的关系•三种模型之间的关系–三种模型分别从三个不同侧面描述了所要开发的系统,它们相互补充,相互配合–对象模型定义了对象实体,是最基本的,是其它两个模型的基础–动态模型规定了什么时候做,即在何种状态下接受了什么事情的触发–功能模型指明了系统应该“做什么”。
第三节 面向对象分析•面向对象分析目前主要采用Code和Yourdon提出的OOA建模方法,包括5个步骤:–标识对象–标识结构–标识主题–定义属性和实例联系–定义操作和消息联系OOA建模1. 标识对象–描述如何发现对象和类–从应用领域开始识别类及对象,即从问题陈述中提炼类和对象–对象可归类为七种形式OOA建模2. 标识结构–标识结构也就是分析类与类、对象与对象之间的关系即确定关联–首先识别一般-特殊结构,该结构捕获了识别出的类的层次结构即归类结构–其次识别整体-部分结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象即集成结构–最后确定组合结构OOA建模3.标识主题–主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解–主题可以看作是一个参照符号或指针,指向分析模型中的细节处–对于小系统,无须引入主题–通常按问题领域而不是用功能分解方法来确定主题OOA建模4.定义属性和实例联系OOA建模•5.定义操作和消息联系–操作一般分为三类•以某种方式处理数据的操作,如添加、删除、修改、选取•执行一次计算的操作•监控对象的某个控制事件出现的操作第四节 面向对象设计•OOD设计原则–模块化•对象可以看作模块–抽象•设计者可以创建自己的抽象数据类型和功能抽象,不必过细考虑问题域中细节。
–信息隐藏•信息隐藏通过对象的封装性实现:类结构分离了接口与实现,从而支持信息隐藏•对于用户来说,属性的表示方法和操作的实现算法是隐藏的第四节 面向对象设计•弱耦合–耦合指不同对象之间相互关联的紧密程度–尽可能降低对象之间的耦合,但当两个对象必须相互联系时,可通过类的协议(即公共接口)实现耦合,不应该依赖于类的具体实现细节–耦合分为两类:交互耦合、继承耦合–交互耦合通过消息传递实现–继承耦合通过对象间的继承性实现第四节 面向对象设计–强内聚•内聚指一个模块内各个元素彼此结合的紧密程度•三种内聚:服务内聚、类内聚、一般-特殊内聚•服务内聚–一个服务应该完成一个且仅完成一个功能•类内聚–一个类应该只有一个用途•一般-特殊内聚–设计一般-特殊结构,应符合大多数人的概念第四节 面向对象设计–可重用性•软件重用是提高软件开发生产率和目标系统质量的重要途径•重用的两层含义–尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类)–设计新类时,应考虑将来的可重复使用性第四节 面向对象设计•OOD方法1.定义问题2.为真实世界问题域的软件实现生成非形式化策略3.按下列步骤将策略形式化1)指出对象及其属性2)指出可能适用于对象的操作3)说明对象及操作间的关系,建立接口。
4.重复步骤2、3第四节 面向对象设计5.细化前面阶段所做的工作,找出子类、消息特性和其他详尽的细节6.表示与对象属性关联的数据结构7.表示与每一操作关联的过程细节–注意:前4个步骤,主要在OOA阶段完成第五节 面向对象编程作业•试用面向对象方法,设计一个图书馆的借还书系统–具体要求,参见教材第34页思考题一•为方便储户,某银行拟开发计算机储蓄系统储户填写的存款单或取款单由业务员输入,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并打印存款单给储户;如果是取款,系统计算利息,并打印利息清单给储户–分别用结构化分析与设计方法、面向对象分析与设计方法,进行分析与设计思考题二•为方便旅客,某航空公司拟开发一个机票预订系统旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,打印取票通知和帐单,旅客在飞机起飞前一天凭取票通知和帐单交款取票,系统校对无误,打印机票给旅客–分别用结构化分析与设计方法、面向对象分析与设计方法,进行分析与设计。












