第1章面向对象程序设计概论
面向对象程序设计

1.1 面向对象程序设计概述
•在程序的实施过程中,由于大型系统必须由 多人合作完成,各人或各小组完成程序中的 一个或几个模块,如何划分任务、估计和分 配资源、掌握每个程序员的进度等就构成了 进行大型系统设计时管理的复杂性,另外, 即使每个人或小组所设计的模块都无可挑剔, 但将这些模块整合在一起时未必不会出现问 题,因此如何权衡模块内聚度和模块间的耦 合度,也是编程人员必须面对的问题之一。
1.1 面向对象程序设计概述
简单的说,通过使用面向对象的方法可以把 一组看似相互之间毫无联系的对象有效地集成在 一起,这些对象都包含代表各自特征的数据以及 对数据的操作即对象的行为。通过面向对象方法, 可以把与该对象相关的数据和操作封装在一个相 对独立的实体中,该实体有自己的功能和特征, 它也可以采用某种机制与外界交互。
1.1 面向对象程序设计概述
面向对象设计方法追求的是现实问题空 间与软件系统解空间的近似和直接模拟。它 希望用户用最小的力气,最大限度地利用软 件系统进行求解。
在具体学习OOP之前,请先注意一下两 点:
记忆的特征或数据,这些特征或数据能反映对象的基本性质。 找出对象和类中存在的各种整体-部分结构和一般-特殊结构,并进一步确定这些结构组合而成的多重结构。
的处理这些系统状态以及中间状态、组织高 这种环境最主要的特征就是以对象作为程序的主要单位,它将数据及对这些数据的操作功能以及与其他对象的通信的能力都封装在了
面向对象程序设计第一章课件

常见的异常处理方式有try-catch语句块和throws声明。 try-catch语句块用于捕获并处理异常,其中try部分包含 可能抛出异常的代码,catch部分则用于捕获并处理异常 ;throws声明用于声明方法可能抛出的异常类型,调用该 方法时需要处理或继续抛出异常。
06
面向对象程序设计方法学
方法调用和参数传递方式
方法调用
在面向对象程序设计中,方法的调用是实现对象之间交互的重要手段。方法调用涉及到 对象的引用、方法名称和参数列表。通过方法调用,可以实现对对象状态的访问和修改。
参数传递方式
参数传递是方法调用过程中的重要环节,它决定了方法执行时所需数据的来源和去向。常见的参数传 递方式有值传递和引用传递。值传递是将参数的副本传递给方法,方法内部对参数的修改不会影响原
类定义包括类名、属 性(成员变量)和方 法(成员函数)的基本结 构和行为。
对象创建与使用
对象是类的实例,它具有类定义 的属性和方法。
创建对象需要指定类名和对象名 ,并使用“new”关键字进行实
例化。
使用对象需要先创建对象,然后 通过对象名访问其属性和方法。
封装与隐藏实现细节
多态性是面向对象程序设计中的另一个 重要概念,它允许使用父类类型的引用 指向子类的对象,并调用该对象的方法 。
接口实现:通过实现接口中定义 的方法,不同的类可以实现相同 的方法签名,从而实现多态性。
接口定义和实现
接口是一种特殊的类型,它定义了一 组方法的签名,但没有实现这些方法。
接口的实现使用`implements`关键字,一 个类可以实现一个或多个接口,实现接口 时需要实现接口中定义的所有方法。
消息传递原理
当一个对象需要请求另一个对象执行某个操作时,它会发送一个消息给目标对象。消息包 含了操作的相关信息,如操作名称、参数等。目标对象接收到消息后,根据消息的内容执 行相应的操作,并将结果返回给发送方。
第1章 面向对象程序设计概述

5. 轮到白子
6. 绘制画面 7. 判断输赢 8. 返回步骤2 9. 输出最后结果
第一类对象(玩家)负责接 收用户输入,并告知第二类 对象(棋盘)布局的变化, 棋盘对象接收到消息后就负 责显示出这种变化,同时得 用第三类对象(规则)来对 棋局进行判定。
8
面向过程与面向对象程序设计
又例: 一个学校管理软件中有关学生注册和教师 升迁功能的实现。
9
例如,一个学校管理软件中可以包含如下的数据结构和操作: typedef struct student typedef struct teacher { { char name[10]; char name[10]; long num; double salary; int age; int age; char sex; char sex; } student; } teacher;
19
必须先研究事物,而后才能研究过程。必须先 知道一个事物是什么,而后才能觉察这个事物中所 发生的变化。
《路德维希· 费尔巴哈和德国古典文学的终结》
恩格斯
20
什么是面向对象程序设计(续)
面向对象程序设计
是以要解决的问题中所涉及到的各种对象为主 要考虑因素。
对象是一种看问题的观点,是对现实世界各种元素的 一种抽象。对象既含数据又含功能,因此具有自身处 理数据的能力。
13
缺点:
程序设计范型
概念
是指程序设计的体裁,即用程序设计语言表达各种概 念和各种结构的一套设施。或者说设计程序的规范、 模型和风格。 面向过程程序设计范型、面向对象程序设计范型 其它程序设计范型
主要范型
UML第1章 面向对象方法概论

