对C++面向对象的编程的理解

面向对象方法历经了30多年的研究和发展,已经日益成熟和完善,应用也越来越深入和广泛,现其已经发展为主流的软件开发方法。
本节主要介绍面向对象方法的优点以及它的一些基本概念。
2.3.1面向对象方法的优点
(1)与人类习惯的思维方法一致。
长期以来,人与计算机之间仍存在着较大的隔阂,人认识问题时的认识空间和计算机处理问题时的方法空间的不一致,而面向对象技术有助于减小这一隔阂、并使这两个空间尽量趋于一致。
2)稳定性好。
以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。
3)可重用性好。
主要表现在,面向对象程序设计中类库的使用(可重用的标准化的模块),以及类的继承性。
4)容易开发大型软件产品。
用面向对象思想开发软件,可以把一个大型产品看作是一系列本质上相互独立的的小产品来处理。
(5)可维护性好。
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2.3.2 面向对象方法的基本概念
    面向对象方法的本质,就是主张从客观世界固有的事物出发的构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物
关于面向对象方法,对其概念有许多不同的看法和定义,但是都涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。
下面分别介绍面向对象方法中这几个重要的基本概念。
1.对象(Object)
(1)对象的概念
    对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。
    我们周围的世界是由各式各样的对象组成:例如学校中,学生、教师、课程、班级、教室、计算机、电视机、空调等都是对象。 对象可以是人,可以是物,可以是具体的事物,也可以是抽象的概念。
(2)对象的组成
    面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组静态特征和它可执行的一组操作组成。
    客观世界中的实体通常都既具有静态的属性,又具有动态的行为,因此面向对象方法中的对象是由该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
    例如,一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号等)及其操作(如启动、刹车等)。
    属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作称为方法或服务。
    不同对象的同一属性可以具有不同的属性值。
    例如,身高这一属性可以有不同的属性值:张三的身高为170cm,李四的身高为180cm。
(3)对象的基本特点
    对象有以下五大基本特点:
①标识唯一性。一个对象通常可由对象名、属性和操作三部分组成,对象名唯一标识一个对象。
②分类性。指可以将具有相同属性和操作的对象抽象成类。
③多态性。指同一个操作可以是不同对象的行为,不同对象执行同一操作产生不同的结果。
④封装性。从外面看只能看到对象的外部特性,对象的内部对外是不可见的。(对内不对外)
⑤模块独立性好。由于完成对象功能所需的元素都被封装在对象内部,所以模块独立性好。

2.类(Class)和实例(Instance)
    类,具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。
    实例,一个具体对象则是其对应类的一个实例。(可以理解为对一个对象的具体说明)
    要注意的是:“实例”这个术语,必然是指一个具体的对象。“对象”这个术语,则既可以指一个具体的对象,也可以泛指一般的对象。因此,在使用“实例”这个术语的地方,都可以用“对象”来代替,而使用“对象”这个术语的地方,则不一定能用“实例”来代替。
    例如,如图“汽车类”,它描述了所有汽车共有的属性(品牌、价格和最高时速)。因此,任何汽车,不管是卡车、轿车还是面包车,都是类“汽车”的一个对象(这里的“对象”不可以用“实例”来代替),而某一具体的汽车,例如“福特 15万 200km/h”具有这些属性的这辆汽车是类“汽车”的一个实例。
    类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。
    例如,一个面向对象的图形程序在屏幕中间显示一个半径为4cm的黄颜色的圆,在屏幕右上角显示一个半径为3cm蓝颜色的圆。
这两个圆心位置、半径大小和颜色均不相同的圆,是两个不同的对象。但是它们都有相同的属性(圆心坐标、半径、颜色)和相同的操作(放大缩小半径等),因此,它们是同一类事物,可以用“Circle类”来定义。
3.消息(Message)
    面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息传递是对象间通信的手段,一个对象通过向另一对象发送消息来请求其服务。
    消息机制统一了数据流和控制流。消息的使用类似于函数调用。通常一个消息由下述3部分组成:
(1)接收消息的对象名称;
(2)消息选择符(也称为消息名);
(3)零个或多个参数。

例如,SolidlLine是Line 类的一个实例(对象),端点1的坐标为(100,200),端点2的坐标为(150,150),当要求它以蓝色、实线型在屏幕上显示时,在C++语言中应该向它发送下列消息:
SolidlLine.Show(blue,Solid);
其中:
SolidlLine是接收消息的对象名称;
Show是消息选择符(即消息名);
小括号内的blue,Solid是消息的参数。
    消息只告诉接收对象需要完成什么操作,但并不指示怎样完成操作。消息完全由接收者解释,独立决定采用什么方法来完成所需的操作。
    一个对象可以接收不同形式和内容的多个消息;相同形式的消息可以送往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够作出不同的反应。一个对象可以同时往多个对象传递消息,多个对象也可以同时向某一个对象传递消息。消息传递如图2.4所示。

某个对象发送----》消息 操作名 参数-------->另一对象接口接收消息


4.继承(Inheritance)
(1)类的继承
    广义地说,继承是指能够直接获得已有的性质和特征,而不必重复地定义它们。


    面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个子类直接继承其父类的描述(数据和操作)或特性,这些属性和操作在子类中不必定义,此外,子类还可以定义它自己的属性和操作。
例如,“汽车”类是“卡车”类、“轿车”类和“面包车”类的父类,“汽车”类可以有“品牌”、“价格”和“最高时速”等属性,有“刹车”和“启动”等操作。而“卡车”类除了继承“汽车”类的属性和操作外,还可定义自己的属性和操作,如“载重量”、“最大宽度”和“最大高度”等属性,也可以有“驱动方式”等操作。
(2)继承的传递性
    继承具有传递性,如果类Z继承类Y,类Y继承类X,则类Z继承类X。因此,一个类实际上继承了它上层全部基类的特性,也就是说,属于某类的对象除了具有该类定义的特性外,还具有该类上层全部基类定义的特性。
继承分为单继承和多重继承。单继承是指一个子类只有唯一的一个父类;多重继承是指一个子类也可以有多个父类,它可以从多个父类中继承特性。
例如,“水陆两用交通工具”类既继承“陆上交通工具”类的特性,又继承“水上交通工具”类的特性
(3)继承的优点
    继承的优点是:相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息,提高软件的可重用性,便于软件修改维护。另外,继承性使得用户在开发新的应用系统时,不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类,再派生出新类以实现所需的功能。
5.多态性(Polymorphism)
    对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行为,该现象称为多态性。
在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
多态性的出现大大提高了软件的可重用性和可扩充性,比如说类Fruit有子类Apple和子类Pear,在代码中可能需要一个水果(fruit)类,但是具体实例化哪个子类,需要看具体的情况,如果在代码中明确实例化了Apple子类,那么以后如果需要实例化Pear子类,那就需要修改代码,然后再重新编译等,费时费力。有了多态,就可以把想要实现哪个类写在配置文件中,代码永远是:Fruit fruit=Class.forName("所需要实例化的类名").getInstance();那个类名可以从配置文件得到,要修改实例化的类,就只要修改配置文件就可以了,就不再需要修改程序代码,更不用重新编译程序了。

你可能感兴趣的:(C++,面向对象的编程,什么是继承,类与对象的关系)