《C++面向对象程序设计》杨国林 吴敏 内蒙古大学出版社 第一章 面向对象思想

  • 格式:doc
  • 大小:68.00 KB
  • 文档页数:5

课程名称:.面向对象程序设计 信息学院计算机专业课教案

- - 1

信息学院计算机专业基础课:

课程名称:

《C++面向对象程序设计》

主讲教师:吴 敏

总学时: 56(课堂教学44;实验教学12)

使用专业:计算机科学与技术

2009.09

课程名称:.面向对象程序设计 信息学院计算机专业课教案

- - 2

第一章 面向对象程序设计思想

 本章主要目标

 回顾结构化程序设计思想

 了解面向对象的概念

 介绍面向对象程序设计的核心概念

 面向对象的C++语言与结构化的C语言的比较

 C++语言对C语言的改进

 本章重点

 了解面向对象程序设计的核心概念:类与对象、封装、继承和多态性。

 弄清楚C++语言对C语言的改进。

课程知识点讲解:

1.1. 概述

C++语言是一种面向对象的程序设计语言,使用C++语言可以实现面向对象的程序设计。但是,由于C++是C语言的扩展,它分享了C语言的许多技术特征、属性和优点。同时提供了对面向对象程序设计的全面支持。由此,C++语言包括了面向过程的过程性部分和面向对象的类部分。在介绍面向对象的概念之前,我门需要了解一下过程的结构化程序设计与面向对象程序设计的联系与区别。

 结构化程序设计

它的基本思路是:把一个复杂问题的功能逐步分解,求解过程分阶段进行。

结构化程序设计的基本思想具体是:

1.自顶向下

2.逐步细化

3.模块化设计:将整个程序划分为若干功能相对独立的子模块,并要求这些子模块

的关系尽可能简单;子模块还可以继续划分,直至最简。

4.结构化编码:每一个模块最终都可以用顺序、选择、循环三种基本结构来实现。

从以上四步可以看出,结构化程序设计可以有效地将一个复杂的问题分解为若干易于处理的子任务,而每一个子任务都可以独立编写程序来解决,从而将整个系统划分成多个子模块,程序中的子模块在C 语言中通常用函数实现。

结构化程序设计具有很多优点,但它仍是一种面向过程的程序设计方法。在结构化程序设计中,把解决问题的过程(如函数)作为程序的重点。这种分而置之的方法对于小程序和初学者来说,是一种比较有效的技术。

 结构化程序设计的缺陷 课程名称:.面向对象程序设计 信息学院计算机专业课教案

- - 3 程序中的数据与处理数据的过程是分离的,当数据量或数据结构发生变化时,所有进行相关处理的过程都要进行修改。每一个相对老的程序系统,若采用新的方法或结构进行修改和扩充都会带来额外的开销。程序的可重用性差。

随着软件技术的发展,如图形用户界面的应用,软件的使用越来越方便,也就要求程序的数据处理能力越来越强。同时程序的数据量也变得越来越大。然而结构化程序设计中,数据与处理数据的过程(如函数)分离,使得程序的开发和维护变的更复杂。同时,大规模的软件系统也很难用过程来描述和实现。这种面向过程的设计方法,使系统的开发,维护工作变得越来越困难。为解决软件设计危机,提出了面向对象程序设计方法。

 面向对象的概念

面向对象是一种软件开发设计方法,它是在面向过程的结构化程序设计方法面临困难的背景下,应运而生的一种新的软件开发方法。

什么是面向对象的方法呢?下面先来介绍一下数据类型,数据类型可以分为三种:简单数据类型,用户自定义数据类型(结构体),抽象数据类型。

抽象数据类型:在定义数据时,必须同时定义对数据进行的操作,用抽象数据类型定义的数据就称为对象(或实例)。

那么,面向对象方法中的对象是将“一组数据和对该数据的操作方法放在一起,作为一个相互依存,不可分离的整体”,即:用抽象数据类型定义的数据(或实例)。

面向对象程序设计就是一种应用对象、类、封装、聚合、继承、消息传递、多态等概念来构造系统的软件开发方法。当然我们不期望通过简单的介绍就要求读者完全理解这些概念,在本书的后续章节中,将不断地帮助读者加深对这些概念的理解,以达到熟练运用的目的。