1.3
面向对象开发的概念
面向对象开发是现实世界中以抽象为基础的 软件思维的一种崭新方式。面向对象开发的本质 是应用领域概念的鉴别和组织,而不是它们在一 种程序设计语言中的最终表示。
1.3.1
面向对象方法学
• • • •
分析 系统设计 对象设计 实现
1.3.2 • 对象模型 • 动态模型 • 功能模型
• 所谓“描述”是指用一种语言把人们对问题域 中事物的认识、对问题及其解决方法的认识描 述出来。最终的描述必须使用一种能够被机器 读得懂的语言,即编程语言。
1.2.2 • • • • • • 标识 分类 多态性 继承 封装 抽象
对象的特性
1.2.3
软件工程学的作用
• 软件工程学从认识事物方面看,它在分析阶段 提供了一些对问题域的分析认识方法。从描述 事物方面看,它在分析和设计阶段提供了一些 从问题域逐步过渡到编程语言的描述手段 。 • 传统的软件工程方法(图1-1)与面向对象的 软件工程方法(图1-2)比较
问题域 需求分析 总体设计和详细设计 编程和测试 软件维护
图1-1
问题域 自然语言 面向对象的编程语言 OOA OOD OOP OOT 计算机
图1-2
• 传统的软件工程方法: 1)需求分析 2)总体设计和详细设计 3)编程和测试 4)软件维护
• 面向对象的软件工程方法 1)面向对象的分析 2)面向对象设计 3)面向对象的编程 4)面向对象的测试 5)面向对象的软件维护
• 面向对象方法的主要优点是 : (1)与人类习惯的思维方法一致 (2)稳定性好 (3)可重用性好
(4)可维护性好 (5)面向对象的软件稳定性比较好 (6)面向对象的软件容易修改 (7)面向对象的软件容易理解 (8)易于测试和调试
第1章面向对象程序设计概述

第1章面向对象程序设计概述面向对象程序设计(Object-Oriented Programming,OOP)是一种常用的编程范式,其核心思想是将现实世界中的事物抽象为对象,并将对象之间的关系通过消息传递进行交互。
OOP主要包括封装、继承和多态三个特性,通过合理使用这些特性可以使程序更加模块化、灵活和可复用。
封装是OOP的基本特性之一,它将数据和行为封装到一个对象中,使得对象的内部状态对外部不可见,只能通过对象的公共接口来访问。
通过封装,可以隐藏内部的实现细节,提供更高层次的抽象,增强程序的安全性和可靠性。
继承是指通过已有的类(父类)派生出新的类(子类),子类继承了父类的数据和行为,并可以添加新的数据和行为。
继承可以促进代码的重用,减少代码冗余,提高开发效率。
此外,继承也提供了一种层次化的结构,有助于理清对象之间的关系。
多态是指同一种操作作用于不同的对象,可以产生不同的结果。
多态可以增加程序的灵活性和拓展性,减少代码的耦合度。
在OOP中,多态通常通过接口或父类的指针来实现。
由于动态绑定的特性,运行时才真正确定调用的是哪个对象的方法。
除了封装、继承和多态,面向对象程序设计还涉及其他重要的概念和技术。
例如,类定义是创建对象的模板,描述了对象具有的属性和方法。
对象是类的实例,具有独立的内存空间和状态。
消息传递是对象之间相互交互的方式,对象通过发送消息来请求其他对象的服务。
聚合和组合是表示对象之间关系的方法,聚合表示弱的关联关系,组合表示强的关联关系。
在面向对象程序设计中,还有一些设计原则和模式值得注意。
开闭原则(Open Close Principle,OCP)要求软件实体对扩展开放,对修改关闭。
单一职责原则(Single Responsibility Principle,SRP)要求一个类只负责一个职责,保持类的高内聚性。
依赖倒置原则(Dependency Inversion Principle,DIP)要求依赖关系要建立在抽象上,而不是具体类上。
第1章面向对象程序设计概述

