《面向对象的程序设计原理与技术.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计原理与技术.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、首都师范大学教育技术系首都师范大学教育技术系方海光方海光2007年年9月月面向对象的程序设计原理与技术面向对象的程序设计原理与技术1http:/ 课件存放位置课件存放位置2第一章第一章 面向过程与面向对象的程序设计面向过程与面向对象的程序设计本章的主要目的是本章的主要目的是理解理解面向过程的程序设计面向过程的程序设计和面向对象的程序设计在本质上有什么和面向对象的程序设计在本质上有什么不同不同。主要从以下几个方面来讲解:主要从以下几个方面来讲解:计算机的工作过程计算机的工作过程面向过程的程序设计面向过程的程序设计面向对象的程序设计面向对象的程序设计3计算机的工作过程计算机的工作过程例:计算圆面积
2、。例:计算圆面积。s=3.14*r*r4输入设备输入设备程序程序原始数据原始数据内内存存储储器器原始数据原始数据运算器运算器结果结果结果结果输出设备输出设备外存储器外存储器控制器控制器计算机的工作过程计算机的工作过程基本结构图基本结构图程程序序5计算机的工作过程计算机的工作过程计算机在程序的控制下解题计算机在程序的控制下解题程序设计语言的发展经历了五代(前三代程序设计语言的发展经历了五代(前三代语言编写的程序本质上是相同的,都是按语言编写的程序本质上是相同的,都是按照机器的工作过程来编写,只不过程序的照机器的工作过程来编写,只不过程序的描述语句越来越接近人的思维,通用性越描述语句越来越接近人的
3、思维,通用性越来越强)来越强)第一代为机器语言第一代为机器语言第二代为汇编语言第二代为汇编语言第三代语言为高级语言第三代语言为高级语言第四代语言为面向对象的计算机语言第四代语言为面向对象的计算机语言第五代语言是按人工智能原理设计的语第五代语言是按人工智能原理设计的语言言6面向过程的程序设计面向过程的程序设计下面用面向过程的语言解题下面用面向过程的语言解题标准标准C语言源程序语言源程序#include void main()float r,s;printf(Input r:);scanf(%f,&r);s=3.14*r*r;printf(The area is:%fn,s);7例例11 Page
4、2例例12 Page38面向过程的程序设计面向过程的程序设计人模拟计算机思维来解题(输入人模拟计算机思维来解题(输入-运算运算-输出)输出)程序设计工作主要围绕解题过程的设计程序设计工作主要围绕解题过程的设计程序功能隐含在程序代码中程序功能隐含在程序代码中理解困难理解困难维护(修改)困难维护(修改)困难9面向过程的程序设计面向过程的程序设计在长期的软件开发实践中,人们总结出了在长期的软件开发实践中,人们总结出了一些设计原理和系统化的方法,包括:一些设计原理和系统化的方法,包括:模块化模块化:如函数:如函数抽象抽象 :忽略事物间的差异,集中和概括共性的方忽略事物间的差异,集中和概括共性的方面,例
5、如复杂问题抽象为用较自然的语面,例如复杂问题抽象为用较自然的语句来表示;句来表示;自顶向下的程序设计方法就是一个从抽象自顶向下的程序设计方法就是一个从抽象到具体的过程。到具体的过程。10面向过程的程序设计面向过程的程序设计信息隐藏信息隐藏:如局部变量:如局部变量模块独立模块独立:高内聚和松耦合高内聚和松耦合 内聚:内部元素间结合的紧密程度;内聚:内部元素间结合的紧密程度;耦合:模块间互相依赖的紧密程度。耦合:模块间互相依赖的紧密程度。结构程序设计结构程序设计:自顶向下逐步求精的设自顶向下逐步求精的设计方法、单入口单出口的控制结构计方法、单入口单出口的控制结构一句话:一句话:功能分解功能分解或算
6、法分解或算法分解11面向对象的程序设计面向对象的程序设计人类习惯的解决问题的方法:人类习惯的解决问题的方法:“顾客顾客-服服务员务员”的工作模式的工作模式。例:去理发馆理发例:去理发馆理发面向对象的方法模拟人类习惯的解题方法面向对象的方法模拟人类习惯的解题方法,用用对象分解对象分解取代功能分解,程序中的所有取代功能分解,程序中的所有对象对象分工协作分工协作,共同完成整个程序的功能,共同完成整个程序的功能。12面向对象的程序设计面向对象的程序设计面向对象方法的四个要点:面向对象方法的四个要点:(1)面向对象的软件系统由对象组成;)面向对象的软件系统由对象组成;(2)所有的对象划分为对象类,每个类
7、由数据)所有的对象划分为对象类,每个类由数据和方法组成;和方法组成;(3)若干个类按照子类(派生类)与父类(基)若干个类按照子类(派生类)与父类(基类)的关系组成了层次结构;类)的关系组成了层次结构;-继承,如汽车继承,如汽车与交通工具;与交通工具;(4)对象之间通过传递消息互相联系。)对象之间通过传递消息互相联系。OO=对象对象+类类+继承继承+消息消息 13面向对象的程序设计面向对象的程序设计面向对象方法的优点面向对象方法的优点 (1)与人的思维习惯一致)与人的思维习惯一致 (2)稳定性好)稳定性好 (3)可重用性好)可重用性好 (4)可维护性好)可维护性好 14例例13 Page6 15
8、1 1 对对 象象对象相当于现实世界中的实体对象相当于现实世界中的实体对象对象=属性属性 +方法方法数据数据操作操作内部操作内部操作1内部操作内部操作2数据数据公有公有操作操作1公有公有操作操作216对象的定义对象的定义 对象是一个封装体,封装了数据结构及可以施加在这对象是一个封装体,封装了数据结构及可以施加在这些数据结构上的操作。些数据结构上的操作。对象有对象名;对象有对象名;对象中的数据表示对象的状态,对象中的数据表示对象的状态,一个对象的状态只能一个对象的状态只能由该对象本身的操作来改变由该对象本身的操作来改变。对象向外界提供一组服务(即公有的操作),称为与对象向外界提供一组服务(即公有
9、的操作),称为与外界的接口。外界的接口。对对 象象17对象的特点:对象的特点:以数据为中心以数据为中心对象是主动的对象是主动的实现了数据封装实现了数据封装本质上具有并行性本质上具有并行性模块独立性好模块独立性好对对 象象182 2 其他面向对象的概念其他面向对象的概念类(类(Class)是对具有相同数据属性和相同操作的一个或一组是对具有相同数据属性和相同操作的一个或一组(集合)相似对象的描述,是一个(集合)相似对象的描述,是一个抽象的概念抽象的概念。类与函数的不同:类与函数的不同:类类 封装了函数与数据封装了函数与数据 是对问题的抽象描述是对问题的抽象描述 函数函数 封装了语句与数据封装了语句
10、与数据 完成特定的功能完成特定的功能例:大小不同、位置不一和颜色不同的圆,可以定义为例:大小不同、位置不一和颜色不同的圆,可以定义为一个一个Circle类。类。例:中国人例:中国人19实例(实例(Instance)是由某个特定的类所描述的是由某个特定的类所描述的一个具体的对一个具体的对象象。“对象对象”这个术语,既可以指一个具体的这个术语,既可以指一个具体的对象,也可以泛指一般的对象,对象,也可以泛指一般的对象,“实例实例”这个术语,必然是指一个具体的对象。这个术语,必然是指一个具体的对象。C+中,要定义一个对象或实例,必须中,要定义一个对象或实例,必须先建立一个这类对象的类。先建立一个这类对
11、象的类。基本概念基本概念20属性(属性(Attribute)类中所定义的数据,它是对客观世界实体所类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特具有的性质的抽象。类的每个实例都有自己特有的属性值。有的属性值。例:圆类(半径、位置、颜色)例:圆类(半径、位置、颜色)在在C+C+语言中把属性称为数据成员。语言中把属性称为数据成员。基本概念基本概念21方法(方法(MethodMethod)对象所能执行的操作,它应用于类或被类中对象使用。对象所能执行的操作,它应用于类或被类中对象使用。在在C+中称为成员函数。中称为成员函数。通常,一个函数对应一个通常,一个函数对应一个操
12、作,实现一个功能。操作,实现一个功能。例:圆对象响应显示圆的消息例:圆对象响应显示圆的消息 在在CircleCircle类中必须定义能够显示这个圆的方法,类中必须定义能够显示这个圆的方法,即编写成员函数即编写成员函数Show(int color)Show(int color)。基本概念基本概念22消息(消息(MessageMessage)对象之间相互请求相互协作的途径对象之间相互请求相互协作的途径 一个消息由下述三部分组成:一个消息由下述三部分组成:(1 1)接收消息的对象;)接收消息的对象;(2 2)消息选择符(也称为消息名);)消息选择符(也称为消息名);(3 3)零个或多个变元。)零个或
13、多个变元。例如例如 :MyCircle.Show(GREEN)MyCircle.Show(GREEN);其中:其中:MyCircle MyCircle是接收消息的对象的名字是接收消息的对象的名字 Show Show是消息选择符(即消息名)是消息选择符(即消息名)GREEN GREEN是消息的变元。是消息的变元。基本概念基本概念23封装性(封装性(Encapsulation)封装即把数据和实现操作的代码集中起来放封装即把数据和实现操作的代码集中起来放在对象内部,外界通过对象提供的接口来使用在对象内部,外界通过对象提供的接口来使用它,不需知道内部数据结构细节和实现操作的它,不需知道内部数据结构细节
14、和实现操作的算法算法。实现封装的条件实现封装的条件:(1)有一个清楚的边界)有一个清楚的边界(2)有确定的接口(用于接受用户发送的消息)有确定的接口(用于接受用户发送的消息)(3)受保护的内部实现)受保护的内部实现 封装的好处就是实现了信息隐藏,把对象的封装的好处就是实现了信息隐藏,把对象的实现细节对外界隐藏起来了,提高安全性。实现细节对外界隐藏起来了,提高安全性。在在C+中,通过定义类来实现封装。中,通过定义类来实现封装。基本概念基本概念24继承(继承(Inheritance)指能够直接获得已有的性质和特征,而不必重指能够直接获得已有的性质和特征,而不必重复定义它们。是复定义它们。是子类子类
15、自动地共享自动地共享基类基类中定义的中定义的数据和方法数据和方法的机制。的机制。例:家族关系例:家族关系 继承具有传递性,如果类继承具有传递性,如果类C C继承类继承类B B,类,类B B继继承类承类A A,则类,则类C C继承类继承类A A。一个类除了具有该类。一个类除了具有该类所描述的性质外,还具有该类上层全部基类描所描述的性质外,还具有该类上层全部基类描述的一切性质。述的一切性质。基本概念基本概念25多态性多态性(Polymorphism)(Polymorphism)在类等级的不同层次中,在类等级的不同层次中,相同的消息相同的消息,被,被不同类不同类的对象接收,产生了的对象接收,产生了不
16、同的行为不同的行为。例:例:“打打”好处:增加软件系统的灵活性,减少了信好处:增加软件系统的灵活性,减少了信息冗余,提高了软件的可重用性和可扩充性。息冗余,提高了软件的可重用性和可扩充性。在在C+语言中,多态性是通过虚函数来实现语言中,多态性是通过虚函数来实现的。(动态联编)的。(动态联编)基本概念基本概念26重载(重载(OverloadingOverloading)有两种重载:有两种重载:函数重载函数重载是指在同一作用域内的若干个是指在同一作用域内的若干个参参数特征不同的函数数特征不同的函数可以使用可以使用相同的函数名字相同的函数名字;例:例:运算符重载运算符重载是指是指同一个运算符同一个运
17、算符可以施加于可以施加于不同类型的操作数不同类型的操作数上面。上面。例:例:cout cout“2”;“2”;表示向屏幕输出字符串表示向屏幕输出字符串2 2 x x2;2;表示将表示将x x中的二进制左移中的二进制左移2 2位位基本概念基本概念27 在在C+C+语言中函数重载是通过语言中函数重载是通过静态联编静态联编实实现的,也就是在编译时根据函数变元的现的,也就是在编译时根据函数变元的个个数和类型数和类型 ,决定到底使用函数的哪个实现,决定到底使用函数的哪个实现代码;对于重载的运算符,在编译时根据代码;对于重载的运算符,在编译时根据被操作数的类型,决定使用该算符的哪种被操作数的类型,决定使用
18、该算符的哪种语义。语义。基本概念基本概念283 面向对象建模面向对象建模什么是模型什么是模型使用模型的好处使用模型的好处三种模型三种模型模型的表示模型的表示29面向对象建模面向对象建模为什么要建模?为什么要建模?完全、彻底地完全、彻底地理解问题理解问题什么是模型?什么是模型?对事物的一种对事物的一种抽象抽象,由一组图示符号和组,由一组图示符号和组织这些符号的规则组成。目的:理解事物。织这些符号的规则组成。目的:理解事物。如下图:如下图:30面向对象建模面向对象建模31面向对象建模面向对象建模用面向对象方法开发软件,通常要建立三用面向对象方法开发软件,通常要建立三种形式的模型:种形式的模型:对象
19、模型对象模型:描述系统数据结构:描述系统数据结构 动态模型动态模型:描述系统控制结构:描述系统控制结构 功能模型功能模型:描述系统功能:描述系统功能324 对象模型对象模型对象模型表示系统的静态结构,描述了对对象模型表示系统的静态结构,描述了对象、对象间的关系。象、对象间的关系。建立对象模型用到的图形符号:建立对象模型用到的图形符号:(1)表示类的符号(包括属性和服务)表示类的符号(包括属性和服务)(2)表示类实例的符号)表示类实例的符号 (3)表示类间关系的符号)表示类间关系的符号334.1 4.1 表示表示类类&对象对象的图形符号的图形符号(p12)(p12)类类&对象:含义是对象:含义是
20、“一个类及属于该类的一个类及属于该类的对象对象”34例:计算圆的面积。例:计算圆的面积。表示表示类类&对象对象的图形符号的图形符号圆圆圆的半径圆的半径计算圆面积计算圆面积显示圆面积显示圆面积圆圆圆的半径圆的半径计算圆面积计算圆面积显示圆面积显示圆面积35类的命名规则类的命名规则 类名应富有描述性、简洁且无二义性,命名时类名应富有描述性、简洁且无二义性,命名时应该遵守以下几条准则:应该遵守以下几条准则:(1)使用标准术语使用标准术语 (2)使用具有确切含义的名词使用具有确切含义的名词 (3)必要时用名词短语作名字:如公司员工必要时用名词短语作名字:如公司员工表示表示类类&对象对象的图形符号的图形
21、符号364.2 表示类间关系的符号表示类间关系的符号类间、对象间的关系可以概括为类间、对象间的关系可以概括为泛化关泛化关系、组合关系系、组合关系及及关联关系关联关系三种关系三种关系 1.泛化关系:泛化关系:“是一种是一种”(ISA)“一般一般特殊特殊”关系,关系,反映了一个反映了一个类与若干个互不相容的子类之间的分类类与若干个互不相容的子类之间的分类关系关系。高层类(即基类或超类)说明一。高层类(即基类或超类)说明一般(公共)的属性,低层类(即派生类般(公共)的属性,低层类(即派生类或子类)说明特殊属性。或子类)说明特殊属性。37半圆形半圆形表明泛表明泛化关系化关系的方向:的方向:从半圆从半圆
22、弧中点弧中点引出的引出的直线指直线指到一般到一般化的类。化的类。表示归纳关系的图形符号表示归纳关系的图形符号38例:例:表示泛化关系的图形符号表示泛化关系的图形符号图形图形颜色颜色中心位置中心位置笔粗细笔粗细笔类型笔类型移动(移动(move)选择(选择(select)旋转(旋转(rotate)显示(显示(display)0维维1维维定位定位放大放大2维维定位定位填充类型填充类型放大填充放大填充点点显示显示线线终点终点显示显示弧弧半径半径开始角开始角弧角弧角显示显示多边形多边形边数边数顶点顶点显示显示圆圆直径直径显示显示旋转旋转392.组合关系组合关系 组合关系就是组合关系就是“整体整体部分部分
23、”关系,关系,它它反映了反映了对象之间对象之间的构成关系的构成关系。组合关。组合关系也称为聚集关系。系也称为聚集关系。在在C+语言中,通常是在一个类中包语言中,通常是在一个类中包含另一个类的对象成员来实现这种关系。含另一个类的对象成员来实现这种关系。类间关系类间关系40上部:整体对象上部:整体对象 下部:部分对象下部:部分对象 标值:该端对象的数量(省略为标值:该端对象的数量(省略为1 1)三角形:组合关系的方向(从三角形顶角引出的线指向三角形:组合关系的方向(从三角形顶角引出的线指向整体对象,从三角形底边中点画出的线连到部分对象)整体对象,从三角形底边中点画出的线连到部分对象)表示组合关系的
24、图形符号表示组合关系的图形符号41例:例:表示组合关系的图形符号表示组合关系的图形符号教材教材封面封面前言前言目录目录章章习题习题节节1,n423.关联关系关联关系 关联关系反映对象之间相互依赖、相关联关系反映对象之间相互依赖、相互作用的关系。通常把两类对象之间的互作用的关系。通常把两类对象之间的二元关系再细分为一对一(二元关系再细分为一对一(1:1)、一)、一对多(对多(1:M)和多对多()和多对多(M:N)等三)等三种基本类型种基本类型。类间关系类间关系43二元关联的二元关联的5 5个要素:个要素:连连线:线:连线端点所在的位置表明,这是连线端点所在的位置表明,这是对象(而不是类)之间的映
25、射关系。对象(而不是类)之间的映射关系。类间关系类间关系-关联关系关联关系教师教师书书1+44阶阶 参与关联的对象的个数。阶用标在连参与关联的对象的个数。阶用标在连线端点的单个数字或数值区间表示。例线端点的单个数字或数值区间表示。例如,如,“1+”“1+”(一个或多个),(一个或多个),“3“3,5”5”(3 3至至5 5)等)等 。表示类间关系的图形符号表示类间关系的图形符号45链属性链属性 链属性就是关联链的性质链属性就是关联链的性质。例如,计算机中。例如,计算机中每个用户对不同文件拥有不同的访问权限,访每个用户对不同文件拥有不同的访问权限,访问权限就是文件与用户之间的关联链的属性。问权限
26、就是文件与用户之间的关联链的属性。表示类间关系的图形符号表示类间关系的图形符号46限定限定 一个受限的关联由两个对象及一个限一个受限的关联由两个对象及一个限定词组成。定词组成。可以把限定词看作是一种特可以把限定词看作是一种特殊的链属性殊的链属性。表示类间关系的图形符号表示类间关系的图形符号47消息连接消息连接 反映了一个对象对另一个对象的处理反映了一个对象对另一个对象的处理依赖性。依赖性。表示类间关系的图形符号表示类间关系的图形符号48例例1:一家公司的对象模型。该公司有许多部:一家公司的对象模型。该公司有许多部门,每个部门由一名经理管理,也有的经理门,每个部门由一名经理管理,也有的经理不管理
27、任何部门,每个部门生产多种产品,不管理任何部门,每个部门生产多种产品,每种产品仅由一个部门生产。公司有许多员每种产品仅由一个部门生产。公司有许多员工为之工作,员工分为工人和经理,每名工工为之工作,员工分为工人和经理,每名工人可参加多个项目,每个项目需要多个工人人可参加多个项目,每个项目需要多个工人参与,每位经理可主持多个项目,每个项目参与,每位经理可主持多个项目,每个项目由一位经理主持。由一位经理主持。4.3 对象模型例子对象模型例子49对象模型例子对象模型例子505 面向对象分析面向对象分析(OOA)什么是面向对象分析?什么是面向对象分析?抽取和整理用户需求并抽取和整理用户需求并建立问题域精
28、确模建立问题域精确模型型的过程的过程。面向对象分析工作大体上按照下列顺序进面向对象分析工作大体上按照下列顺序进行:行:(1)寻找类寻找类&对象对象 (2)识别结构识别结构 (3)定义属性定义属性 (4)定义服务定义服务 51OOAOOA第一步:确定类第一步:确定类&对象对象1、找出候选找出候选的类的类&对象对象有两种方法:有两种方法:(1)找出问题域中的五类事物作为候选类)找出问题域中的五类事物作为候选类&对象对象可感知的物理实体,如书、汽车可感知的物理实体,如书、汽车人或组织的角色,如教师、雇员人或组织的角色,如教师、雇员应该记忆的事件,如演出、访问应该记忆的事件,如演出、访问两个或多个对象
29、的相互作用,通常具有交易或接触两个或多个对象的相互作用,通常具有交易或接触的性质,如购买,结婚的性质,如购买,结婚需要说明的概念,如政策需要说明的概念,如政策(2)将需求分析中的)将需求分析中的名词或名词短语名词或名词短语作为候选者作为候选者52例例1:各剧院的演出售票预订系统:各剧院的演出售票预订系统按第一种方法,得到候选的类按第一种方法,得到候选的类-&-对象为:对象为:剧院、演出、票、预订、系统剧院、演出、票、预订、系统例例2:按第二种方法,得到候选的类按第二种方法,得到候选的类-&-对象为:对象为:公司、部门、经理、产品、员工、工人、公司、部门、经理、产品、员工、工人、项目项目面向对象
30、分析面向对象分析532 2、筛选筛选出正确的类出正确的类&对象对象从候选的类从候选的类&对象中去掉不正确或不必要对象中去掉不正确或不必要的类的类&对象,主要遵循下列原则:对象,主要遵循下列原则:冗余冗余的:两个类名表示了相同的信息的:两个类名表示了相同的信息无关无关的:的:笼统笼统的(模糊的):用精确的代替的(模糊的):用精确的代替属性属性:去掉无关的属性:去掉无关的属性操作操作:动词定义的操作是否作为类?如拨号:动词定义的操作是否作为类?如拨号实现实现:分析阶段少或不考虑怎样实现目标系:分析阶段少或不考虑怎样实现目标系统统面向对象分析面向对象分析OOA54OOA第二步:确定关联第二步:确定关
31、联两个或多个对象之间的相互依赖、相互作两个或多个对象之间的相互依赖、相互作用的关系就是关联。用的关系就是关联。关联关系的确定关联关系的确定(1)抽取需求陈述中使用的描述性动词或)抽取需求陈述中使用的描述性动词或动词词组动词词组(2)找到隐含的关联关系)找到隐含的关联关系(3)补充一些必要的关联关系)补充一些必要的关联关系(4)去掉不正确或不必要的关联)去掉不正确或不必要的关联55例:例例:例2得到类间的关系为:得到类间的关系为:动词动词 相关类相关类 关系关系 有有 公司和部门间公司和部门间 组合组合/受限关联受限关联 管理管理 部门和经理部门和经理 0/1:1 生产生产 部门和产品部门和产品
32、 1:N 为之工作为之工作 公司和员工公司和员工 1:N 分为分为 员工和工人员工和工人 ISA(泛化)(泛化)员工和经理员工和经理 ISA(泛化)(泛化)参加参加 工人和项目工人和项目 N:N 主持主持 经理和项目经理和项目 1:N面向对象分析面向对象分析OOA56OOA第三步:确定属性第三步:确定属性属性是对象的特性属性是对象的特性属性的确定属性的确定 分析:需求陈述中的名词词组表示属性,分析:需求陈述中的名词词组表示属性,形容词作为确定属性的线索,如画一个红形容词作为确定属性的线索,如画一个红色的圆;色的圆;选择:删去不正确和不必要的属性选择:删去不正确和不必要的属性57OOA第四步:识
33、别继承关系第四步:识别继承关系一般说来,可以使用两种方式建立继承关系:一般说来,可以使用两种方式建立继承关系:(1)自底向上:抽象出现有类的共同性质泛)自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类化出父类,这个过程实质上模拟了人类归归纳纳思维过程。思维过程。(2)自顶向下:把现有类细化成更具体的子)自顶向下:把现有类细化成更具体的子类,这模似了人类的类,这模似了人类的演绎演绎思维过程。思维过程。如:头与眼、鼻、耳、嘴之间是组合关系如:头与眼、鼻、耳、嘴之间是组合关系 人、男人、男孩是继承关系人、男人、男孩是继承关系58OOA第五步:确定操作第五步:确定操作 对象对象=数
34、据数据+操作操作 在确定类中应该有的服务时,既要考虑在确定类中应该有的服务时,既要考虑该类实体的常规行为,又要考虑为完成本该类实体的常规行为,又要考虑为完成本系统功能所需要提供的操作。系统功能所需要提供的操作。596 面向对象设计面向对象设计(OOD)把分析阶段得到的需求转变成符合成本和把分析阶段得到的需求转变成符合成本和质量要求的、抽象的程序实现方案的过程。质量要求的、抽象的程序实现方案的过程。是一个逐渐扩充模型的过程。是一个逐渐扩充模型的过程。在实际的软件开发过程中分析和设计的界在实际的软件开发过程中分析和设计的界限是模糊的限是模糊的,许多分析结果可以直接映射成许多分析结果可以直接映射成设
35、计结果,而在设计过程中又往往会加深设计结果,而在设计过程中又往往会加深和补充对系统需求的理解,从而进一步完和补充对系统需求的理解,从而进一步完善分析结果。善分析结果。60面向对象设计面向对象设计(OOD)OODOOD主要完成下述工作:主要完成下述工作:1.1.建立类等级建立类等级 面向对象程序的一个突出优点来面向对象程序的一个突出优点来源于继承性。应该尽量抽取出相似类源于继承性。应该尽量抽取出相似类的的公共属性和公共服务,以建立这些公共属性和公共服务,以建立这些相似类的父类相似类的父类,并,并在类等级的适当层在类等级的适当层次中正确地定义各个属性和服务次中正确地定义各个属性和服务。61面向对象
36、设计面向对象设计(OOD)定义属性定义属性 所谓定义属性就是要确定每个属性的数所谓定义属性就是要确定每个属性的数据类型和数据结构,同时还要确定每个属性据类型和数据结构,同时还要确定每个属性的的访问权限访问权限(通常被定义在保护部分或私有通常被定义在保护部分或私有部分部分)。)。3 3定义操作定义操作 62面向对象的设计原则面向对象的设计原则模块化:对象就是模块。模块化:对象就是模块。抽象:类是一种抽象数据类型抽象:类是一种抽象数据类型信息隐藏:信息隐藏通过对象的封装性实现信息隐藏:信息隐藏通过对象的封装性实现弱耦合弱耦合强内聚强内聚可重用可重用63耦合:一个软件结构内不同模块之间互连耦合:一个
37、软件结构内不同模块之间互连的紧密程度。的紧密程度。弱耦合是优秀设计的一个重要标准。弱耦合是优秀设计的一个重要标准。在面向对象方法中,对象是最基本的模块,在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联因此,耦合主要指不同对象之间相互关联的紧密程度。的紧密程度。对象之间的耦合可分为两大类对象之间的耦合可分为两大类:交互耦合、:交互耦合、继承耦合。继承耦合。面向对象的设计原则面向对象的设计原则-弱耦合弱耦合64交互耦合交互耦合即对象之间的耦合通过消息连接来实现,即对象之间的耦合通过消息连接来实现,交互耦合应尽量松散。遵循的原则:交互耦合应尽量松散。遵循的原则:(1)尽量降
38、低消息连接的复杂程度(参数)尽量降低消息连接的复杂程度(参数个数和参数的复杂度)个数和参数的复杂度)(2)减少对象发送或接收的消息数)减少对象发送或接收的消息数继承耦合继承耦合是一般化类与特殊类之间耦合的一种形式。是一般化类与特殊类之间耦合的一种形式。越紧密越好。越紧密越好。面向对象的设计原则面向对象的设计原则-弱耦合弱耦合65面向对象的设计原则面向对象的设计原则-强内聚强内聚内聚衡量一个模块内各个元素彼此结合内聚衡量一个模块内各个元素彼此结合的紧密程度。的紧密程度。在设计时应该力求做到高内聚。在设计时应该力求做到高内聚。在面向对象设计中存在下述在面向对象设计中存在下述3种内聚种内聚:(1)服
39、务内聚)服务内聚(2)类内聚)类内聚(3)一般)一般特殊内聚特殊内聚66面向对象的设计原则面向对象的设计原则-可重用可重用软件重用是提高软件开发生产率和目标系软件重用是提高软件开发生产率和目标系统质量的重要途径。统质量的重要途径。重用有两方面的含义:重用有两方面的含义:(1)一是)一是尽量使用已有的类尽量使用已有的类(包括开发环(包括开发环境提供的类库,及以往开发类似系统时创境提供的类库,及以往开发类似系统时创建的类)建的类)(2)二是如果确实需要创建新类,则在设)二是如果确实需要创建新类,则在设计这些新类的协议时,应该计这些新类的协议时,应该考虑将来的可考虑将来的可重复使用性重复使用性。67
40、7 面向对象实现面向对象实现面向对象实现主要包括下述两项工作:面向对象实现主要包括下述两项工作:1.把面向对象设计的结果翻译成用某种面把面向对象设计的结果翻译成用某种面 向向对象程序语言书写的面向对象程序。对象程序语言书写的面向对象程序。2.测试和调试编写出的面向对象程序。测试和调试编写出的面向对象程序。面向对象的语言:面向对象的语言:C+、Java等等注:程序的质量主要由设计的质量决定,但注:程序的质量主要由设计的质量决定,但是所选用的程序语言的特点对程序质量也是所选用的程序语言的特点对程序质量也有重要影响。(应该将大量的时间花在系有重要影响。(应该将大量的时间花在系统分析与设计上)统分析与
41、设计上)68本章小结本章小结 本章分析了面向过程的程序设计和面本章分析了面向过程的程序设计和面向对象的程序设计的不同,强调了面向对向对象的程序设计的不同,强调了面向对象程序设计的特点和优点,面向对象的一象程序设计的特点和优点,面向对象的一些基本概念和简单的分析和设计。些基本概念和简单的分析和设计。69思思 考考思考题:思考题:试比较面向过程的程序设计方法和面向对试比较面向过程的程序设计方法和面向对象程序设计方法的不同。象程序设计方法的不同。为什么说面向对象方法更接近人类习惯的为什么说面向对象方法更接近人类习惯的思维方法?思维方法?类与函数的不同点?封装和继承的含义。类与函数的不同点?封装和继承的含义。70