面向对象C与代码复用实现

c++中的“类”,翻译极烂,完全丢失意义,其英文为class,class的百度翻译如下:

面向对象C与代码复用实现_第1张图片

class翻译为:种类、归类等动作,衍生到opp中,翻译应为:是一个物体的共性描述,应翻译成“物体模板”或“对象模板”,其目的是用于实体对象的创建的。


“对象模板” 的设计思路称为 data abstraction & encapsulation 


一般data通常翻译成数据,也很烂,data百度翻译如下:

面向对象C与代码复用实现_第2张图片

应翻译为资料更妥,衍生为生成资料,或者衍生为数据&结构。

data abstraction :生产资料的抽象化(百度生产资料定义:劳动者进行生产时需要使用的资源和工具),也可以认为是数据结构的抽象化,当然要注意数据& 结构

encapsulation :封装

生产资料抽象化的实现建立在接口和实现分离的基础上,接口的出现实现了抽象化的可能,即它首先把函数入口给抽象化了。而接口和实现分离这一效果被称为封装,封装的意义不是浅层的在于不让外部对象操作内部数据和直接使用内部功能,而是opp意义中,外部对象不能影响内部数据和内部功能,只能通过对象对外的接口影响该对象,这样带来的好处之一是减少耦合,但其主要目的还是用于不能影响内部数据和内部功能,对象之间的互操作只能通过接口实现,这才是彻底的opp,不能穿透对象的接口。

举个片面的例子:就和生物细胞间的相互影响一样,细胞A只能分泌激素透过细胞B的细胞膜去影响细胞B,而不能装备CT设备直接去影响细胞B内的物质和内部功能。


网上看到一个关于封装的粗暴观点,“封装就是指运行的“数据”和“函数”绑定在一起”,看着有点糙,但是感觉也在理,于是我同理认为:

data抽象:函数接口甚至数据接口是抽象的(忽然想到,就是因为数据接口是抽象的,所以才会有c++中多态的存在,因为需要对应不同的“私有数据”进行不同的函数)


一直在思考oop的目的是啥,思考c++中有类的目的是啥。oop的目的在于“对象模板”的“使用”,如c++中面向对象被各种吐槽,各种又违背oop的地方,但就目的来说,c++的oop也是为了oop的使用,同样,我认为c在实现面向对象的实现中更需要倾向于实现“对象模板”的良好使用这一特性上,而不是扣死在实现oop本生特性上。

oop的本质在于的类的衍化、叠级使用,为啥要用oop,因为很多现实广义事情处理方式本质上就是oop,每一层次都干了点部分事情,然后切换成其他级别的对象。。。。


关于c和c++,一个我觉得类似的模型:

以前生产队干活,啥都是大家共享。有个垃圾2B领导下来视察插秧,看到有块水田的水很少,原来是有个地方决了,于是问插秧的农民A,农民A表示他是来插秧的,决口的事情要问犁地农民B,,农民B表示他按正常顺序犁的,可能是犁地农用拖拉机不好,要问维护人员农民C,农名C表示犁地的拖拉机已经还给东边的生产队了,有问题你农民A为什么不早说呢???于是农民A,B,C明年饿死了。。。

后来承包到户了,有个路人路过农民s家的田,看到田里水不够,告诉了一下农民s,农民s马上赶往他家一亩三分地,表示他家的沟决了他自己来,他家的秧苗缺了他自己来,他家的肥料不够了他自己蹲田里,他要是生病了还有他儿子。。。没垃圾2B领导的事情了,产量还年年上升。早这样农民A,B,C就都过着快乐充实的日子了。


还有一个模型:

老板有个项目:招了一个硬件,一个软件,硬件哗哗哗的画好了板子,软件开始猛调,哎!硬件!你的二极管冒烟了,硬件哗哗哗的改了,软件开始猛调,哎!电容炸了,硬件哗哗哗的改了,软件开始猛调,哎!mcu冒烟了。。。OK产品出来了,好快啊,量产了。。。。。。哎。。。。。。怎么运行了一天就要重启才行呢,软件,是你程序问题吧???(硬件嘀咕,其实我少接了一个地,但都量产了,哪里敢说轻易改板子啊,跑路吧。。。)

老板又有个项目:找了个软硬皆通的,先研究样板,再开始硬件,先电源,再最小系统,再软件测试,开始加外围,软件测试。。。。。。。。。好慢啊。。。一步一个脚印。。。每个问题点都清楚。。产品终于出来了,量产。。。稳定。。。


oop:抽象了,也封装了,不谈继承等优点,封装的好处,我目前感觉是责任划清了,就是你的活,找你就行。不用2B领导去问a,问b,问c,不用浪费精力去处理三角关系。

你可能感兴趣的:(面向对象C与代码复用实现)