锁定老帖子 主题:面向对象之弊,面向过程之优
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-18
各位,我有个提议,不知道大家听说过一句话没有,宁和明白人打假,莫和糊涂人说话。
各位,还是找个人去打假把,别在这里浪费时间了。 |
|
返回顶楼 | |
发表时间:2010-07-18
世界由成千上万种生物组成...
众生物皆由原子分子组成... 信息的交互在大多数情况下以对象的方式来交互更为形象贴切. 但信息的处理必然是面向过程的. |
|
返回顶楼 | |
发表时间:2010-07-18
PO里, 我们可以把一个对象吹嘘成一个过程
OOP里, 一个过程可以忽悠为一个对象 就像我们人, 是一堆过程组成的对象, 还是一堆对象组成的过程? 这个地球, 太阳早晚也是要灭亡, 这是一个过程? 还是一个对象? 这是一个过程! 也是一个对象!(觉得有点像佛理了...汗) 最后, 让面向过程还是面向对象见鬼去吧! 老子只是想活得痛快点而已 |
|
返回顶楼 | |
发表时间:2010-07-18
subwayline13 写道 lonelybug 写道 嗯,你是该好好看看design patterns原著的开篇介绍了! 好奇问问php那么灵活,请问如何实现singleton设计模式? 最后告诉你,设计模式跟Java没有直接关系,设计模式就是设计模式,就连design patterns这本书中的例子也很好用Java去做。 一帮做外包天天SSH的,发这么多口水帖子干啥,我很奇怪! 设计模式受到语言的影响,singleton对于PHP来说和JAVA不一样,因为请求结束后会回收所有的资源。书上有跟语言无关就真无关吗?尽信书不如无书。 写段PHP代码吧 class Class1 { private static $instance; private function Class1(){ $ip = $_SERVER["REMOTE_ADDR"]; $time = date("Y-m-d H:i:s", time()); $myfile = 'F:/statistic.txt'; $str = "ip='".$ip."' time='".$time."'\r\n"; $file_pointer = fopen($myfile,"a"); fwrite($file_pointer,$str); fclose($file_pointer); } public function test() { echo "Hello World!<br />"; } public static function singleton() { if (!isset(self::$instance)) { self::$instance = new Class1(); } return self::$instance; } } $class1 = Class1::singleton(); $class1->test(); $class2 = Class1::singleton(); $class2->test(); $class3 = Class1::singleton(); $class3->test(); 刷新几下打开记事本看看 引用 ip='127.0.0.1' time='2010-07-18 21:33:38' ip='127.0.0.1' time='2010-07-18 21:33:46' ip='127.0.0.1' time='2010-07-18 21:34:58' ip='127.0.0.1' time='2010-07-18 21:34:59' 为啥某些人抱怨PHP捏?以为singleton了,资源初始化一次就万事OK了,其实每次请求都初始化一遍。讨论这个又歪楼了。 哈哈哈,我服了,我没办法跟这么一帮糊涂蛋讨论明白人的事情。 所以,我决定退出这个讨论,在说话,我就是王八。 最后的最后说一下你这个php代码,我帮你简化一下,你这个部叫做singleton模式。你这个就叫做局部变量。 你运行,打开一个笔记本一样可以得到。 singleton就是指初始化一边,谁告诉你singleton每次都从新初始化一边了?你连最基本的内存指针都不知道么?我真不知道你们这帮人舔着脸在这里讨论什么呢?你要是去C S D N,我估计,你就该被前辈们活活骂死。 $ip = $_SERVER["REMOTE_ADDR"]; $time = date("Y-m-d H:i:s", time()); $myfile = 'F:/statistic.txt'; $time = date("Y-m-d H:i:s", time()); $str = $str."ip='".$ip."' time='".$time."'\r\n"; $time = date("Y-m-d H:i:s", time()); $str = $str."ip='".$ip."' time='".$time."'\r\n"; $time = date("Y-m-d H:i:s", time()); $str = $str."ip='".$ip."' time='".$time."'\r\n"; $file_pointer = fopen($myfile,"a"); fwrite($file_pointer,$str); fclose($file_pointer); |
|
返回顶楼 | |
发表时间:2010-07-19
OO 出现的时候,打的旗号是可以弥合现实世界和开发世界之间的裂缝。怎么弥合?按OO布道者的说法,非常简单:把现实世界的对象映射为开发世界的对象就行了。比如,现实世界的人,映射为程序里面的 Class Person。
但是,现在的OO程序里面,满目的×××Manager、×××Factory、×××Helper 类,和现实世界的什么对象做了对应?没有,只是和脑袋里的对象对应。 所以,OOA之类都是瞎扯,OO什么都提供不了,除了提供了一些新的解耦技巧。但相比OP,也不见得全面优越。只是在某些场合也许有用。 因此,不要迷信OO,OO只是技巧层面的东西,有用时拿来用就好了,开发时OO也行,OP也行,OO、OP混搭也行,只要合适。 |
|
返回顶楼 | |
发表时间:2010-07-19
又是语言思想之争,显然我觉得否定或者肯定一个东西,不能靠几个例子,或者说显示某 些缺点的示例来说明,所谓尺有所长,寸有所短,如果用OO来开发底层或者嵌入式的系统,显然没有什么优势,但是如果用来C/S的GUI的开发,复杂业务系统的开发,优势还是显而易见的。
中国传统的观点,“中庸”,我的个人理解,就是取得一个“平衡点”。 |
|
返回顶楼 | |
发表时间:2010-07-19
JE帐号 写道 我被很多人雷到了...
OO是一种认识问题的思想.他与实现技巧没什么关系.所以LZ举的回调函数的注册,包括某楼说的什么GO没有继承之类的,和OO无关.最多是和Java有关.而像有人举的C#的实现,更多的类似语法糖而已. OO从来不是作为真理出现的,OO仅仅是我们使用程序去映射现实的一个比较好的实践. 所以你去讨论OO,应该是去讨论OO对处理哪些场景有很大帮助,哪些场景下却显得力不从心.而不是揪着个语言,说这不好那不好. 那任何高级语言还都是机器语的语法糖呢,语法糖才能让计算语言更像人类的自然语言,一颗语法糖,背后还多少伟大的工程师在编译器下做出多少功课。 本来举C#,就是告诉楼主,某种语言是有其特殊性的,尤其是以java这样进步缓慢的语言。 |
|
返回顶楼 | |
发表时间:2010-07-19
楼主有避重就轻的嫌疑呀。
何为面向对象? 不得不说封装,继承,多态。 楼主把面向对象海面以下的代码拿出来与过程相比。。。 纠结。。。。 面向对象的大部分思想在面向过程中也能体现 但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。 再次纠结。。。。 |
|
返回顶楼 | |
发表时间:2010-07-19
lyy3323 写道 楼主有避重就轻的嫌疑呀。
何为面向对象? 不得不说封装,继承,多态。 楼主把面向对象海面以下的代码拿出来与过程相比。。。 纠结。。。。 面向对象的大部分思想在面向过程中也能体现 但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。 再次纠结。。。。 扯淡,看看linux用什么写的。 |
|
返回顶楼 | |
发表时间:2010-07-19
lyy3323 写道 楼主有避重就轻的嫌疑呀。
何为面向对象? 不得不说封装,继承,多态。 楼主把面向对象海面以下的代码拿出来与过程相比。。。 纠结。。。。 面向对象的大部分思想在面向过程中也能体现 但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。 再次纠结。。。。 你从哪里得来面向过程将无法应付,最终导致系统的崩溃 的结果的,臆测居多吧,还是看着书上这么写你就这么说阿。Unix复杂不?面向对象了吗?Unix崩溃了吗?怕是windows崩溃得更加的常见吧 |
|
返回顶楼 | |