第一章 面向对象编程
DESCRIPTION
面向对象技术与 C ++. 第一章 面向对象编程. 什么是对象技术. 基于对象概念的软件开发方法 对象包含有数据及处理数据的功能函数 在分析、设计和实现的整个过程中只使用一个概念对象的开发方法 能够解决软件危机中大多数问题的方法. 对象 = 数据 + 功能. 对象技术的优势. 稳定 : 数据和功能都打包在一起,从而改善软件的再重用性. 软件重用 能提高质量,减少由于编制新的系统代码而产生的成本. Spread sheet. Word Processor. Text Editor. Macro Editor. Math Utilities. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/1.jpg)
第一章 面向对象编程
面向对象技术与 C++
![Page 2: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/2.jpg)
基于对象概念的软件开发方法 对象包含有数据及处理数据的功能函数 在分析、设计和实现的整个过程中只使用一个概念对象的开发方法 能够解决软件危机中大多数问题的方法
对象 = 数据 + 功能
什么是对象技术
![Page 3: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/3.jpg)
FileMgr
MacroEditor
MathUtilitie
s
TextEditor Print
UtilitiesFormatEditor
MenusString
Utilities
Spread sheet Word Processor
Reusable-Component Repository
对象技术的优势 稳定 : 数据和功能都打包在一起,从而改善软件的再重用性
软件重用能提高质量,减少由于编制新的系统代码而产生的成本
![Page 4: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/4.jpg)
现实世界
Laser Printer External Drive
Computer
对象图
对象技术的优势 面向对象的模型更加贴切地反映了现实世界 更加准确地描述公共数据和过程 易于理解,尤其对于使用者
![Page 5: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/5.jpg)
对象技术的优势 面向对象的方法支持大规模开发 可以严格定义各个组件之间的交互
减少内部的依赖关系 减少集成的问题 支持并行开发
![Page 6: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/6.jpg)
对象技术的优势
Existing Software Reengineered Software
对系统的一部分进行再工程,保护前期软件应用的投资
![Page 7: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/7.jpg)
1.1 程序设计的不同编程风格
程序的目的:用于数学计算主要工作:设计求解问题的过程
程序由模块构成。 传统的程序设计方法其程序设计工作主要围绕设计解题过程来进行,把程序看作是工作在数据上的一系列过程(函数 )的集合。程序的定律是:
程序 =算法 +数据结构 这种方法称为面向过程的程序设计,语言称为过程性语言。
C 是面向过程的语言。
一、面向过程的结构化编程风格
![Page 8: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/8.jpg)
设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。
程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。
其模块化实现的具体方法是使用子程序。
![Page 9: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/9.jpg)
例:制造汽车的任务
Main()
Buildc(…) Builde(…)Buildd(…)Assemble(…) inspect(…)
![Page 10: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/10.jpg)
缺点:可重用性差、数据安全性差、难以开发图形界面的应用
把数据和处理数据的过程分离为相互独立的实体。 当数据结构改变时,所有相关的处理过程都要进行相应的修改。
每一种相对于老问题的新方法都要带来额外的开销。 图形用户界面的应用,很难用过程来描述和实现,开发和维护都很困难。
优点:有效地将一个较复杂的程序系统设计任务分解成许多
易于控制和处理的子任务,便于开发和维护。直观、有条理。
![Page 11: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/11.jpg)
二、面向对象 (OOP) 的编程风格
面向对象方法把程序看作是互相协作而又彼此独立的对象的集合。对象间通过发送消息而相互作用。
程序的定律是: 对象 =(算法 +数据结构)
程序 =(对象 +对象 +……)
面向对象的方法学可以用下列方程式概括: OO=Objects+Classes+Inheritance+Communication With messages
方法学是指一组启发式过程,以减少程序设计问题的复杂性。
面向对象方法具有下述 4个要点:
![Page 12: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/12.jpg)
面向对象的软件系统是由对象( Object )组成的;
把所有对象都划分成各种对象类(简称为类, Class ), 每个对象类都定义了一组数据和方法;
按照子类(派生类)与父类(基类)的关系,把若干个对象类组成一个层次结构的系统,这种现象称为继承( In
heritance );
对象彼此之间仅能通过传递消息( message )互相联系。
![Page 13: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/13.jpg)
面向对象 对象技术围绕对象的概念来建立 一个对象包含了数据和使用这些数据的所有功能 对象之间通过消息通信
一个对象通过向另一个对象发送消息激活某一 个功能
![Page 14: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/14.jpg)
一个对象代表了一个现实的或虚构的实体
自然实体
概念实体
软件实体
化学过程
什么是对象
连接显示
![Page 15: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/15.jpg)
•在概念级上,对象是正被建模的系统中的实际的实体;
•从物理实现形式上,对象是封装了数据结构及可以是
在这些数据结构上的操作(方法)的封装体,这个封装
体有可以唯一地标识它的名字,而且向外界提供一组服
务(即公有操作)。
对象 =特性(属性) + 行为
![Page 16: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/16.jpg)
对象 类 Simula-67是第一个 OOP语言。
目的:解决模拟问题
例:银行出纳业务包括部门、顾客、业务、货币的单位等大量的“对象”。
由此提出“类”:在程序执行期间除了状态之外其他方面都一样的对象归在一起,构成对象的“类”。
![Page 17: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/17.jpg)
什么是类( Class)是 OOP中构成模块的基本单元
类是一组具有相同结构和行为的对象的集合 共同的结构通过属性表现出来 (i.e. 数据 ) 共同的行为通过操作表现出来 (i.e. 功能 )
班机 747
结构班机号日期
分配的班机起点终点状态
行为装载设备起飞延迟取消终止
![Page 18: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/18.jpg)
类的示例Class
Employee
Structur
e
Name
Address
Position
Salary
Start
Date
End
Date
Behavior
Hire
Fire
Promote
Increase
Salary
Retire
![Page 19: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/19.jpg)
类是生成对象的模板 类的定义中包含有产生和删除对象的操作,属性显示在操作上方,操作的名字后跟有 ()
一个类定义了使用哪种数据表示法来描述属性 每一个实例都采用有属性值的数据表示法
一个类通过一系列操作来定义行为 这种操作能在每个实例中激活
类是生成对象的模板
班机
Flight 187
Flight 121
Flight 747
![Page 20: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/20.jpg)
类和对象的关系
每一个对象都是某一个类的实例 每一个类在某一时刻都有零个或更多的实例 类是静态的 ; 它们的存在、语义和关系在程
序执行前就已经定义好了 对象是动态的 ; 它们在程序执行时可以被
建和删除
![Page 21: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/21.jpg)
variables
methods
程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。
类是可以实例化的抽象数据类型。
类定义的变量就是属于类的对象,即对象是类的实例化。
Varible(field), procerdure(method,constructor)
![Page 22: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/22.jpg)
消息 (message) :消息是向对象发出的服务请求
目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。
在语法上,一条消息应包括消息名、入口参数和返回参数;
在语义上,一条消息应包括发送者、接收者和其它需传送的信息。
但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序系统
例: Circle MyCircle;
MyCircle . Show ( GREEN );
//实例 MyCircle以绿色显示自己。
![Page 23: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/23.jpg)
优点: 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。
通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。
设计思路 以类的设计为基础,通过类的设计来完成对实体的建模。
![Page 24: 第一章 面向对象编程](https://reader033.vdocuments.mx/reader033/viewer/2022061408/56812c0e550346895d907d43/html5/thumbnails/24.jpg)
关系的重要性 所有的系统都包含了大量的类和对象 对象通过与其它对象的协作完成系统的功能行为 协作通过关系来实现 几种重要的关系类型 :
has a is a belongs to