1.2. 面向对象语言的核心概念

 对象是面向对象程序设计中的基本单位

 类是面向对象方法的核心

 对象的属性和行为结合为一个独立实体称为封装

 复杂对象可以由若干简单对象构成

 继承:派生类继承基类的属性和行为

 消息传递:在面向对象的方法中,对象之间是使用消息进行通信的。

 多态性提供了面向对象方法的设计灵活性

讲解方式:以上概念要求了解基本思想,可以举例进行讲解。可以用以前学过的不同类型的数据组合成一个结构体来说明类和对象概念。

1.3. C++语言与C语言的比较

C++语言是从C语言发展演变而来的,它是C语言的扩充,C++语言既可以进行面向过程的程序设计,也可用于面向对象的程序设计。

课程名称:.面向对象程序设计 信息学院计算机专业课教案

- - 4 1.3.1 C++的面向对象的特点

C++语言与C语言保持兼容,使得C++不是一个纯正的面向对象的语言。C++既支持面向过程的程序设计,又支持面向对象的程序设计。当然,C++语言最有意义的方面是支持面向对象的特征,虽然与C的兼容使得C++具有双重特点,但它在概念上是和C完全不同的语言。我们使用C++应该注意按照面向对象的思想去编程。C++支持面向对象的程序设计,主要表现在以下几个方面。

 支持数据封装:在C++中,类是支持数据封装的工具,对象则是对数据封装的具体实现。在面向对象程序设计中,将数据和对该数据上进行合法操作的函数封装在一起,作为一个类的定义。

 类中成员的访问权限:C++类中可以定义三种不同访问控制权限的成员,一种是私有(private)成员,它只能被本类的成员函数访问。另一种是公有(public)成员,类外的函数可以访问类的公有成员,所以公有成员是类对外的公共接口。还有一种是保护(protected)成员,保护成员与私有成员的性质相似,只是在继承中可以被子类访问。

 允许友元破坏封装性:类具有封装和数据隐藏的特性,只有类的成员函数才能访问类的私有成员,类外的任何函数是不允许访问其私有成员的,但是友元便可以打破这条禁令,它可以访问该类的私有成员。友元可以是类外定义的函数,也可以把另一类说明为本类的友元,其作用在于提高程序运行效率,它也是C++的一个面向对象的重要特性。

 允许函数名或运算符重载:重载多态是多态性中的一个类型。C++允许用一个相同的函数名代表多个不同实现的函数,这样给编程带来极大的方便。运算符重载是指同一运算符可具有不同的功能。C++允许重新定义已有的运算符,实现许多用户自定义类型的类似运算符操作。

 支持类的继承:C++语言支持类的继承。一个类可以根据需要派生子类,子类也称为派生类,派生类继承了基类的成员,另外派生类自己还可以定义新的成员。继承实现了抽象和共享机制。它给C++语言编程带来了方便,提高了程序的可扩展性和可重用性,进而提高了软件开发的效率。

 支持动态联编:多态性中的另一种类型为动态联编(重载:称为静态联编)。动态联编是操作对象在运行时获取所选择的函数。动态联编是在公有继承的前提下,通过虚函数来实现的。C++语言可以定义虚函数,通过定义虚函数来支持动态联编。

1.3.2 C++语言对C语言的改进

C++对C的主要扩充是支持面向对象的特征。C++还在许多其他方面对C语言中的不足进行了改进和扩充,主要改进如下。

 定义符号常量时指出类型。C++语言提供常类型修饰符const,用它来定义符

 引进了内联函数的概念,减少了宏定义的使用。C++中提供了内联函数方法,替代了C语言中的带参数的宏定义,增强了安全性。

 用引用替代指针作为函数的参数。引入引用的概念,减少了指针的使用,使程序代码更简洁明了。

 增加了一些运算符。C++中增添了作用域运算符“::”,以及动态内存分配运算符new和delete,这两个运算符是用来替代函数malloc和free的,使得动态内存分配更方便。

 输入/输出更方便。除了提供C标准的输入/输出函数功能外,C++还提供了与C语言不同的I/O流类库,使用重载的插入操作符“>>”和“<<” 析取操作符。这两个操作符是为基本C++类型预定义的,但是很容易对它们进行重载,使其执行用户自定义的类类型的输入/输出。

 类型参数化。C++的“模板”机制允许将类或函数的类型参数化,模板是C++语言支持参数化多态性的工具,使用模板可以减少程序员的重复劳动。

讲解方式: 课程名称:.面向对象程序设计 信息学院计算机专业课教案

- - 5 通过简单C语言例子说明以上特点。C++对C语言还有一些其他方面的改进,将在以后各章进行介绍。