1、1面向对象的分析与设计课件基础篇3主要知识点主要知识点1、什么是面向对象,它的基本思想和主要特点。、什么是面向对象,它的基本思想和主要特点。2、从认识论个角度,看面向对象方法的形成和主、从认识论个角度,看面向对象方法的形成和主要优势。要优势。3、面向对象方法中的、面向对象方法中的对象、类、属性、操作、继对象、类、属性、操作、继承、封装、聚合、关联、消息、多态性承、封装、聚合、关联、消息、多态性等基本概念等基本概念的确切含义,以及它们在系统构造中所起的作用。的确切含义,以及它们在系统构造中所起的作用。4、面向对象方法的发展历史。、面向对象方法的发展历史。第第1 1章章 面向对象方法概论面向对象方
2、法概论4从程序设计方法的角度看,面向对象是一种新的程序设计从程序设计方法的角度看,面向对象是一种新的程序设计范型范型(paradigm)(paradigm),其基本思想是使用对象、类、继承、封,其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设装、聚合、关联、消息、多态性等基本概念来进行程序设计。计。自自2020世纪世纪8080年代以来,面向对象方法已深入到计算机软件年代以来,面向对象方法已深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界与策略
3、,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如的关系,用什么观点来研究问题并进行问题求解,以及如何进行系统构造的软件方法学。从这个意义上讲:何进行系统构造的软件方法学。从这个意义上讲:面向对象方法是一种运用对象、类、继承、封装面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。的软件开发方法。1.1 1.1 什么是面向对象什么是面向对象第第1 1章章 面向对象方法概论面向对象方法概论5面向对象方法的基本思想面向对象方法的基本思想一、从现实世界中客观存在的事物
4、出发来构造系统一、从现实世界中客观存在的事物出发来构造系统强调直接以问题域(现实世界)中的事物为中心强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象为系统中的对象,作为系统的特征,把它们抽象为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射问题基本构成单位。这可以使系统直接映射问题域,域,保持问题域中事物及其相互关系的本来面貌。保持问题域中事物及其相互关系的本来面貌。二、充分运用人类日常的思维方法二、充分运用人类日常的思维方法强调运用人类在日常的逻辑思维中经常采用的思想强调运用人类在日常的逻
5、辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装方法与原则,例如抽象、分类、继承、聚合、封装、关联等等。这使得软件开发者能更有效地思考问、关联等等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表题,并以其他人也能看得懂的方式把自己的认识表达出来。达出来。6主要特点:主要特点:用用类类和和对象对象作为系统的基本构成单位。对象对应作为系统的基本构成单位。对象对应问题域中的事物,其问题域中的事物,其属性属性和和操作操作刻画了事物的静刻画了事物的静态特征和动态特征,它们之间的态特征和动态特征,它们之间的继承继承关系、关系、聚合聚合关系、关系、关联关联和和
6、消息消息如实地表达了问题域中事物之如实地表达了问题域中事物之间实际存在的各种关系。间实际存在的各种关系。因此,无论系统的构成成分,还是通过这些成分因此,无论系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射之间的关系而体现的系统结构,都可直接地映射问题域。问题域。7对问题域的认识(人)客观世界(问题域)计算机自然语言语言的鸿沟编程语言语言的过渡(人)编程(人)程序的理解和执行(机器)软件开发:对事物的认识和描述软件开发:对事物的认识和描述问题问题语言的鸿沟语言的鸿沟1.2 从认识论看面向对象方法的形成从认识论看面向对象方法的形成8计算机机器语言自然语言客观世界(问题域)
7、语言的鸿沟语言的发展语言的发展鸿沟变窄鸿沟变窄程序的指令、数据、地址,都是由二进制的“0”和“1”构成的。离机器最近,能够直接地执行,然而没有丝毫形象的意义,离人类的思维最远。汇编语言以易理解的符号表示指令、数据以及寄存器、地址等物理概念。稍稍适合人类的形象思维,但仍然相差很远。因为抽象层次太低,仍需考虑大量的机器细节。高级语言隐蔽了机器细节,使用有形象意义的命名和表达式,可以联系到程序所描述的具体事物。特别是结构化编程语结构化编程语言言更便于体现客观事物的结构和逻辑涵义,与人类的自然语言更接近,但仍有不少差距。面向对象语言能比较直接地反映客观世界的本来面目,并使软件开发人员能够运用人类认识事
8、物所采用的一般思维方法来进行软件开发。9问题域测试编程计算机编程语言自然语言需求分析总体设计详细设计软件工程学的作用软件工程学的作用传统的软件工程方法传统的软件工程方法分析与设计的鸿沟分析与设计概念及表示法的不一致10问题域问题域OOA计算机计算机自然语言面向对象编程语言OODOOPOOT软件工程学的作用软件工程学的作用面向对象的软件工程方法面向对象的软件工程方法111.3 1.3 面向对象方法的基本概念与原则面向对象方法的基本概念与原则对象,类对象,类属性,操作属性,操作封装封装继承,一般继承,一般-特殊结构特殊结构聚合,整体聚合,整体-部分结构部分结构关联关联消息消息多态多态持久对象,主动
9、对象持久对象,主动对象12对象对象是现实世界中是现实世界中某个实际存在的事某个实际存在的事物,它可以是有形物,它可以是有形的,比如一辆汽车的,比如一辆汽车,也可以是无形的,也可以是无形的,比如一项计划。,比如一项计划。对象是构成世界的对象是构成世界的一个独立单位。它一个独立单位。它具有自己的静态特具有自己的静态特征和动态特征。征和动态特征。属性属性是用来描述对象静态特是用来描述对象静态特征的一个数据项。征的一个数据项。操作操作是用来描述对象动态特是用来描述对象动态特征的一个动作序列。征的一个动作序列。对象标识对象标识就是对象的名字,就是对象的名字,有有“外部标识外部标识”和和“内部标内部标识识
10、”之分。之分。对象,属性,操作对象,属性,操作对象对象是系统中用来是系统中用来描述客观事物的一描述客观事物的一个实体,它是构成个实体,它是构成系统的一个基本单系统的一个基本单位。对象由一组属位。对象由一组属性和性和施加于这些属施加于这些属性一组操作构成。性一组操作构成。对象对象对象标识对象标识属性属性操作操作13对象(属性,操作,对象标识)对象(属性,操作,对象标识)要点要点:、对象标识符、对象标识符 、属性、属性 、服务、服务注意点:注意点:1.一体性一体性 对象标识符、属性和服务对象标识符、属性和服务2.区别区别 三者的区别三者的区别3.属性是对对象的静态描述属性是对对象的静态描述.4.服
11、务是对对象的动态描述服务是对对象的动态描述.外部是通过调用服务与对象取得联系外部是通过调用服务与对象取得联系.14类名,属性,服务的命名注意点类名,属性,服务的命名注意点 标识符(即名字)要达义。标识符(即名字)要达义。要简明,短小,符合人的思维习惯。要简明,短小,符合人的思维习惯。类名宜用名词或动名词,类名宜用名词或动名词,属性名用名词或动名词,属性名用名词或动名词,服务名用动词服务名用动词 或动名词。或动名词。15类名类名属性属性 服务服务PersonID,Name,Add,.GetID,GetName,ChID,ChName,.例:类课程的表示例:类课程的表示CourseCID,CNam
12、e,Credet,Term,NoteGetID,GetName,GetCredit,GetNoteChID,ChName,ChCredit,ChNote类的表示(注意与对象的联系)类的表示(注意与对象的联系)16对象(属性,操作,对象标识)对象(属性,操作,对象标识)对象对象属性属性服务服务人人姓名、电话、性别、年龄、地址、编号等等姓名、电话、性别、年龄、地址、编号等等获取姓名获取姓名,获取地址获取地址,获取编号获取编号,获取电话获取电话,修改地址修改地址(图一图一)例题例题 1:考虑对象:考虑对象“人人”,具体描述为:,具体描述为:对象对象属性属性服务服务课程课程课程名、编号、学时数、选课要
13、求、任课教师等课程名、编号、学时数、选课要求、任课教师等获取并修改课程名、编号、学时数、选课要求、获取并修改课程名、编号、学时数、选课要求、任课教师等任课教师等(图二图二)例题例题 2:考虑对象:考虑对象“课程课程”,具体描述为:,具体描述为:17类与对象的关系类与对象的关系 类类 对象对象 抽象定义抽象定义 实例实例 例:例:模具模具 由模具压出的工件由模具压出的工件 学生学生 学生王强学生王强 模板模板 应用模板产生的文件应用模板产生的文件 类型类型 变量变量,如如 C C 语言中的语言中的 int int 和和 int x;int x;18封装:封装:把对象的属性和操作结合成一个独立把对
14、象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。的系统单位,并尽可能隐蔽对象的内部细节。属属性性操操作作报刊报刊A A报刊报刊B B钱箱钱箱报刊零售报刊零售款货清点款货清点顾顾客客封装的重要意义:封装的重要意义:使对象能够集中而完整地描述并对应一个使对象能够集中而完整地描述并对应一个具体的事物。具体的事物。体现了事物的相对独立性,使对象外部不体现了事物的相对独立性,使对象外部不能随意存取对象的内部数据,避免了外部能随意存取对象的内部数据,避免了外部错误对它的错误对它的“交叉感染交叉感染”。对象的内部的修改对外部的影响很小,减对象的内部的修改对外部的影响很小,减少了修改引起的
15、少了修改引起的“波动效应波动效应”。由封装机由封装机制保证制保证 封装带来的问题:封装带来的问题:编程的麻烦编程的麻烦执行效率的损失执行效率的损失 解决办法:解决办法:不强调严格封装,不强调严格封装,实行可见性控制。实行可见性控制。(混合型(混合型OOPLOOPL)例如:例如:C+C+19封装的优点:封装的优点:数据独立数据独立(如每件事物都对应于一对象如每件事物都对应于一对象)具有隐藏性和安全性具有隐藏性和安全性(如银行的账户如银行的账户)易于维护易于维护(由于数据独立由于数据独立,易于发现问题易于发现问题)封装的缺点:封装的缺点:编程麻烦,编程麻烦,需要更多的输入输出函数。需要更多的输入输
16、出函数。执行效率的损失。执行效率的损失。解决办法:解决办法:不强调严格封装,实行可见性控制。不强调严格封装,实行可见性控制。(混合型(混合型OOPL),如),如C+20抽象,类,一般类,特殊类抽象,类,一般类,特殊类抽象与分类:抽象与分类:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,叫做抽象。抽象是形成概念的基本手段。把具有共同性质的事物划分为一类,叫做分类。类类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。类的作用是用来创建对象,对象是类的一个实例。对象对象对象对象对象对象对象对象对象对象
17、对象对象对象对象对象对象类名类名属性属性操作操作抽象抽象21不同程度的抽象可得到不同层次的分类不同程度的抽象可得到不同层次的分类较多地较多地忽略事忽略事物之间物之间的差别的差别可得到可得到较一般较一般的类的类较多地较多地注意事注意事物之间物之间的差别的差别可得到可得到较特殊较特殊的类的类运输工具运输工具火车火车汽车汽车飞机飞机卡车卡车轿车轿车轮船轮船车辆车辆22定义定义1:如果类如果类A A具有类具有类B B的全部属性和全部操作,而且具的全部属性和全部操作,而且具有自己特有的某些属性或操作,则有自己特有的某些属性或操作,则A A叫做叫做B B的的特殊类特殊类,B B叫叫做做A A的的一般类一般
18、类。一般类与特殊类又称。一般类与特殊类又称父类父类与与子类子类。定义定义2 2:如果类如果类A A的全部对象都是类的全部对象都是类B B的对象,而且类的对象,而且类B B中存中存在不属于类在不属于类A A的对象,则的对象,则A A是是B B的特殊类,的特殊类,B B是是A A的一般类。的一般类。可以证明,以上两种定义是等价的可以证明,以上两种定义是等价的一般类和特殊类的定义一般类和特殊类的定义23继承:继承:特殊类拥有其一般类的全部属性与操特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。作,称作特殊类对一般类的继承。继承意味着继承意味着自动地拥有自动地拥有,或曰,或曰隐含地复制隐
19、含地复制继承简化了继承简化了人们对事物人们对事物的认识和描的认识和描述,非常有述,非常有益于软件复益于软件复用,是用,是OOOO技技术提高软件术提高软件开发效率的开发效率的重要原因之重要原因之一。一。由继承机由继承机制保证制保证由一组具有继由一组具有继承关系的类所承关系的类所组成的结构称组成的结构称作作一般一般-特殊特殊结构结构。它是一。它是一个以类为结点个以类为结点,以继承关系,以继承关系为边的连通的为边的连通的有向图。有向图。继承关系的语义:继承关系的语义:“is a kind of”军人军人军官军官士兵士兵义务兵义务兵志愿兵志愿兵例例24多继承:多继承:允许一个允许一个特殊类具有一个以上
20、特殊类具有一个以上一般类的继承方式称作多继承一般类的继承方式称作多继承人员人员姓名姓名教职工教职工职称职称专业专业研究生研究生学号学号班级班级专业专业在职研究生在职研究生在职单位在职单位 例例:25聚合:聚合:是两个类之间的一个二元关系,它表示一个类的对象是两个类之间的一个二元关系,它表示一个类的对象实例以另一个类的对象实例作为其组成部分。实例以另一个类的对象实例作为其组成部分。聚合刻画了现实事物之间的构成关系或者拥有关系。聚合刻画了现实事物之间的构成关系或者拥有关系。部分对象部分对象整体对象嵌套对象嵌套对象整体对象部分对象部分对象整体对象对象指针或对象标识对象指针或对象标识两种聚合,两种实现
21、方式:两种聚合,两种实现方式:紧密、固定的聚合关系紧密、固定的聚合关系例如汽车与发动机例如汽车与发动机松散、灵活的聚合关系松散、灵活的聚合关系例如公司与法律顾问例如公司与法律顾问聚合关系的语义:聚合关系的语义:“has a”或或“is a part of”紧密、固定紧密、固定的聚合方式的聚合方式又称为又称为组合组合26整体整体-部分结构:部分结构:聚合关系又称整体聚合关系又称整体-部分关系。由一组具有聚合关系的类所部分关系。由一组具有聚合关系的类所形成的结构称为形成的结构称为整体整体-部分结构部分结构。它是一个以类为结点,以。它是一个以类为结点,以聚合关系为边的连通有向图。聚合关系为边的连通有
22、向图。例例公公 司司0*0*法律顾问法律顾问汽车发动机车身气缸111111*27关联:关联:两个或者多个类上的一个关系(即这些类的对象实两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡儿积的一个子集合),其中的元素提例集合的笛卡儿积的一个子集合),其中的元素提供了被开发系统的应用领域中一组有意义的信息。供了被开发系统的应用领域中一组有意义的信息。城市城市*有航线有航线 城市之间有航线城市之间有航线教教 师师学学 生生*1 1指导论文指导论文 教师与被指导的学生教师与被指导的学生例:例:28用集合论的观点和系统需求讨论关联概念用集合论的观点和系统需求讨论关联概念 关联是两个或者多个类上的
23、一个关系,其中的元素提关联是两个或者多个类上的一个关系,其中的元素提供了被开发系统的应用领域中一组有意义的信息。供了被开发系统的应用领域中一组有意义的信息。例:设例:设A和和B是两个类,它们的对象实例集合是是两个类,它们的对象实例集合是A=a1,a2,anB=b1,b2,bmA和和B的笛卡儿积的笛卡儿积AB=,这个笛卡儿积集合中这个笛卡儿积集合中有有n m个元素,它们个元素,它们可以组合成可以组合成2(n m)个个子集合。子集合。但是只有某个子集合但是只有某个子集合中的元素提供了被开中的元素提供了被开发系统的应用领域中发系统的应用领域中一组有意义的信息时一组有意义的信息时,才有必要把它定义,才
24、有必要把它定义为系统中的一个关联为系统中的一个关联。29例如:在一个教学管理系统中例如:在一个教学管理系统中有教师、学生、教务员课程等类。有教师、学生、教务员课程等类。系统中需要表明每一门课程由哪位教师承担、有哪些学生系统中需要表明每一门课程由哪位教师承担、有哪些学生选修,因此需要在教师和课程之间定义一个关联,在学生选修,因此需要在教师和课程之间定义一个关联,在学生和课程之间也定义一个关联。和课程之间也定义一个关联。该系统的教务员要为学生做注册、登记成绩等工作,但是该系统的教务员要为学生做注册、登记成绩等工作,但是不需要区别是哪个教务员为哪个学生做的,因此就不需要不需要区别是哪个教务员为哪个学
25、生做的,因此就不需要在教务员和学生这两个类之间定义关联。在教务员和学生这两个类之间定义关联。教师教师课程课程学生学生教务员教务员callcall1*教务员教务员30消息:消息:消息是向对象发出的服务请求消息是向对象发出的服务请求 目前在大部分面向对象的编程语言中,消息其实就目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。是函数(或过程)调用。但是,函数调用只是实现消息的方式之一,上述理解但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序系统只适合于顺序系统更一般的定义:更一般的定义:消息是对象之间在一次交互中所传送的信息消息是对象之间在一次交互中所传送的信息 31什么
26、是消息什么是消息 消息是向对象发出的服务请求消息是向对象发出的服务请求1.对象标志对象标志2.服务标志服务标志 3.输入信息输入信息4.输出信息输出信息消息的组成消息的组成例:例:“请你把那本书拿给我!请你把那本书拿给我!”对象标志对象标志:你你 服务标志服务标志:把那本书拿给我把那本书拿给我 输入信息输入信息:那本书那本书 输出信息输出信息:书给我书给我消息的作用消息的作用1.提供类之间的动态联系提供类之间的动态联系2.对象通过消息对外提供服务对象通过消息对外提供服务注意注意:你不能直接拿书你不能直接拿书,而是通过发送消息请求服务而是通过发送消息请求服务.32消息的执行流程:消息的执行流程:
27、创创建建对对象象发发送送消消息息分分析析处处理理消消息息返返回回相相应应信信息息结结束束接受消息接受消息例例11:对象对象A:打印机打印机对象对象B:操作系统操作系统接受消息接受消息发送打印消息发送打印消息执行执行返回信息返回信息结束结束接受信息接受信息在例题中在例题中:对象标志对象标志:打印机打印机,服务标志服务标志:打印打印输入信息输入信息:要打印的文件要打印的文件 输出信息输出信息:打印结束打印结束分析两个对象打印机和操作系统之间的消息通信分析两个对象打印机和操作系统之间的消息通信.33教师教师课程课程学生学生教务员教务员callcall1*纠正一种误解纠正一种误解认为在任何两个类之间只
28、有存在关联才认为在任何两个类之间只有存在关联才可能存在消息。可能存在消息。实际上,关联和消息是两个截然不同的概念,二者是相互实际上,关联和消息是两个截然不同的概念,二者是相互独立的。独立的。教务员教务员call34多态:多态:多态是指同一个命名可具有不同的语义。多态是指同一个命名可具有不同的语义。OOOO方法中,常方法中,常指在一般类中定义的属性或操作被特殊类继承之后,可指在一般类中定义的属性或操作被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。以具有不同的数据类型或表现出不同的行为。实现机制:实现机制:重写(重写(override)在特殊类中对继承来的属性或操作在特殊类中对继承来
29、的属性或操作重新定义其实现;重新定义其实现;动态绑定(动态绑定(dynamic binding)在运行时根据对象接收在运行时根据对象接收的消息动态地确定要连接哪一段操作代码;的消息动态地确定要连接哪一段操作代码;类属(类属(generic)操作参量的类型可以是参数化的。操作参量的类型可以是参数化的。35多态例:多态例:多边形边数顶点数据绘图XY轴向矩形x边数*顶点数据*绘图正多边形*顶点数据*绘图36其他:其他:持久对象:持久对象:在程序运行结束后仍能继续保存的对象在程序运行结束后仍能继续保存的对象超出了程序运行时间,跨越了内外存空间超出了程序运行时间,跨越了内外存空间实现途径:支持持久对象的
30、实现途径:支持持久对象的OOPL,OO-DBMS主动对象:主动对象:至少有一个操作不需要接收消息就能主动执至少有一个操作不需要接收消息就能主动执行的对象。行的对象。描述具有主动行为的事物描述具有主动行为的事物描述并发执行的多个控制流描述并发执行的多个控制流37面向机器面向代数面向过程面向数据面向人面向文件面向信息面向应用面向功能面向数据流 面向对象是软件方法学的返朴归真面向对象是软件方法学的返朴归真软件科学的发展历程中软件科学的发展历程中出现过许多出现过许多“面向面向”软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常思维,是软件理论的返朴归真。面向对象面向对象381.雏
31、形阶段雏形阶段60年代挪威计算中心开发的年代挪威计算中心开发的Simula67面向对象语言的先面向对象语言的先驱和第一个里程碑(首先引入了类的概念和继承机制)。驱和第一个里程碑(首先引入了类的概念和继承机制)。70年代年代CLU、并发、并发Pascal、Ada和和Modula-2等语言对抽象数据等语言对抽象数据类型理论的发展起到重要作用(支持数据与操作的封装)。类型理论的发展起到重要作用(支持数据与操作的封装)。犹他大学的博士生犹他大学的博士生Alan Kay设计了一个实验性的语言设计了一个实验性的语言Flex。从从Simula 67中借鉴了许多概念,如类、对象、继承等。中借鉴了许多概念,如类
32、、对象、继承等。1972年年Palo Alno研究中心(研究中心(PARC)发布了)发布了Smalltalk-72,其,其中正式使用了中正式使用了“面向对象面向对象”这个术语。这个术语。Smalltalk的问世标志着面向对象程序设计方法的正式形成。的问世标志着面向对象程序设计方法的正式形成。但是这个时期的但是这个时期的Smalltalk语言还不够完善语言还不够完善1.4 OO1.4 OO方法的发展历史与现状方法的发展历史与现状39PARCPARC先后发布了先后发布了Smalltalk-72Smalltalk-72,7676,7878等版本,直至等版本,直至19811981年推出该语言最完善的版
33、本年推出该语言最完善的版本Smalltalk-80Smalltalk-80。Smalltalk-80Smalltalk-80的问世被今认为是面向对象语言发展史上最的问世被今认为是面向对象语言发展史上最重要的里程碑。迄今绝大部分面向对象的基本概念及其支重要的里程碑。迄今绝大部分面向对象的基本概念及其支持机制在持机制在Smalltalk-80Smalltalk-80中都已具备。它是第一个完善的、中都已具备。它是第一个完善的、能够实际应用的面向对象语言。能够实际应用的面向对象语言。但是,但是,SmalltalkSmalltalk开始几年的应用不够广泛,原因是:开始几年的应用不够广泛,原因是:一种新的
34、软件方法学被广泛接受需要一定的时间。一种新的软件方法学被广泛接受需要一定的时间。商品化软件开发工作到商品化软件开发工作到8787年才开始进行。年才开始进行。追求纯追求纯OOOO的宗旨使许多软件开发人员感到不便。的宗旨使许多软件开发人员感到不便。2.2.完善阶段完善阶段403.3.繁荣阶段繁荣阶段自自8080年代中期到年代中期到9090年代,是面向对象语言走向繁荣的阶段。年代,是面向对象语言走向繁荣的阶段。其主要表现是大批比较实用的其主要表现是大批比较实用的OOPLOOPL的涌现,例如的涌现,例如 C+C+、Objective-CObjective-C、Object PascalObject P
35、ascal、CLOSCLOS(Common Lisp Common Lisp Object SystemObject System)、)、EiffelEiffel、ActorActor等。等。OOOO编程语言分为编程语言分为纯纯OOOO语言语言和和混合型混合型OOOO语言语言混合型语言是在传统的过程式语言基础上增加混合型语言是在传统的过程式语言基础上增加OOOO语言成分,语言成分,在实用性方面具有更大的优势。在实用性方面具有更大的优势。此时的纯此时的纯OOOO语言也比较重视实用性。语言也比较重视实用性。414 4、发展到软件生存周期前期阶段、发展到软件生存周期前期阶段计算机软件领域的很多新计算
36、机软件领域的很多新的方法与技术都有这样的的方法与技术都有这样的发展经历,例如:结构化发展经历,例如:结构化方法,形式化方法,软件方法,形式化方法,软件复用。复用。与其他方法相比,面向对与其他方法相比,面向对象的方法与技术发展到软象的方法与技术发展到软件生命期的前期阶段有着件生命期的前期阶段有着更为深刻的意义。更为深刻的意义。当前:几乎覆盖计算机软件当前:几乎覆盖计算机软件领域的所有分支领域的所有分支面向对象的编程语言面向对象的编程语言面向对象的分析面向对象的分析面向对象的设计面向对象的设计面向对象的软件测试面向对象的软件测试面向对象的软件维护面向对象的软件维护面向对象的图形用户界面面向对象的图
37、形用户界面面向对象的数据库面向对象的数据库面向对象的数据结构面向对象的数据结构面向对象的智能程序设计面向对象的智能程序设计面向对象的软件开发环境面向对象的软件开发环境面向对象的体系结构面向对象的体系结构许多新领域以面向对许多新领域以面向对象理论为基础,或作象理论为基础,或作为主要技术为主要技术软件体系结构(软件体系结构(software architecture)领域工程(领域工程(domain engineering)设计模式(设计模式(design patterns)基于构件的软件工程(基于构件的软件工程(CBSE)智能代理(智能代理(agent)面向服务的体系结构(面向服务的体系结构(S
38、OA)面向对象方法从编程发展到面向对象方法从编程发展到设计、分析,进而发展到整设计、分析,进而发展到整个软件生存周期。个软件生存周期。425.最新发展最新发展编程语言编程语言语言语言+类库类库+可视化编程环境可视化编程环境例如:例如:Visual C+,Visual Basic,Delhpi分析与设计方法分析与设计方法走向统一,形成统一建模语言走向统一,形成统一建模语言UML结束各种方法的概念及表示法不一致的局面结束各种方法的概念及表示法不一致的局面43传统方法传统方法数据结构数据结构+算法算法=程序设计程序设计以对象为中心组织数据与操作以对象为中心组织数据与操作数据数据对象的属性对象的属性操
39、作操作对象的操作对象的操作类型与变量类型与变量类与对象实例类与对象实例函数(过程)调用函数(过程)调用消息传送消息传送类型与子类型类型与子类型一般类与特殊类,继承一般类与特殊类,继承构造类型构造类型整体整体-部分结构,聚合部分结构,聚合指针指针关联关联不同点不同点 思想观念:思想观念:从对象出发认识问题域;构造策略:构造策略:以对象作为构成系统的基本单位,将对象的数据与操作紧密结合;保保证机制:证机制:由支持封装、继承、多态的机制保证其原则的实现。面向对象方法与传统方法的比较面向对象方法与传统方法的比较面向对象方法面向对象方法44在软件生存周期全过程运用面向对象方法在软件生存周期全过程运用面向
40、对象方法L.M.Northrop:L.M.Northrop:“尽管面向对象语言正取得令人振奋的发展,但编程并尽管面向对象语言正取得令人振奋的发展,但编程并不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更不是软件开发问题的主要根源。需求分析与设计问题更为普遍并且更值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而值得解决。因此面向对象开发技术的焦点不应该只对准编程阶段,而应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的应更全面地对准软件工程的其他阶段。面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复目标是它适合于解决分析与设
41、计期间的复杂性并实现分析与设计的复用。面向对象的开发不仅仅是编程,必须在整个软件生存周期采用一用。面向对象的开发不仅仅是编程,必须在整个软件生存周期采用一种全新的方法,这一观点已被人们所接受。种全新的方法,这一观点已被人们所接受。软件工程百科全书软件工程百科全书纽约,纽约,19941994面向对象的分析面向对象的设计面向对象的编程面向对象的测试面向对象的软件维护45第第2 2章章 不同的分析与设计方法不同的分析与设计方法几种典型的几种典型的建模方法建模方法功能分解法功能分解法结构化方法结构化方法信息建模法信息建模法面向对象方法面向对象方法方法的比较方法的比较对问题域的不对问题域的不同映射同映射
42、以不同的概念以不同的概念构成系统模型构成系统模型什么是什么是OOA什么是什么是OODOO方法的主要优点方法的主要优点几种典型的几种典型的OO方法方法从软件系统建从软件系统建模面临的难题模面临的难题看面向对象方看面向对象方法的优势法的优势Booch方法方法Coad-Yourdon方法方法Jacobson方法方法(OOSE)Rumbaugh方法方法(OMT)本章内容结构本章内容结构46历史上几种典型的建模方法历史上几种典型的建模方法2.1 功能分解法功能分解法(function decomposition)以系统需要提供的功能为中心来组织系统。首先定义各种功能,然后把功能分解为子功能对较大的子功能
43、进一步分解,直到可给出明确的定义。根据功能子功能的需要设计数据结构。定义功能/子功能之间的接口。没有明确地区分分析与设计没有明确地区分分析与设计 功能 功能 功能 系统 子功能子功能子功能子功能分解分解分解分解分解分解建模过程:建模过程:层层进行功能分解层层进行功能分解47功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块得到的系统模型:得到的系统模型:由模块及其接口构成由模块及其接口构成优点与缺点优点与缺点:直接地反映用户的需求,所以工作很容易开始。不能直接地映射问题域,很难检验结果
44、的正确性。对需求变化的适应能力很差。局部的错误和修改很容易产生全局性的影响。482.2 结构化方法结构化方法结构化分析(结构化分析(structured analysis,SA)结构化设计(结构化设计(structured design,SD)结构化分析结构化分析又称数据流法又称数据流法,其基本策略是跟踪数据流,即其基本策略是跟踪数据流,即研究问题域中数据如何流动,以及在各个环节上进行何种研究问题域中数据如何流动,以及在各个环节上进行何种处理,从而发现数据流和加工。得到的分析模型是数据流处理,从而发现数据流和加工。得到的分析模型是数据流图(图(DFD),主要模型元素是),主要模型元素是数据流数
45、据流、加工加工、文件文件及及端点端点,外加,外加处理说明处理说明和和数据字典数据字典。结构化设计结构化设计与功能分解法基本相同,基于模块的概念建立与功能分解法基本相同,基于模块的概念建立设计模型,分为概要设计和详细设计。设计模型,分为概要设计和详细设计。概要设计:概要设计:确定系统中包含哪些模块以及模块之间的调确定系统中包含哪些模块以及模块之间的调用关系,得到模块结构图(用关系,得到模块结构图(MSD)。)。详细设计:详细设计:描述每个模块内部的数据结构和操作流程。描述每个模块内部的数据结构和操作流程。49数据流数据流加工加工文件文件起点起点处理说明处理说明数据词典数据词典优点:优点:有严格的
46、法则,强调研究问题域。有严格的法则,强调研究问题域。缺点:缺点:仍然是间接映射问题域;仍然是间接映射问题域;与结构化设计的概念不一致,从分析与结构化设计的概念不一致,从分析到设计的过渡比较困难;到设计的过渡比较困难;数据流和加工的数量太多,引起分析数据流和加工的数量太多,引起分析文档的膨胀。文档的膨胀。终点终点502.3 信息建模法(信息建模法(information modeling)由实体由实体-关系法(关系法(E-R方法)发展而来。方法)发展而来。核心概念是核心概念是实体实体和和关系关系。实体描述问题域中的事物,关系描。实体描述问题域中的事物,关系描述事物之间在数据方面的联系,都可以带有
47、述事物之间在数据方面的联系,都可以带有属性属性。发展之后的方法也把实体称作发展之后的方法也把实体称作对象对象,并使用了,并使用了类型类型和和子类型子类型的概念,作为实体(对象)的抽象描述。的概念,作为实体(对象)的抽象描述。有人也称之为面向对象方法,但有以下差别:有人也称之为面向对象方法,但有以下差别:1.强调的重点是信息建模和状态建模,而不是对象建模。2.没有把对实体属性所进行的操作封装到实体对象中。3.只有属性的继承,不支持操作的继承。4.没有采用消息通讯。实体实体属性属性属性属性属性属性属性属性关系关系实体实体mnE-R 图图信息模型信息模型 mn对象对象属性属性关系关系属性属性对象对象
48、属性属性512.4 面向对象方法面向对象方法面向对象的分析(面向对象的分析(OOA)面向对象的设计(面向对象的设计(OOD)运用对象、类、继承、封装、聚合、关联、消息、多态性运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统。等概念来构造系统。把问题域中的事物抽象为对象,作为系统的基本构成单位把问题域中的事物抽象为对象,作为系统的基本构成单位其属性和操作刻画了事物的静态特征和动态特征其属性和操作刻画了事物的静态特征和动态特征完整完整地刻画了问题域中事物。地刻画了问题域中事物。用类作为对象的抽象描述,建立它们之间的继承、聚合、用类作为对象的抽象描述,建立它们之间的继承、聚合、关联
49、、消息等关系关联、消息等关系如实地表达了问题域中事物之间的如实地表达了问题域中事物之间的各种关系。各种关系。封装、继承、聚合、关联、消息通讯等原则符合人类的日封装、继承、聚合、关联、消息通讯等原则符合人类的日常思维常思维使系统的复杂性得到控制。使系统的复杂性得到控制。因此,得到的系统模型可以直接映射问题域。因此,得到的系统模型可以直接映射问题域。52不同的建模方法不同的建模方法 体现于体现于从不同的概念出发来认识问题域用不同的概念进行系统构造系统对现实世界的不同映射 信息建模法 面向对象方法功能功能/子功能子功能功能接口功能接口功能分解法数据流数据流加工加工 结构化方法间接映射间接映射间接映射
50、间接映射半直接映射半直接映射直接映射直接映射53审批审批不同的方法对同一应用实例(电话安装业务系统)的不同效果不同的方法对同一应用实例(电话安装业务系统)的不同效果结构化分析结构化分析数据流和加工数据流和加工登记登记安装安装开通开通问题:问题:不是直接映射问题域,与问题域事物相关的数据和操作不是围绕这些事物不是直接映射问题域,与问题域事物相关的数据和操作不是围绕这些事物来组织的,而是分散在数据流和加工中;来组织的,而是分散在数据流和加工中;经常发生信息膨胀经常发生信息膨胀模型中的多个数据流,实现中其实只是一项数据;模型中的多个数据流,实现中其实只是一项数据;分析模型难以与设计模型及源程序对应。