乌大湿胡扯教程——扯扯函数、类、命名空间、面向对象编程


今天先从一个简单的问题谈起。

问题:为什么要写类?

答:面向对象编程就要写类啊。难道还面向过程写啊。

问题:为什么要面向对象?

答:面向对象好啊,面向过程过时了。


可能有的朋友,参加的培训班,或者跟了某个大神师父,那些讲师和大神都会教大家,现在编程就要面向对象,不要面向过程了。但新手朋友们,什么叫面向对象?什么叫面向过程?

写了类就叫面向对象?没写类就是面向过程?


你们老师怎么教,你们师父怎么教,是与我无关的,我也不知道他们做得对不对,只是我与很多新手交流的时候,发现他们只懂搬出老师说过的话,没听出他们有自己的看法。

今天大湿就扯一个“历史”,或者能帮助一些朋友纠正错误的理解或者加深理解。好,故事开始。

从前,有一个人。。。。。。怎么这么熟悉的开场白。。。。。。

原来开个头也这么难,再来一次,

在很久很久以前,编程没有什么命名空间,没有什么面向对象,一个程序,就是从头到尾一行一行地写。程序猿写了很久,有一种感觉,越写越强烈,

就是:刚刚写的这几行,怎么感觉写过很多次了?难道出现幻觉了?

经过翻查,果然,很多地方都出现过相同或者相似的代码,程序猿凭着自己的直觉,这些相同的代码,以后还会需要用到,要是有一个办法,当需要用到的时候,很简单地就能使用上,那就好了。

没错,那个办法就是。。。。。。。。拷贝粘贴。。。。。(看看有身边的观众有没有晕倒的,帮忙叫醒一下)


当然了,拷贝粘贴是解决不了的,因为很多个不同的代码段都需要重复使用,拷贝粘贴还要来回找到代码拷贝,所以,响应程序猿的呼唤,子过程产生了。

对,就是叫子过程。


刚开始的时候,子过程只是将代码完完全全地打包,调用的时候,就相当完完全全地粘贴,

这样,在调用子过程的时候,要事先将子过程会使用到的变量先声明好,赋好值,

明显,这样很累,很可能需要复用这段程序的时候,变量名有可能不一样,因此,“参数”诞生了。

(很多大神是教,函数就是可以有参数,要传值给函数,就要用参数。没说到本质的东西,还是让人难理解为什么要参数)


为了避免 子过程对原程序的影响,子过程运行时,另外开辟内存,因此,从主程序到子过程的数据,主要就通过参数传递进去了。

但是,又出现了另外一个问题,子过程处理的结果,主程序还需要用到呢?

由此,子过程将处理结果归还主程序的操作,就是return,“函数”诞生了。

有某些语言里,有返回的叫函数,没返回的叫过程;没在某些语言里,没有“过程”的概念,一律都叫函数。

我们人多了,名字相同,已经是常事了。但是,在程序里,函数名相同了,就会冲突,报错的。

程序猿不停地写,函数越来越多,因此,函数的命名就成为了程序猿头痛的事情了。

如果能把若干个函数打个包,给包起个名,不同的包里相同的函数名,就可以区分开了,类诞生了。


哪些函数跟哪些函数放在一个类里呢?也些函数跟哪些函数不能放在一起呢?

猿们想到,按照某个物体(对象)来划分,想相关的函数都放在一个类,并以这个物体来给类命名。这就是面向对象思维。

当然,这种划分标准,不是唯一的,也就是说,面向对象编程不是唯一正确合理的方式。


使用类,虽然能很有效地缓解了函数名冲突的问题,

但随着程序猿的不停开发、程序猿越来越多,类也慢慢地多起来,

类名冲突也像当年函数名冲突一样。

聪明的程序猿们,想到了像文件夹存放文件一样,给类也打包,包还可以打包,一层一层的包,这就是命名空间。


历史说完了。整个历史,共同的目的是什么?那些产物都解决了什么问题?

共同目的是为了使代码复用。那些产物都解决了冲突问题。


再来问开始的那个问题:为什么要写类?为什么要面向对象?


更多大湿心得,请关注大湿个人网站http://www.5dphp.com/

Q群号:93701629 欢迎加入Q群与大家交流,相互学习,共同进步。