C++编程学习(第33天)
面向对象程序设计方法概述
C++并不是一种纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型的语言。由于C++是在C的基础上发展而成的,因此保留了C的绝大部分的功能和运行机制,C语言是基于过程的语言,C++自然保留了基于过程语言的特征。
对于规模比较小的程序,编程者可以直接编写出一个基于过程的程序,详细地描述程序中的数据结构及对数据的操作过程,但是当程序规模比较大时,就显得力不从心了。C++面向对象的机制就是为了解决编写大程序时的困难而产生的。
从程序结构角度看,C++基于过程的程序和面向对象的程序是不同的。在基于过程的程序中,函数是构成程序的基本部分,程序面对的是一个个函数,每个函数都是独立存在于程序中,除了主函数只能被操作系统调用外,各函数可以互相调用。而在面向对象的程序中,除主函数外,其它函数基本上都是出现在“类”中的,只有通过类才能调用类中的函数。程序的基本构成单位是对象,程序面对的是一个个的类和对象。
程序设计的主要工作是设计类、定义和使用类对象,显然,这时的程序设计是基于类的,而不是基于函数或就过程。
凡是以类对象为基本构成单位的程序称为基于对象的程序。而面向对象程序设计则还有更多的要求。面向对象程序设计有4个主要特点:抽象、封装、继承和多态。C++的类对象体现了抽象和封装的特性,在此基础上再利用继承和多态,就成为真正的面向对象的程序设计。
为了基于过程作比较,往往把基于对象程序设计和面向对象程序设计统称为面向对象程序设计
什么是面向对象的程序设计
1、对象和类
客观世界中任何一个事务都可以看成一个对象。
对象是构成系统的基本单位。
一个班级作为一个对象时有两个要素,一是班级的静态特征,如班级所属系和专业、学生人数等,这种静态特征称为属性;二是班级的动态特征,如学习、开会、体育比赛等,这种动态特征称为行为或功能。
如果想从外部控制班级学生的活动,可以从外界向班级发一个信息,如打铃就下课,一般称它为消息。
任何与一个对象都应当具有两个要素,即属性和行为。对象是由一组属性和一组行为构成的,对象能根据外界给的信息进行相应的操作。
一般来说,凡是具备属性和行为这两种要素的,都可作为对象。
在一个系统中的多个对象之间通过一定的渠道相互联系,要使某一个对象实现某一种行为即操作,应当向它传送相应的消息。
使用面向对象的程序设计方法设计一个复杂的软件系统时,首要的问题是确定该系统是由哪些对象组成的,并且设计这些对象。
在C++中,每个对象都是由数据和函数这两部分组成的。数据体现了属性,函数是用来对数据进行操作的,以便实现某些功能。
2、封装与信息隐蔽
可以对一个对象进行封装处理。把数据和针对数据的操作封装在一起,形成一个类,这个类的一部分数据和成员函数声明为私有,对外界屏蔽,也就是说从外界是看不到的,甚至不知道这些属性的存在。
这样做的好处是大大降低了人们操作对象的复杂程度,使用对象的人完全可以不必知道对象内部的具体细节,只须了解它外部功能即可自如地操作对象。
在设计一个对象时,要周密的考虑如何进行封装,把不必让外界知道的部分隐藏起来,也就是说,把对象的内部实现和外部行为分隔开来。
面向对象程序设计方法的一个重要特点就是封装性,所谓封装指两方面含义,一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相互独立,互不干扰。二是将对象中某些部分对外隐藏,即隐藏其内部细节,只留少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽,信息隐蔽还有利于数据安全,放至类外无关代码了解和修改数据。
C++类对象中的函数名就是对象的对外接口,外界可以通过函数名调用这些函数来实现某些行为。
3、抽象
在程序设计方法中,常用到抽象这一名词。抽象的过程是将有关事务的共性归纳、集中的过程。
抽象的作用是表示同一类事务的本质。
类是对象的抽象,而对象则是类的特例,即类的具体表现形式。
4、继承和重用
如果在软件开发中已经建立了一个名为A的类,又想建立一个名为B的类,而B类与A类内容基本相同,只是在前者的基础上增加一些属性和行为,显然不必再从头设计一个新类,而只须在类A的基础上增加一些新内容即可。这就是面向对象程序设计中的继承机制。
C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类,这就可以重用已有软件中的一部分甚至大部分,大大节省了编程工作量,这就是常说的软件重用的思想。
5、多态性
如果有几个相似而不完全相同的对象,有时人们要求在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作,这种情况就是多态现象。
C++中,所谓多态性是指,由继承而产生的不同的派生类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。
面向对象程序设计的特点
传统的基于过程程序设计是围绕功能进行的,用一个函数实现一个功能,所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。
把数据和有关操作封装成一个对象。
程序设计者的任务包括两个方面,一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。
类和对象的作用
类是实现面向对象程序设计的基础,是所有面向对象的语言所具有的共同特征,所有面向对象的语言都提供了这种类型。
基于对象就是基于类,与基于过程的程序不同,基于对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的,在此基础上利用了继承机制和多态性,就是面向对象的程序设计。
一组数据是与一组操作相对应的,因此人们把相关的数据和操作放在一起,形成一个整体,与外界相对分隔,这就是面向对象程序设计中的对象。
基于对象和面向对象程序设计就是把一个算法和一组数据结构封装在一个对象中,因此可以说,算法+数据结构=对象
对象s+消息=程序
消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象以及确定这些对象发出的命令,使各对象完成相应的操作。
面向对象的软件开发
面向对象的软件工程包括以下部分
1、面向对象分析
2、面向对象设计
3、面向对象编程
4、面向对象测试
5、面向对象软件维护