本文发表在 rolia.net 枫下论坛》class定义了object的layout, object包含着method的实现,为了使用method必须先创建一个object,这就是所谓的OO。
class定义的是object的type。“object包含着method的实现,为了使用method必须先创建一个object”,这个陈述不算严谨,但是也可以接受。不过,这不是OO,只是OO的一个特性。OO的关键是数据和method的结合和封装。
》OO 说一切都是object, 然后又说object 包含data及操作这些data的methods.对于同样一组数据和方法,不同的人会写出不同数量的类,OO 的随意性可见是多么的大。
》如果我想绕开object的创建,直接从class就能得到method,这好像就成了C++里面的static function.
如果要绕开object,直接用C里的函数就好了,没必要在创建另一个ugly的非OO的方式。既然要绕开OO,又何必用什么OO里的class呢?加到class里面,无非给人一种封装的错觉,然后,每一本C++入门书都要花至少一章纠正这种错觉。
》C++支持的东西太多,让人有点儿迷惑。假如我把一个函数同时放在三种地方:一个以静态函数的形式放在多个class里面,一个全局函数,一个放在多个namespace里面,尽管函数体是一模一样的,我能否说它们是一样的呢?我不大清楚C++ compiler是怎样区别这些函数的,是简单实用name mangling, 或是自动添加不同的type涅,或者说想怎么实现就怎么实现,没啥标准。
》再绕回来看OO,一个class包含data (member variable)和method(s),那好,我定义一个class,其member variables是函数指针,那么这个时候,数据和方法并没有本质区别,OO 似乎也就毫无优势可言,对不对?
不好意思,没看明白。
》我想说的是数据和方法没有区别。
》functional programming 说一切都是函数,我觉得更有道理一些。要不咱这样,function也是一种object,可以动态创建。比方说,在C++里面,咱也可以new某个function,如何?
把function做为object,还是OO,不是functional programming。functional programming是把function作为first class citizen,比如Lisp。在C里面,如果用functional programming的paradigm的话,可以用函数指针。
》我想要的是在程序运行时,动态生成函数的多个copy,也就是说在程序运行当中一个函数的代码段可以被任意复制。
我觉得咱这是纯理论忽悠,跟实际应用相去甚远。更多精彩文章及讨论,请光临枫下论坛 rolia.net
class定义的是object的type。“object包含着method的实现,为了使用method必须先创建一个object”,这个陈述不算严谨,但是也可以接受。不过,这不是OO,只是OO的一个特性。OO的关键是数据和method的结合和封装。
》OO 说一切都是object, 然后又说object 包含data及操作这些data的methods.对于同样一组数据和方法,不同的人会写出不同数量的类,OO 的随意性可见是多么的大。
》如果我想绕开object的创建,直接从class就能得到method,这好像就成了C++里面的static function.
如果要绕开object,直接用C里的函数就好了,没必要在创建另一个ugly的非OO的方式。既然要绕开OO,又何必用什么OO里的class呢?加到class里面,无非给人一种封装的错觉,然后,每一本C++入门书都要花至少一章纠正这种错觉。
》C++支持的东西太多,让人有点儿迷惑。假如我把一个函数同时放在三种地方:一个以静态函数的形式放在多个class里面,一个全局函数,一个放在多个namespace里面,尽管函数体是一模一样的,我能否说它们是一样的呢?我不大清楚C++ compiler是怎样区别这些函数的,是简单实用name mangling, 或是自动添加不同的type涅,或者说想怎么实现就怎么实现,没啥标准。
》再绕回来看OO,一个class包含data (member variable)和method(s),那好,我定义一个class,其member variables是函数指针,那么这个时候,数据和方法并没有本质区别,OO 似乎也就毫无优势可言,对不对?
不好意思,没看明白。
》我想说的是数据和方法没有区别。
》functional programming 说一切都是函数,我觉得更有道理一些。要不咱这样,function也是一种object,可以动态创建。比方说,在C++里面,咱也可以new某个function,如何?
把function做为object,还是OO,不是functional programming。functional programming是把function作为first class citizen,比如Lisp。在C里面,如果用functional programming的paradigm的话,可以用函数指针。
》我想要的是在程序运行时,动态生成函数的多个copy,也就是说在程序运行当中一个函数的代码段可以被任意复制。
我觉得咱这是纯理论忽悠,跟实际应用相去甚远。更多精彩文章及讨论,请光临枫下论坛 rolia.net