第 2 章 程序设计基础
知识类型:理论 学时: 2 学时 分值:约 4 分
2.1 程序设计方法与风格 方法: 面向过程的结构化程序设计方法 面向对象的程序设计方法 风格: 清晰第一、效率第二 源程序文档化 数据说明的方法 语句的结构 输入和输出方法
2.2 结构化程序设计 程序的目的:用于数学计算 主要工作:设计求解问题的过程
2.2 结构化程序设计 设计原则 自顶向下、逐步求精。采用模块分解与功能抽象。 分而治之。 程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模 块内部均是由顺序、选择和循环三种基本结构组成。 其模块化实现的具体方法是使用子程序(函数)。
优点: 有效地将一个较复杂的程序系统设计任务分解成 许多易于控制和处理的子任务,便于开发和维护。 2.2 结构化程序设计
缺点: 可重用性差、数据安全性差、难以开发大 型软件和图形界面的应用软件 把数据和处理数据的过程分离为相互独立的实体。 当数据结构改变时,所有相关的处理过程都要进行相 应的修改。 每一种相对于老问题的新方法都要带来额外的开销。 图形用户界面的应用程序,很难用过程来描述和实现, 开发和维护也都很困难。 2.2 结构化程序设计
与人类习惯的思维方法一致 稳定性好 可重用性好 易于开发大型软件产品 可维护性好 2.3 面向对象的程序设计 面向对象方法的特点
将数据及对数据的操作方法封装在一起,作为一 个相互依存、不可分离的整体 —— 对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外界发生关系。 对象与对象之间通过消息进行通讯。 2.3 面向对象的程序设计 面向对象方法的特点
1. 对象( object) 2.3 面向对象的程序设计 面向对象方法的基本概念 是系统中用来描述客观事物的一个实体,它是 用来构成系统的一个基本单位。对象由一组属 性和一组行为构成。 属性:用来描述对象静态特征的数据项。 行为:用来描述对象动态特征的操作序列。
<例><例> 有一个人名字叫胡哥,性别男,身高 1.80m ,体重 68kg ,可以修电器,可以教计算机课,描述该对象 如下: – 对象的静态特征: 性别:男 身高: 1.80m 体重: 68kg – 对象的动态特征: 回答身高 回答体重 回答性别 修理电器 教计算机课
1. 对象( object) 2.3 面向对象的程序设计 面向对象方法的基本概念 对象的基本特点 标识唯一性 分类性 多态性 封装性
1. 对象( object) 2.3 面向对象的程序设计 面向对象方法的基本概念 对象的定义 全局对象、局部对象、静态对象、堆对象 class Desk { public: int weight; int height; int width; int lenth; };}; Desk a; ········ main() { Desk b; ········· } 全局 对象 局部 对象
2. 类 (Class) 和实例 (Instance) 2.3 面向对象的程序设计 面向对象方法的基本概念 (1) 从结构到类 (2) 什么是类 具有相同属性和行为的一组对象的集合 一个属于某类的对象称为该类的一个实例。
钟表类的定义 属性: int Hour, int Minute, int Second 行为: SetTime(), ShowTime() class Clock { public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second; };};
class Clock { public: void SetTime(int NewH, int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second; }; 成员数据 成员函数
void Clock :: SetTime(int NewH, int NewM, int NewS) { Hour=NewH; Minute=NewM; Second=NewS; } void Clock :: ShowTime() { printf(“%d:%d:%d”,Hour,Minute,Second); } 19
#include class Clock {......// 类的声明略 } // 类的实现略 int main() { Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime(); }
3. 消息 (message) 2.3 面向对象的程序设计 面向对象方法的基本概念 消息是系统向对象发出的服务请求,是对象之 间的通信机制。提供服务的对象负责消息协议 的格式和消息的接收,请求服务的对象提供输 入信息,获取应答消息内容。 在面向对象中,消息常常通过函数调用来实现。
<例><例> 状态:胡哥 29 岁 男 计算机 讲师 680 实例: 行为:评职称 涨工资 抽象 属性:姓名 年龄 性别 单位 职称 工资 类:讲师 操作:评职称 涨工资 数据 结构 方法名 方法:评职称 { 步骤 条件 } 涨工资 { 公式 } 方法体 class 讲师 胡哥 ; 胡哥. 评职称(..... ) ; 胡哥. 调工资(..... ) ; 消息
4. 继承 (inheritance) 2.3 面向对象的程序设计 面向对象方法的基本概念 继承对于软件复用有着重要意义,是面向对象技 术能够提高软件开发效率的重要原因之一。 定义:特殊类的对象拥有其一般类的全部属性与 服务,称作特殊类对一般类的继承。 例如:将轮船作为一个一般类,客轮便是一个特殊类。
保持已有类的特性而构造新类的过程称为继 承。 在已有类的基础上新增自己的特性而产生新 类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。 4. 继承 (inheritance) 2.3 面向对象的程序设计 面向对象方法的基本概念
继承的目的:实现代码重用 派生的目的:当新的问题出现,原有程序无法 解决(或不能完全解决)时,需要对原有程序 进行改造。 4. 继承 (inheritance) 2.3 面向对象的程序设计 面向对象方法的基本概念
继承与派生问题举例
多继承、单继承
5. 多态性 (polymorphism) 2.3 面向对象的程序设计 面向对象方法的基本概念 多态是指在一般类中定义的属性或行为,被特 殊类继承之后,可以具有不同的数据类型或表 现出不同的行为。这使得同一个属性或行为在 一般类及其各个特殊类中具有不同的语义。 例如:
多态:同一名称,不同的功能实现方式。 目的:达到行为标识统一,减少程序中标 识符的个数。 实现:重载函数和虚函数 5. 多态性 (polymorphism) 2.3 面向对象的程序设计 面向对象方法的基本概念
总结 基本单元 面向对象程序设计(英语: Object Oriented Programming ,缩写: OOP ),指一种程序 设计范型,同时也是一种程序开发的方法论。 它将对象作为程序的基本单元,将程序和数据 封装其中,以提高软件的重用性、灵活性和扩 展性。
类 类( Class )定义了一件事物的抽象特点。通 常来说,类定义了事物的属性和它可以做到的 (它的行为)。 类可以为程序提供模版和结构。 一个类的方法和属性被称为 “ 成员 ” 。 类狗 { 私有成员 : 体重 毛皮颜色 公有成员 : 吠叫 () }
对象 对象( Object )是类的实例。 类狗 莱丝; 莱丝. 毛皮颜色 = 棕白色 莱丝. 吠叫 () ; 我们无法让狗这个类去吠叫,但是我们 可以让对象 " 莱丝 " 去吠叫,正如狗可以 吠叫,但没有具体的狗就无法吠叫。
方法 ( 行为 ) 方法( Method )是一个类能做的事情,但方法并没 有去做这件事。 作为一条狗,莱丝是会吠叫的,因此 “ 吠叫 ()” 就是它的一个 方法。与此同时,它可能还会有其它方法,例如 “ 坐下 ()” , 或者 “ 吃 ()” 。 对一个具体对象的方法进行调用并不影响其它 对象,正如所有的狗都会叫,但是你让一条狗叫不代表所有 的狗都叫。 类狗 莱丝,泰尔; 莱丝. 吠叫 () ; 则泰尔是不会吠叫的,因为这里的吠叫只是对对象 " 莱丝 " 进 行的。
封装性 具备封装性( Encapsulation )的面向对象程序设计隐藏了某 一方法的具体执行步骤,取而代之的是通过消息传递机制传送 消息给它。 /* 一个面向过程的程序会这样写: */ 结构体狗 莱丝 ; 设置音调 ( 莱丝, 5) ; 吸气 ( 莱丝 ) ; 吐气 ( 莱丝 ) ; /* 当狗的吠叫被封装到类中,任何人都可以简单地使用: */ 类狗 莱丝; 莱丝. 吠叫 () ; 实例 成员 封装是通过限制只有特定类的实例可以访问这一特 定类的成员,而它们通常利用接口实现消息的传入 传出。 class MeiNu // 美女类! { private: int XW; // 胸围 int YW; // 我就不说了噢 :) int TW; // 我还是不说了噢 :)) }; MeiNu jordan; //now is 乔丹 ! jordan.XW = 34; jordan.YW = 24; jordan.TW = 34;
继承性与多态性 继承性( Inheritance )是指,在某种情况下, 一个类会有 “ 子类 ” 。 多态性( Polymorphism )指方法在不同的类 中调用可以实现的不同结果。 类狗 莱丝; 类鸡 鲁斯特; 莱丝. 叫 () ; 鲁斯特. 叫 () ; 鸡啼 犬吠
练习题 1. 下面描述中,符合结构化程序设计风格的是 ______ 。 A. 使用顺序、选择和重复(循环)三种基本控制结构表示 程序的控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序的执行效率 D. 不使用 goto 语句 2. 下面概念中,不属于面向对象方法的是 ______ 。 A. 对象 B. 继承 C. 类 D. 过程调用 3. 结构化程序设计主要强调的是 ______ 。 A. 程序的规模 B. 程序的易读性 C. 程序的执行效率 D. 程序的可移植性 4. 对建立良好的程序设计风格,下面描述正确的是 ______ 。 A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无
5. 下面对对象概念描述错误的是 ______ 。 A. 任何对象都必须有继承性 B. 对象是属性和方法的封装体 C. 对象间的通讯靠消息传递 D. 操作是对象的动态性属性 6. 算法一般都可以用哪几种控制结构组合而成 ______ 。 A. 循环、分支、递归 B. 顺序、循环、嵌套 C. 循环、递归、选择 D. 顺序、选择、循环 7. 在面向对象方法中,一个对象请求另一对象为其服务的方 式是通过发送 ______ 。 A. 调用语句 B. 命令 C. 口令 D. 消息
8. 在设计程序时,应采纳的原则之一是 ______ 。 A. 程序结构应有助于读者理解 B. 不限制 goto 语句的使用 C. 减少或取消注解行 D. 程序越短越好 9. 面向对象的设计方法与传统的的面向过程的方法有本质不同, 它的基本原理是 ______ 。 A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地解决问题 D. 鼓励开发者在软件开发的绝大部分中都用实际领域的概念 去思考 10 .采用面向对象技术开发的应用系统的特点是 ______ 。 A . 重用性更强 B . 运行速度更快 C . 占用存储量小 D . 维护更复杂
1 .结构化程序设计的三种基本逻辑结构为顺序、选择和( ) 2 .在面向对象方法中,信息隐蔽是通过对象的( )性来实现 的. 3 .类是一个支持集成的抽象数据类型,而对象是类的( ) 4 .在面向对象方法中,类之间共享属性和操作的机制称为 ( ) 。 5. 面向对象的程序设计方法中涉及的对象是系统中用来描述客 观事物的一个( )。 6. 一个类可以从直接或间接的祖先中继承所有属性和方法。采 用这个方法提高了软件的( ) 7. 面向对象的模型中,最基本的概念是对象和 ( )。 8. 结构化程序设计是一种面向 ( ) 的设计方法.
9. 对象的基本特点包括标识唯一性、分类性、 多态性、( ) 和模块独立性 10. 在面向对象分析和设计中, 通常把对象所进行的操作称为 ( ) 11. 使用已经存在的类定义作为基础建立新的类定义, 这样的技术 称为 ( ) 12. 继承使得相似的对象可以共享代码和数据结构, 从而大大减 少了程序中的冗余信息, 提高软件的 ( ) 13. 对象和类的关系可以表示为 ( )和( )的关系 14. 结构化程序设计的原则中, “ 先考虑总体,后考虑细节;先考 虑全局目标,后考虑局部目标 ” 称为 ( ) 。 15. 在消息传递中,对象根据所接受的消息而做出动作,同样的 消息被不同的对象接受时可导致完全不同的行动,该现象称 为 ( ) 。
1. (06.4 月 ) 下列选项中不属于结构化程序设计方法的是 A) 自顶向下 B) 逐步求精 C) 模块化 D) 可复用 2. (06.4 月 ) 在面向对象方法中,【 】描述的是具有相似属性 与操作的一组对象。 3. (05.4 月 ) 在面向对象方法中,类的实例称为 【 】. 4. (09.3 月 ) 符合结构化原则的三种基本控制结构是:选择结构、 循环结构和【 】。 5. (08.4 月 ) 结构化程序设计的基本原则不包括: A. 多态性 B. 自顶向下 C. 模块化 D. 逐步求精 有关等级考试题