运算符重载:一个运算符可以同时应用于多种运算。
虚函数:(在一个类等级中可以使用相同函数的多个 版本,每一个版本的属于类等级中的不同的类)
继承和多态性组合,可以生成很多相似但又独 一无二的对象。继承性使得这些对象可以共享许 多相似特性,而多态又使同一个操作对不同对象 产生不同表现形式。这样不仅提高了程序设计的 灵活性,而且减轻了分别设计的负担。
“过程”通过特定规则组织起来的一些对象 “表现”出来的。面向对象和面向过程的这个 差别导致了整个分析设计方法的革命。
分析设计从过程分析变成了对象获取,从数据 结构变成了对象结构。
课程内容
➢ 程序设计方法 ➢ OOP的基本概念
➢ 对象与类 ➢ 数据的抽象和封装 ➢ 继承性 ➢ 多态性 ➢ 消息和方法
当对象们被按规则组合起来以后,就能表达预期的功能。其实世 界世界就是这样组成的。平时看上去每个对象都互无关系,然 而当它们按图示规则组织起来之后,踩下刹车,汽车便乖乖停 住了。
面向对象与面向过程根本区别:
不再把世界看作是一个紧密关联的系统,而是 看成一些相互独立的小零件,这些零件依据某 种规则组织起来,完成一个特定的功能。
对象的方法
方法:对象能执行的操作
对象实例
学生张三实体 对象的状态就是对象的属性值。 对象名:张三 对象的属性:
学号:100030 姓名:张三 年龄:20 性别:男 专业:计算机 年级:08级 家庭地址:湛江 对象操作: 显示学生信息 修改学生信息
实例:银行帐户
每个帐户是一个对象,包括
例如从学生张三、小李等实体中抽象出“学生” 类。
对象和类的关系
类的一个具体实现,称为实例
类
对象
描述这类对象共有的、本质的属性和行为
第1章面向对象程序设计概论

构成的封装体。
声明的私有成员length、width和Area外部无法
直接访问,外界可通过公有行为SetData()、
CompueteArea()和OutputArea()与类
RectangleArea发生联系。
1.2.3 消息
消息:是面向对象程序设计用来描述对象之
抽象性
继承性
C++
封装性
多态性
在C++语言中,
类是支持数据封装的
工具,对象是数据封
装的实现。C++将数
据和相关操作封装在
类中,同时通过访问
权限来控制对内部数
据的访问。
1.4 C++对OOP方法的支持
抽象性
继承性
C++
封装性
多态性
C++多态分为编
译时多态和运行时多
态。对编译时多态的
支持是通过函数重载
和运算符重载实现的
;对运行时多态的支
持是通过继承和虚函
数来实现的。
1.5 C++程序的实现
• 1.5.1 编辑C++源程序
• 1.5.2 编译和连接源程序
• 1.5.3 运行源程序
1.5 C++程序的实现
从C++源程序到可执行程序的步骤:
进行概括,抽出一类对象的公共性质并加以描述
的过程。
抽象
描述某类对
象共有的属
性或状态
数据
抽象
行为
抽象
描述某类对
象的共有的
行为或功能
特征。
第一章面向对象程序设计概述

1.1.3高级语言 高级语言
•上述个人通信管理程序代表了结构化程序设计语言的编程方法 先 上述个人通信管理程序代表了结构化程序设计语言的编程方法:先 上述个人通信管理程序代表了结构化程序设计语言的编程方法 定义一些全局性的数据结构,然后编写一些过程对这些数据结构进行 定义一些全局性的数据结构 然后编写一些过程对这些数据结构进行 操作,其模型如下图所示 其模型如下图所示: 操作 其模型如下图所示
1.1.3高级语言 高级语言
•结构化程序的案例——个人通信录程序 结构化程序的案例 结构化程序的案例 个人通信录程序
struct Person{ 存放个人信息的数据结构 char name[10]; char addr[20]; char phone[11]; 定义全 } 局数据 Person p[100]; int n=0; 定义操作 void InputData(){ ......} 数据的函 void SearchAddr(char *name){……} void SearchPhone(char *name){……} 数 void PrintData(){……} 主函数控 Void main(){ 制程序流 …… //调用前面编写的函数,完成通信录数据处理 调用前面编写的函数, 调用前面编写的函数 程 …… }
4、基本概念 、 – 对象 – 属性
• 描述对象的特征的数据 对象由属性和 行为构成 属性
• 客观存在的实体称为对象
行为
– 行为
• 对象自身的行为,对现实世界某些信息的响应. 对象自身的行为,对现实世界某些信息的响应.
– 对象之间通过传递消息相互影响
5、面向对象基本模式 、
消息 数据
成员函数 成员函数
第1章 面向对象程序设计概述 章