论坛首页 综合技术论坛

面向对象之弊,面向过程之优

浏览 49259 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-18  
各位,我有个提议,不知道大家听说过一句话没有,宁和明白人打假,莫和糊涂人说话。

各位,还是找个人去打假把,别在这里浪费时间了。
0 请登录后投票
   发表时间:2010-07-18  
世界由成千上万种生物组成...
众生物皆由原子分子组成...

信息的交互在大多数情况下以对象的方式来交互更为形象贴切.
但信息的处理必然是面向过程的.
0 请登录后投票
   发表时间:2010-07-18  
PO里, 我们可以把一个对象吹嘘成一个过程
OOP里, 一个过程可以忽悠为一个对象

就像我们人, 是一堆过程组成的对象, 还是一堆对象组成的过程?
这个地球, 太阳早晚也是要灭亡,
这是一个过程? 还是一个对象?
这是一个过程! 也是一个对象!(觉得有点像佛理了...汗)

最后, 让面向过程还是面向对象见鬼去吧!
老子只是想活得痛快点而已
0 请登录后投票
   发表时间: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);


0 请登录后投票
   发表时间:2010-07-19  
OO 出现的时候,打的旗号是可以弥合现实世界和开发世界之间的裂缝。怎么弥合?按OO布道者的说法,非常简单:把现实世界的对象映射为开发世界的对象就行了。比如,现实世界的人,映射为程序里面的 Class Person。
但是,现在的OO程序里面,满目的×××Manager、×××Factory、×××Helper 类,和现实世界的什么对象做了对应?没有,只是和脑袋里的对象对应。
所以,OOA之类都是瞎扯,OO什么都提供不了,除了提供了一些新的解耦技巧。但相比OP,也不见得全面优越。只是在某些场合也许有用。
因此,不要迷信OO,OO只是技巧层面的东西,有用时拿来用就好了,开发时OO也行,OP也行,OO、OP混搭也行,只要合适。
0 请登录后投票
   发表时间:2010-07-19  
  又是语言思想之争,显然我觉得否定或者肯定一个东西,不能靠几个例子,或者说显示某 些缺点的示例来说明,所谓尺有所长,寸有所短,如果用OO来开发底层或者嵌入式的系统,显然没有什么优势,但是如果用来C/S的GUI的开发,复杂业务系统的开发,优势还是显而易见的。
  中国传统的观点,“中庸”,我的个人理解,就是取得一个“平衡点”。
0 请登录后投票
   发表时间:2010-07-19  
JE帐号 写道
我被很多人雷到了...
OO是一种认识问题的思想.他与实现技巧没什么关系.所以LZ举的回调函数的注册,包括某楼说的什么GO没有继承之类的,和OO无关.最多是和Java有关.而像有人举的C#的实现,更多的类似语法糖而已.
OO从来不是作为真理出现的,OO仅仅是我们使用程序去映射现实的一个比较好的实践.
所以你去讨论OO,应该是去讨论OO对处理哪些场景有很大帮助,哪些场景下却显得力不从心.而不是揪着个语言,说这不好那不好.




那任何高级语言还都是机器语的语法糖呢,语法糖才能让计算语言更像人类的自然语言,一颗语法糖,背后还多少伟大的工程师在编译器下做出多少功课。

本来举C#,就是告诉楼主,某种语言是有其特殊性的,尤其是以java这样进步缓慢的语言。
0 请登录后投票
   发表时间:2010-07-19  
楼主有避重就轻的嫌疑呀。
何为面向对象?
不得不说封装,继承,多态。
楼主把面向对象海面以下的代码拿出来与过程相比。。。
纠结。。。。
面向对象的大部分思想在面向过程中也能体现 
但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。
再次纠结。。。。
0 请登录后投票
   发表时间:2010-07-19  
lyy3323 写道
楼主有避重就轻的嫌疑呀。
何为面向对象?
不得不说封装,继承,多态。
楼主把面向对象海面以下的代码拿出来与过程相比。。。
纠结。。。。
面向对象的大部分思想在面向过程中也能体现 
但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。
再次纠结。。。。


扯淡,看看linux用什么写的。
0 请登录后投票
   发表时间:2010-07-19  
lyy3323 写道
楼主有避重就轻的嫌疑呀。
何为面向对象?
不得不说封装,继承,多态。
楼主把面向对象海面以下的代码拿出来与过程相比。。。
纠结。。。。
面向对象的大部分思想在面向过程中也能体现 
但面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 。
再次纠结。。。。


你从哪里得来面向过程将无法应付,最终导致系统的崩溃 的结果的,臆测居多吧,还是看着书上这么写你就这么说阿。Unix复杂不?面向对象了吗?Unix崩溃了吗?怕是windows崩溃得更加的常见吧
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics