本文发表在 rolia.net 枫下论坛》class定义了object的layout, object包含着method的实现,为了使用method必须先创建一个object,这就是所谓的OO。
class定义的是object的type。“object包含着method的实现,为了使用method必须先创建一个object”,这个陈述不算严谨,但是也可以接受。不过,这不是OO,只是OO的一个特性。OO的关键是数据和method的结合和封装。
》如果我想绕开object的创建,直接从class就能得到method,这好像就成了C++里面的static function.
如果要绕开object,直接用C里的函数就好了,没必要在创建另一个ugly的非OO的方式。既然要绕开OO,又何必用什么OO里的class呢?加到class里面,无非给人一种封装的错觉,然后,每一本C++入门书都要花至少一章纠正这种错觉。
》再绕回来看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的话,可以用函数指针。更多精彩文章及讨论,请光临枫下论坛 rolia.net
class定义的是object的type。“object包含着method的实现,为了使用method必须先创建一个object”,这个陈述不算严谨,但是也可以接受。不过,这不是OO,只是OO的一个特性。OO的关键是数据和method的结合和封装。
》如果我想绕开object的创建,直接从class就能得到method,这好像就成了C++里面的static function.
如果要绕开object,直接用C里的函数就好了,没必要在创建另一个ugly的非OO的方式。既然要绕开OO,又何必用什么OO里的class呢?加到class里面,无非给人一种封装的错觉,然后,每一本C++入门书都要花至少一章纠正这种错觉。
》再绕回来看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的话,可以用函数指针。更多精彩文章及讨论,请光临枫下论坛 rolia.net