C++面向对象基础



什么是面向对象程序设计


面向对象的程序设计:把面向对象的思想应用到软件开发中,并指导开发维护软件。


面向对象的设计与我们处理问题的思维方式是相似的,自然界中有许多复杂的事物。比如一辆汽车是由发动机,底盘,轮子,方向盘等等组成的;人们在设计汽车的时候,不是按照一个特定的顺序来制造它的部件的,而是分别制造它的零部件,最后把它们组装在一起。组装好以后,它们各个零件之间都有一些联系,相互之间互相配合,协调工作。这就是面向对象程序设计的基本思路。为了进一步说明问题,下一步我们先来讨论几个概念。


1.对象


自然界中每一个事物都是一个对象,世界是一个对象,而它又是由成千上万个对象组成的。一个对象可以是汽车,房子,一个班级,一篇文章,一个计划等等…..对象是可大可小的,小到沙粒,大到一个学校,一个城市…..


任何一个对象都有两个要素:属性和行为。对象是有一组属性和一组行为构成的。


使用面向对象设计一个复杂的软件系统时,首先要考虑是由哪些对象组成的,然后再考虑如何设计这些对象。


在C++中,每一个对象都是由数据和对数据的操作两部分组成的,我们可以对一个数据进行封装处理,把它们的一部分功能和属性对外界隐藏,使用对象的人完全不需要了解内部的实现细节,只需要知道它的功能就可以使用。对象都是由数据和对数据的操作组成的发封装体,所谓的面向对象就是基于对象的概念,以对象为中心,类和继承为构造机制,开发面向对象的软件系统。


2.封装与信息隐藏


我们可以对一个对象进行封装处理,把它的一些属性和方法对外界屏蔽。比如我们在使用汽车的时候,我们对车内部的构造及一些部件的构造我们是不了解的,通过它设置在外面的接口,比如方向盘,油门,刹车…即可以对车进行控制。我们只需要了解这些接口的使用。这样的好处就是降低了人们在使用对象时的复杂程度,使用对象的人不需要了解内部实现的细节,只需要了解暴露在外界的接口的功能就可以非常自如的使用对象。我们在设计一个对象的时候也应该考虑如何去封装,把不必要让外界知道的信息隐藏起来。


面向对象程序设计的三大特性:封装,继承,多态。


封装的两个含义:


1)将一个对象的属性和方法封装成一个基本单位;


2)将对象的某些部分隐藏,隐藏内部的细节,提供一些接口,以便与外界联系。数据隐藏有利于数据安全,以防止无关的人去修改。


3.抽象


人就是一个抽象,而张三李四就是一个具体的人。抽象的过程就是将有关事物的共性归纳集中的过程。抽象的作用是表示同一类事物的本质。在C++中,类就是一种抽象,类是对对象的抽象,而对象就是类的具体表现形式。


4.继承与重用


在设计一辆新车的时候,不会完全的去设计一个新的车,而是在以前的车为基础在上面去添加一些功能,这可以大大节省时间提到效率。如果我们去设计一个类,但是这个类和我们以前设计的一个类的内容基本相同,或者只是在前面的基础之上增加了一些属性和行为。这样就不必再去设计一个新的类,而只是需要在原有的类上面新增一些内容。这就是继承的机制。利用继承,我们用一个已有的类建立一个新的类,这样我们就可以重用软件中一部分的代码,这就节省了我们的工作量。我们不只可以使用我们以前写的类,还可以使用别人写的类,大大缩短了写代码的时间。这对于我们开发大型软件有非常重要的意义。


5.多态性


比如几个相似但不是完全相同的对象,当我们向它们发出同一个消息的时候,会有不同的行为发生。比如当学习的铃声响起的时候,不同班级的学生会走向自己的教室,而不是同一间教室。在C++中,多态是指由继承产生的不同的类对同一个类会产生不同的响应,多态可以增加程序的灵活性。 



面向对象程序设计的特点


我们在进行传统的面向过程的程序设计的时候,一般是根据功能来编程的。我们用一个函数来实现这个功能,所有的数据都是公用的。我们在设计的时候必须要考虑每一个细节,在什么时候应该对什么数据进行操作。当程序规模很大,数据很多的时候,我们在设计的时候就会感到难以应付。


面向对象程序设计就是采用的另外一种思路,它面对的是一个个的对象,实际上每一组数据都是有特定用途的,是某种操作的对象。数据和对数据的操作封装成了一个对象,对外界相对分隔。这种就好比我们把材料,机器和工人分配给车间,厂长只需要给工人下达命令,一个车间生产十台发动机,这个时候车间就会运作起来。


面向对象设计我们需要考虑两方面:


1)考虑设计的类和对象,考虑它们的数据和数据封装;


2)考虑对象之间如何交互,如何发送消息完成任务的,它们需要完成各自的任务,那样总体的任务也就完成了。


所以对于一个大型的程序来说,面向对象程序设计是一个非常有效的方法,它能够大大降低程序设计的复杂度,减少出错的概率。



面向对象软件开发步骤


1.面向对象分析(Object oriented analysis)


这个时候系统分析员要和用户在一起,对用户的需求做出一些精确的分析,明确的描述。它会从宏观的角度根据事物与事物的关系,将相似属性和行为的对象用类来表示。


2.面向对象设计(Object oriented design)


OOA建立了一个反应真实需求的模型,但是这个模型是比较粗略的。我们根据这个模型对每一部分进行设计,进行类的设计,它会包含很多个层次。这里并不设计编程语言,而是使用一种更通用的描述工具—UML。UML是一种通用的建模语言,这个如果大家有兴趣的话,可以自己去了解。


3.面向对象编程(Object oriented programming)


根据前面设计的结果使用面向对象的一种语言来将它实现,比如C++,JAVA,C#等等….


类是C++中非常重要的概念,它是实现面向对象程序设计的基础,一个具有一定规模的C++程序应该是由许多类组成的。可以说类是C++的灵魂,如果不能真正的掌握类,就不能说掌握了C++。


C++支持面向对象的程序设计,同时也支持面向过程的程序设计。我们在前面也介绍了C++在面向过程中的知识点。基于对象就是基于类,与面向对象的程序设计不同,基于对象的程序是以类为基础,程序的操作都是围绕对象来进行的。在此机制上,就有了继承和多态性。


面向对象设计面向的是一个个对象,所有的数据属于不同的对象。在面向过程的结构化设计中,人们将程序描述为算法和数据结构的集合,算法和数据结构是相互独立,分开来设计的。在实践中,人们逐渐认识到,算法和数据结构是互相紧密连接,不可分割的。应当以一个算法定义一组数据结构,而不宜一个算法定义多个数据结构。


对象就是数据和数据操作的方法的集合,而类是包含许多个对象的集合。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127
有一位课程导师想与你聊聊

免费电话咨询