(Boolan) C++面向对象高级编程(三)

2017-05-01  本文已影响43人  故事狗

今天来看一看关于面向对象的编程的一些内容,也就是关于类和类之间的关系。类和类之间的关系其实一种抽象的描述现实世界的方法。

现实生活中的事物不都和之前提到的String或者Complex一样与其他事务没有太多的联系,其实从不同角度看到事物往往会得出不同的结论。比如,生物界的划分经常是以界门纲目科属种这样的思路来划分的,找出其共性,然后再***向上抽象 ***得出一个概述性的大类。比如,生物学上,人被分类为真核总界 动物界 后生动物亚界 后口动物总门 脊索动物门 脊椎动物亚门 羊膜总纲 哺乳纲 真兽亚纲 灵长目 类人猿亚目 狭鼻猴次目 类人猿超科 人科 人亚科 人族 人属 智人种;猫被分类为真核总界 动物界 后生动物亚界 后口动物总门 脊索动物门 脊椎动物亚门 羊膜总纲 哺乳纲 真兽亚纲 食肉目 猫亚科 猫属 猫种(引自百度百科)。对比猫和人不难发现,在真兽亚纲之前和人类没有区别,但是从目开始,人属于灵长目、而猫咪属于食肉目,从才分道扬镳。那这些分类对于解释这个世界到底有什么帮助吗?这个帮助是很自然的,比如每往下细分一个层次,就意味着区分的细节越细,而越往上则越来越抽象。又比如,真核生物中分四个界:原生生物界、真菌界、植物界和动物界。就拿最熟悉的植物界和动物界来看,他们的区别是显著的,但却别的点往往是粗糙的。

毕竟我对生物学没有太深的了解,但是这样一种分类方法在认识和解释世界的过程中却是通用的。我们希望通过计算机来人和世界结合,那么还是需要对这样的认识方法有一些了解。

C++相较于C的发展,主要是出现了对象的概念,而对象是由各式各样的class构造而成,那么class和class之间的关系就变得特别重要。因为人和人之间就像是对象和对象之间的关系,他们都是同一种class所构造而成的,但是属性却不相同(性别、名 字、名族、肤色、身高、体重、性格,生命周期都不一定相同),虽然存在着这些差异,但每个人都还是属于人类的 (class 人)。但是人和猫的却别不仅仅是对象之间的差别了,更是物种之间的差别了。但是这两个class之间也并不是完全没有相同点,比如这两个物种小的时候都得喝奶等等的相同点,把这喝奶的的这个特点向上抽取,那么就得到了一个新的class(哺乳纲)[ 可以是** 抽象类 ** ],人和猫这两个class和新产生的class之间发生关系就行了,因为这足够表示出这俩的关系了。最后,我们会得到一棵像树一样庞大的一个体系,通过这个体系,我们就能很方便的解释节点(class之间的关系)。

类的基本思想是** 数据抽象(data abstraction)** 和 ** 封装(encapsulation)。数据抽象就是一种依赖于 接口(Interface) 实现(implementation)**。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。

通过这样的抽象,不能方便描述class之间的关系,还更好的将其中的数据进行封装。再拿人和猫来举例,猫身上通常都一身漂亮的皮毛,但人身上基本没有(如果说人身上的汗毛其实不一定比猫少,那么这就是种诡辩了)。这样会有一个巨大的好处,让猫身上的毛很直接的就属于猫咪,而不会出现在人类的class中。这就实现了非常好的*** 封装 ***的效果。

这样的操作,对于数据的封装有着巨大的好处,但是,这之间也又带有了一个巨大的方便,比如,猫咪身上的毛,是猫咪自己的私有属性,这时候,同样猫也可以具有一个函数,这个函数专门用于操作他的私有成员属性(猫身上的毛),而人则不需要这样的函数(方法),原因是因为没有人类这样的私有成员属性。

那么为了描述这样的关系,我们主要讨论class之间的3中关系。

三种关系

模版方法的UML UML Composite设计模式的UML Prototype的UML
上一篇 下一篇

猜你喜欢

热点阅读