面向对象的基本概念
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多态性机制不仅增加了面向对象软件系统的灵 活性,进一步减少了数据冗余,而且显著提高了软 件的可重用性和可扩充性。
9、重载(OverLoading) 1)函数重载:是指同一作用域内若干个参数 特征不同的函数可以使用相同的函数名字; 2)运算符重载:是指同一个运算符可以施加 于不同类型的操作数上面。
在C++语言中,函数重载是通过静态联编实 现的,编译时根据函数变元的个数和类型,决定到 底使用函数的哪个实现代码;运算符重载也是编译 时根据操作数的类型,决定使用该运算符的哪种语 义。
2)把所有对象都划分成各种对象类(类 CLASS),每个对象类都定义了一组数据和一组方法。 3)按照子类(派生类)和父类(基类)的继承 关系,把若干个对象类组成一个层次结构的系统(类 等级)。 4)对象彼此之间仅能通过传递消息互相联系。 OO=Objects+Classes+Inheritance+Communication with message 面向对象=对象+类+继承+传递消息 如果仅使用对象和消息的方法 ------称为基于对象的方法; 如果进一步要求把所有端详划分为类 ------称为基于类的方法; 只有同时使用对象,类,继承,消息的方法 ------真正面向对象的方法。
第4章
面向对象的基本概念
第一节
面向对象技术的基本概念
一、传统方法学的缺点
存在的问题:1、生产率提高的幅度远不能满足需要 2、软件重用程度很低 3、软件仍然很难维护 4、软件往往不能真正满足用户需要 出现问题的原因:(最根本的原因有两个) 1、僵化的瀑布模型 1)某些类型的系统需求是模糊的 2)项目参与者之间存在通讯鸿沟 3)预先定义的需求可能是过时的 2、结构化技术的缺点 1)系统结构不稳定; 2)系统较难修改和扩充; 3)软件的可重用性较差。
7、继承(Inheritance)
广义地说,继承是指能够直接获得已有的性质 和特征,而不必重复定义它们。在面向对象的软件技 术中,继承是子类自动地共享基类中定义的数据和方 法的机制。
图4.3 实现继承机制的原理
父类
类A A的操作
A的实例a1 类A
A的变量
类B:A的子类 . 从A继承特性 B的操作
2 面向对象方法学的主要优点
1)与人类习惯的思维方式一致 传统的程序设计技术是面向过程的设计方法, 以算法为核心,把数据和过程作为相互独立的部分, 数据代表问题空间中的客体,程序代码则用于处理 这些数据。 把数据和代码作为分离的实体,是计算机的 特点。但总存在“使用错误的数据调用正确的程序 模块,或使用正确的数据调用了错误的程序模块” 的危险。 传统的程序设计技术忽略了数据和操作之间 的内在联系,设计的软件系统其解空间和问题空间 并不一致,难于理解。
3、对象的特点 1)以数据为中心
Байду номын сангаас
2)对象是主动的
3)实现了数据封装 4)本质上具有并行性 5)模块独立性好
(二)
其他概念
1、类(Class)
类是对具有相同数据和相同操作的一组相似 对象的定义,类是对具有相同属性和行为的一个或 多个对象的描述(抽象)。
例如:在屏幕上不同位置用不同颜色不同半 径画三个圆,是三个不同的对象,但他们有相同的 数据(圆心坐标,半径,颜色)和相同的操作(显 示自己,放大缩小半径,在屏幕上移动位置等), 因此它们是同一类事物,可用“Circle类”来定义。
二、软件工程的新途径
1、区分两类不同的软件系统 一类系统的需求比较稳定,而且能够预先指定, 称为预先指定的系统;如:计算机控制系统,卫 星图象处理系统,空中交通管理系统,火箭发射 跟踪控制系统;操作系统,编译系统,数据库管 理系统等; 一类系统的需求是模糊的或随时间变化的,通 常在系统安装运行之后,还会由用户驱动对需求 进行动态修改,称为用户驱动系统;如:商业或 行政数据处理系统,决策支持系统等。
第二节
面向对象的基本概念
1、面向对象方法简介 出发点和基本原则:尽可能模拟人类习惯的思 维方式,使开发软件的方法和过程尽可能接近人类认 识世界解决问题的方法和过程。即使描述问题的问题 空间(问题域)与实现解法的解空间(求解域)在结 构上尽可能一致。 概括的说,面向对象方法有下述4个要点: 1)认为客观世界是由各种对象组成的,任何事 物都是对象,复杂的对象可以由比较简单的对象以某 种方式组合而成。
A的实例变量
B的实例b1 类B
父类 的实 例
继承来的A的实例变量
子类
B的变量
B的实例变量
子类的实例 继承具有传递性,如果类C继承类B,类 B继承类A,则类C继承类A。
8、多态性(Polymorphism)
来自于希腊语,意思是“有许多特性”。
多态性是指子类对象可以象父类对象那样使用, 同样的消息可以发送给父类对象也可以发送给子类 对象。在类的不同层次中可以共享(公用)一个行 为(方法)的名字,然而不同层次中的每个类却各 自按自己的需要来实现这个行为。
对象:李伟 状态:李伟 25 计算机 讲师 1000 数 据 值 执行 的操 作
操作:调工资 评职称 受聘 方法:调工资 (计算公式) 评职称 (步骤,条件)
行为:调工资 抽象 评职称 受聘 方法名(参数) 方 法 体
人事处向对象发消息
李伟.调工资(…)
对象、类和消息传递
6、封装(Encapsulation) 面向对象的程序中把数据和实现操作的代码集 中起来放在对象内部。 使用一个对象的时候,只需知道它向外界提供 的接口形式,而无需知道它的数据结构细节和实现操 作的算法。 具有封装性的条件: (1)有一个清晰的边界; (2)有明确的接口; (3)受保护的内部实现。
4、方法(Method)
方法就是对象所能执行的操作,也就是类中 定义的服务。方法描述了对象执行操作的算法,响 应消息的方法。(在C++中,把方法称为成员函数) 例如:为了Circle类的对象能够响应让它在 屏幕上显示自己的消息Show(Green),在Circle类 必须给出成员函数Show(int color)的定义,(也 就是要给出这个成员函数的实现代码)。
1、对象的形象表示 一个对象如同一台录音机,当在软件中使用一 个对象的时候,只能通过对象与外界的界面来操作 它。实现对象操作的代码和数据是隐藏在对象内部 的,一个对象好象是一个黑盒子。 使用对象时只需知道它向外界提供的接口形式 而无须知道内部的具体算法,不仅使对象变得非常 简单、方便,而且具有很高的安全性和可靠性。
二、基本概念
(一) 对象
在应用领域中有意义的、与所要解决的问题 有关系的任何事物都可以作为对象,可以是具体的 物理实体的抽象,也可是人为的概念,或是任何有 明确边界和意义的东西。如:一名职工,一家公司, 一个窗口,一座图书馆,一本图书,贷款和借款等。
面向对象方法学中的对象是由描述该对象属 性的数据以及可以对这些数据施加的所有操作封装 在一起构成的统一体。对象可以做的操作表示对象 的动态行为,OOD中称为对象的服务或方法。
5、属性(Attribute) 属性,就是类中所定义的数据,它是对客观世 界中的实体所具有的性质的抽象。类的每个实例都有 自己特有的属性值。 例如:Circle类中定义的代表圆心坐标、半径、 颜色等的数据成员,就是圆的属性。
抽象
类:教师 属性:姓名 年龄 单位 职称 工资 数 据 结 构
实例 抽象 实例
面向对象的软件技术以对象为核心,软件系统 由对象组成。对象是对现实世界实体的正确抽象, 它由描述内部状态表示静态属性的数据,以及可以 对这些数据施加的操作(对象的动态行为),封装 在一起所构成的统一体。
面向对象的软件技术的基本原理,使用现实世 界的概念抽象地思考问题从而自然地解决问题。强 调模拟现实世界中的概念而不强调算法,鼓励开发 者在软件开发的绝大部分过程中都用应用领域的概 念去思考。
2、快速原型法简介 快速原型法的核心是:用交互的快速建立起来 的原型取代了形式的、僵化的大部头的规格说明, 用户通过在计算机上运行和试用原形系统而向开发 者提供真实的反馈意见。
原型法的基本思想是:首先建立一个用户主要 需求的原型系统,让用户在计算机上运行、试用这 个原型系统,通过实践、了解未来的系统概貌…最 终建立起完全符合用户需要的新系统。瀑布模型: 用户和分析员反复讨论,“纸上谈兵”; 原型系统:用户在计算机上运行、试用, “真枪实弹”;“试用----反馈----修改”的多次反 复。
4)较易开发大型软件产品 开发大型软件系统时,开发人员的组织方法不 当是出现问题的主要原因。面向对象范型开发软件 时,可以把一个大型软件产品看作一系列本质上相 互独立的小产品来处理。一方面降低了技术难度, 另一方面改善了管理工作。 5)可维护性好; 面向对象的软件稳定性好 面向对象的软件比较容易修改 面向对象的软件比较容易理解 面向对象的软件易于测试和调试
2、实例(Instance) 实例就是由某个特定的类所描述的一个具体 的对象。 类在现实世界中并不能真正存在。如:在地 球上并没有抽象的“中国人”,只有一个个具体 的中国人(张三、李四)。同样也没有抽象的 “圆”,只有一个个具体的圆(圆心在(100,200) 半径为50的红色显示的圆,圆心在(200,300) 半径为30的兰色显示的圆)。 实际上,类是建立对象的“样板”,按照这 个样板所建立的一个具体的对象,就是类的实际 例子,通常称为实例。
传统的软件开发过程可以用“瀑布”模型来描 述,强调“自顶向下”按部就班地完成软件开发工作。
面向对象方法学的出发点和基本原则就是分析、 设计、实现一个软件系统的方法和过程,尽可能接近 人们认识世界解决问题的方法和过程。也就是使描述 问题的问题空间和描述解法的解空间在结构上尽可能 一致。
2)稳定性好; 传统的程序设计技术以算法为核心,开发过程基 于功能分析和功能分解。 面向对象的软件技术以对象为核心,基于构造问 题领域的对象模型。当系统的功能需求变化时并不会 引起软件结构的整体变化,仅需要做一些局部修改。 3)可重用性好; 用已有零部件装配新的产品是典型的重用技术。 传统方法学中内聚性好的模块独立性高,但数据 和程序彼此独立,实际上重用性差。 面向对象的软件技术中的对象具有很强的自含 性,对象所固有的封装性和信息隐藏机理,使得对象 的内部实现和外界隔离,具有较强的独立性。
操作1 界 面 操作2 操作3
状态 S
操作1、2、3的实现 图4.1对象的形象表示
2、对象的定义 定义1 (从面向对象程序设计角度看待对象) 对象是具有相同状态的一组操作的集合。 定义2:(从信息模拟角度看待对象) 对象是对问题域中某个东西的抽象,这种抽象 反映了系统保存有关这个东西的信息或与它交互的能 力。(对象是对属性值和操作的封装)。 定义3: (形式化的定义) 对象::=<ID,MS,DS,MI> ID--对象的标识或名字 MS--对象中的操作集合 DS--对象的数据结构MI--对象受理的消息名集 合(对外接口)
3、消息(Message) 消息,就是要求某个对象执行在定义它的那个 类中所定义的某个操作的规格说明。 通常一个消息由下述三部分组成: 接受消息的对象; 消息选择符(消息名); 零个或多个变元; 例如:MyCircle是一个半径4,圆心位于(100, 200)的Circle类的对象,也就是Circle类的一个实例。 当要求它以绿色显示时,在C++中应发出以下 消息:MyCircle.Show(Green); 其中:MyCircle是接受消息的对象的名字; Show是消息选择符(消息名); Green是消息的变元; 当MyCircle接受到这个消息后,将执行在Circle 类中定义的Show操作。
3、用原型法开发软件的过程 1)抛弃原型法 目的:评价目标系统的某个特性,以便更准确 的确定需求,更严格的验证设计方案。使用完后将 原型系统抛弃掉,然后重建正式的目标系统。 2)演化原型法
基本做法:经过初步调研和分析获知用户的基 本需求之后,就利用适当的软件工具快速的实现一 个原型系统 ,作为沟通各方的基础和用户实践的场 所,开发人员根据用户试用后的意见,对原型进行 修改和扩充,然后再次交给用户试用,并根据试用 后提出的意见,再次对原型进行修改和扩充,经过 多次迭代直到用户感到完全满意为止。
9、重载(OverLoading) 1)函数重载:是指同一作用域内若干个参数 特征不同的函数可以使用相同的函数名字; 2)运算符重载:是指同一个运算符可以施加 于不同类型的操作数上面。
在C++语言中,函数重载是通过静态联编实 现的,编译时根据函数变元的个数和类型,决定到 底使用函数的哪个实现代码;运算符重载也是编译 时根据操作数的类型,决定使用该运算符的哪种语 义。
2)把所有对象都划分成各种对象类(类 CLASS),每个对象类都定义了一组数据和一组方法。 3)按照子类(派生类)和父类(基类)的继承 关系,把若干个对象类组成一个层次结构的系统(类 等级)。 4)对象彼此之间仅能通过传递消息互相联系。 OO=Objects+Classes+Inheritance+Communication with message 面向对象=对象+类+继承+传递消息 如果仅使用对象和消息的方法 ------称为基于对象的方法; 如果进一步要求把所有端详划分为类 ------称为基于类的方法; 只有同时使用对象,类,继承,消息的方法 ------真正面向对象的方法。
第4章
面向对象的基本概念
第一节
面向对象技术的基本概念
一、传统方法学的缺点
存在的问题:1、生产率提高的幅度远不能满足需要 2、软件重用程度很低 3、软件仍然很难维护 4、软件往往不能真正满足用户需要 出现问题的原因:(最根本的原因有两个) 1、僵化的瀑布模型 1)某些类型的系统需求是模糊的 2)项目参与者之间存在通讯鸿沟 3)预先定义的需求可能是过时的 2、结构化技术的缺点 1)系统结构不稳定; 2)系统较难修改和扩充; 3)软件的可重用性较差。
7、继承(Inheritance)
广义地说,继承是指能够直接获得已有的性质 和特征,而不必重复定义它们。在面向对象的软件技 术中,继承是子类自动地共享基类中定义的数据和方 法的机制。
图4.3 实现继承机制的原理
父类
类A A的操作
A的实例a1 类A
A的变量
类B:A的子类 . 从A继承特性 B的操作
2 面向对象方法学的主要优点
1)与人类习惯的思维方式一致 传统的程序设计技术是面向过程的设计方法, 以算法为核心,把数据和过程作为相互独立的部分, 数据代表问题空间中的客体,程序代码则用于处理 这些数据。 把数据和代码作为分离的实体,是计算机的 特点。但总存在“使用错误的数据调用正确的程序 模块,或使用正确的数据调用了错误的程序模块” 的危险。 传统的程序设计技术忽略了数据和操作之间 的内在联系,设计的软件系统其解空间和问题空间 并不一致,难于理解。
3、对象的特点 1)以数据为中心
Байду номын сангаас
2)对象是主动的
3)实现了数据封装 4)本质上具有并行性 5)模块独立性好
(二)
其他概念
1、类(Class)
类是对具有相同数据和相同操作的一组相似 对象的定义,类是对具有相同属性和行为的一个或 多个对象的描述(抽象)。
例如:在屏幕上不同位置用不同颜色不同半 径画三个圆,是三个不同的对象,但他们有相同的 数据(圆心坐标,半径,颜色)和相同的操作(显 示自己,放大缩小半径,在屏幕上移动位置等), 因此它们是同一类事物,可用“Circle类”来定义。
二、软件工程的新途径
1、区分两类不同的软件系统 一类系统的需求比较稳定,而且能够预先指定, 称为预先指定的系统;如:计算机控制系统,卫 星图象处理系统,空中交通管理系统,火箭发射 跟踪控制系统;操作系统,编译系统,数据库管 理系统等; 一类系统的需求是模糊的或随时间变化的,通 常在系统安装运行之后,还会由用户驱动对需求 进行动态修改,称为用户驱动系统;如:商业或 行政数据处理系统,决策支持系统等。
第二节
面向对象的基本概念
1、面向对象方法简介 出发点和基本原则:尽可能模拟人类习惯的思 维方式,使开发软件的方法和过程尽可能接近人类认 识世界解决问题的方法和过程。即使描述问题的问题 空间(问题域)与实现解法的解空间(求解域)在结 构上尽可能一致。 概括的说,面向对象方法有下述4个要点: 1)认为客观世界是由各种对象组成的,任何事 物都是对象,复杂的对象可以由比较简单的对象以某 种方式组合而成。
A的实例变量
B的实例b1 类B
父类 的实 例
继承来的A的实例变量
子类
B的变量
B的实例变量
子类的实例 继承具有传递性,如果类C继承类B,类 B继承类A,则类C继承类A。
8、多态性(Polymorphism)
来自于希腊语,意思是“有许多特性”。
多态性是指子类对象可以象父类对象那样使用, 同样的消息可以发送给父类对象也可以发送给子类 对象。在类的不同层次中可以共享(公用)一个行 为(方法)的名字,然而不同层次中的每个类却各 自按自己的需要来实现这个行为。
对象:李伟 状态:李伟 25 计算机 讲师 1000 数 据 值 执行 的操 作
操作:调工资 评职称 受聘 方法:调工资 (计算公式) 评职称 (步骤,条件)
行为:调工资 抽象 评职称 受聘 方法名(参数) 方 法 体
人事处向对象发消息
李伟.调工资(…)
对象、类和消息传递
6、封装(Encapsulation) 面向对象的程序中把数据和实现操作的代码集 中起来放在对象内部。 使用一个对象的时候,只需知道它向外界提供 的接口形式,而无需知道它的数据结构细节和实现操 作的算法。 具有封装性的条件: (1)有一个清晰的边界; (2)有明确的接口; (3)受保护的内部实现。
4、方法(Method)
方法就是对象所能执行的操作,也就是类中 定义的服务。方法描述了对象执行操作的算法,响 应消息的方法。(在C++中,把方法称为成员函数) 例如:为了Circle类的对象能够响应让它在 屏幕上显示自己的消息Show(Green),在Circle类 必须给出成员函数Show(int color)的定义,(也 就是要给出这个成员函数的实现代码)。
1、对象的形象表示 一个对象如同一台录音机,当在软件中使用一 个对象的时候,只能通过对象与外界的界面来操作 它。实现对象操作的代码和数据是隐藏在对象内部 的,一个对象好象是一个黑盒子。 使用对象时只需知道它向外界提供的接口形式 而无须知道内部的具体算法,不仅使对象变得非常 简单、方便,而且具有很高的安全性和可靠性。
二、基本概念
(一) 对象
在应用领域中有意义的、与所要解决的问题 有关系的任何事物都可以作为对象,可以是具体的 物理实体的抽象,也可是人为的概念,或是任何有 明确边界和意义的东西。如:一名职工,一家公司, 一个窗口,一座图书馆,一本图书,贷款和借款等。
面向对象方法学中的对象是由描述该对象属 性的数据以及可以对这些数据施加的所有操作封装 在一起构成的统一体。对象可以做的操作表示对象 的动态行为,OOD中称为对象的服务或方法。
5、属性(Attribute) 属性,就是类中所定义的数据,它是对客观世 界中的实体所具有的性质的抽象。类的每个实例都有 自己特有的属性值。 例如:Circle类中定义的代表圆心坐标、半径、 颜色等的数据成员,就是圆的属性。
抽象
类:教师 属性:姓名 年龄 单位 职称 工资 数 据 结 构
实例 抽象 实例
面向对象的软件技术以对象为核心,软件系统 由对象组成。对象是对现实世界实体的正确抽象, 它由描述内部状态表示静态属性的数据,以及可以 对这些数据施加的操作(对象的动态行为),封装 在一起所构成的统一体。
面向对象的软件技术的基本原理,使用现实世 界的概念抽象地思考问题从而自然地解决问题。强 调模拟现实世界中的概念而不强调算法,鼓励开发 者在软件开发的绝大部分过程中都用应用领域的概 念去思考。
2、快速原型法简介 快速原型法的核心是:用交互的快速建立起来 的原型取代了形式的、僵化的大部头的规格说明, 用户通过在计算机上运行和试用原形系统而向开发 者提供真实的反馈意见。
原型法的基本思想是:首先建立一个用户主要 需求的原型系统,让用户在计算机上运行、试用这 个原型系统,通过实践、了解未来的系统概貌…最 终建立起完全符合用户需要的新系统。瀑布模型: 用户和分析员反复讨论,“纸上谈兵”; 原型系统:用户在计算机上运行、试用, “真枪实弹”;“试用----反馈----修改”的多次反 复。
4)较易开发大型软件产品 开发大型软件系统时,开发人员的组织方法不 当是出现问题的主要原因。面向对象范型开发软件 时,可以把一个大型软件产品看作一系列本质上相 互独立的小产品来处理。一方面降低了技术难度, 另一方面改善了管理工作。 5)可维护性好; 面向对象的软件稳定性好 面向对象的软件比较容易修改 面向对象的软件比较容易理解 面向对象的软件易于测试和调试
2、实例(Instance) 实例就是由某个特定的类所描述的一个具体 的对象。 类在现实世界中并不能真正存在。如:在地 球上并没有抽象的“中国人”,只有一个个具体 的中国人(张三、李四)。同样也没有抽象的 “圆”,只有一个个具体的圆(圆心在(100,200) 半径为50的红色显示的圆,圆心在(200,300) 半径为30的兰色显示的圆)。 实际上,类是建立对象的“样板”,按照这 个样板所建立的一个具体的对象,就是类的实际 例子,通常称为实例。
传统的软件开发过程可以用“瀑布”模型来描 述,强调“自顶向下”按部就班地完成软件开发工作。
面向对象方法学的出发点和基本原则就是分析、 设计、实现一个软件系统的方法和过程,尽可能接近 人们认识世界解决问题的方法和过程。也就是使描述 问题的问题空间和描述解法的解空间在结构上尽可能 一致。
2)稳定性好; 传统的程序设计技术以算法为核心,开发过程基 于功能分析和功能分解。 面向对象的软件技术以对象为核心,基于构造问 题领域的对象模型。当系统的功能需求变化时并不会 引起软件结构的整体变化,仅需要做一些局部修改。 3)可重用性好; 用已有零部件装配新的产品是典型的重用技术。 传统方法学中内聚性好的模块独立性高,但数据 和程序彼此独立,实际上重用性差。 面向对象的软件技术中的对象具有很强的自含 性,对象所固有的封装性和信息隐藏机理,使得对象 的内部实现和外界隔离,具有较强的独立性。
操作1 界 面 操作2 操作3
状态 S
操作1、2、3的实现 图4.1对象的形象表示
2、对象的定义 定义1 (从面向对象程序设计角度看待对象) 对象是具有相同状态的一组操作的集合。 定义2:(从信息模拟角度看待对象) 对象是对问题域中某个东西的抽象,这种抽象 反映了系统保存有关这个东西的信息或与它交互的能 力。(对象是对属性值和操作的封装)。 定义3: (形式化的定义) 对象::=<ID,MS,DS,MI> ID--对象的标识或名字 MS--对象中的操作集合 DS--对象的数据结构MI--对象受理的消息名集 合(对外接口)
3、消息(Message) 消息,就是要求某个对象执行在定义它的那个 类中所定义的某个操作的规格说明。 通常一个消息由下述三部分组成: 接受消息的对象; 消息选择符(消息名); 零个或多个变元; 例如:MyCircle是一个半径4,圆心位于(100, 200)的Circle类的对象,也就是Circle类的一个实例。 当要求它以绿色显示时,在C++中应发出以下 消息:MyCircle.Show(Green); 其中:MyCircle是接受消息的对象的名字; Show是消息选择符(消息名); Green是消息的变元; 当MyCircle接受到这个消息后,将执行在Circle 类中定义的Show操作。
3、用原型法开发软件的过程 1)抛弃原型法 目的:评价目标系统的某个特性,以便更准确 的确定需求,更严格的验证设计方案。使用完后将 原型系统抛弃掉,然后重建正式的目标系统。 2)演化原型法
基本做法:经过初步调研和分析获知用户的基 本需求之后,就利用适当的软件工具快速的实现一 个原型系统 ,作为沟通各方的基础和用户实践的场 所,开发人员根据用户试用后的意见,对原型进行 修改和扩充,然后再次交给用户试用,并根据试用 后提出的意见,再次对原型进行修改和扩充,经过 多次迭代直到用户感到完全满意为止。