1.1.2 面向对象的程序设计
与面向过程的程序设计不同,面向对象的程序设计将数据以及对数据的操作以类(Class)的形式封装(Encapsulate)为一个整体,以类的对象(Object)作为程序的基本单元,通过向对象发送消息(Message),进而由对象启动相关的操作(方法)完成各种功能。同时,不同代码对类内数据的访问权限不同,这种机制增强了数据的安全性和软件的可靠性。
类与对象是抽象与具体的关系。以类的对象作为程序的基本元素,符合人们习惯的思维方式,也符合现实世界的组成和运作规律。现实世界就是由一个个具体对象组成的。比如人类、书、笔、桌子都是一个抽象的名词。谈到这些名词的时候,它们只是一个抽象的认识,只有具体到某个实体,比如你的同学王小明、你正在翻看的《面向对象程序设计及C++》课本、你手中的签字笔、你面前的课桌等才是现实生活真正起作用的个体。这些个体都有自己的一些特性和相关的活动,并且同一类的个体拥有共同的抽象类名。
比如定义一个Person类来表示人类,这是一个抽象的概念,需要说明该类的特征以表述这个Person类与其他类的不同。我们先来尝试找出人类拥有的共同特性:想想当你要去求职的时候,你会怎么介绍自己?姓名、性别、年龄、生日、专业、爱好,等等。当你介绍完,一个鲜活的形象就树立起来了。你会发现,身边的每个人都有这些属性。那么我们就可以把这些属性用相应的变量来描述:name、sex、age、birthday、specialty、hobby,等等。在面向对象程序设计中,属性就是要表述的数据,在类中称为数据成员(Data Member),表示这一类对象共同拥有的静态特性。人类有哪些对于这些数据的操作呢?比如,王小明长大了一岁,年龄需要修改,随着年龄的增长,爱好发生改变了,学习了新的技能,利用自己的专长找到一份自己喜爱的工作,等等。对应就有了modify_Age()、modify_Hobby()、study()、job_Hunting()等函数来实现这些操作。这些对数据的操作称为成员函数(Member Function),表示这一类对象共同拥有的动态特性。
下面根据这个已定义的Person类来说明一个具体的同学:赵焱、男、18岁、2002年1月29日出生、信息安全专业、爱好小提琴,同时这个人也具备相应的年龄增长、爱好变化、学习、求职等行为,即成员函数。当然,我们也可以根据这个Person类再定义另一个同学:刘佳、女、19岁、2000年10月20日出生、软件工程专业、爱好摄影等。
实际上,类就是一种类型,与C语言中的基本数据类型不同的是,该类型不仅有数据成员,还包含对数据成员操作的成员函数。而类与对象的关系类似于C语言中类型与变量的关系,显然每一个对象都有一个对象名,各个对象都拥有自己独有的数据成员值。