免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: art_codes
打印 上一主题 下一主题

[C++] 确认一下c++中不能使用interface(如java)那样的功能把 [复制链接]

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
411 [报告]
发表于 2009-03-31 13:13 |只看该作者
事实上,我认为,其实正是OO语言搞的那套OO协议把大家给引偏了,不再以深刻的思考和抽象去达成封装、继承和多态这个目标,而是以为协议强制出来的那种封装、继承和多态的表象就是要达到的目标本身。

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
412 [报告]
发表于 2009-03-31 13:19 |只看该作者
刘德华反串女角扮演芙蓉姐姐,他还是刘德华;芙蓉姐姐扮成刘德华的模样假唱《忘情水》,她仍然是芙蓉姐姐。

同样,泛文件设计不穿OO的外衣,它也100%达到了OO的目标;
很多写了无数class用了无数设计模式拿Java这样纯种的OO语言搞出来的系统,仍然可能是个连结构化目标都没达到的垃圾。


甚至于,林依伦浓重的鼻音被无数他的歌迷喜爱;但大家是因为他的歌而喜欢上了鼻音而不是因为鼻音才喜欢上了他的歌。

越模仿他的鼻音,你的歌声也就越发无法让除了林的少部分fans以外的人接受。这就叫病态的爱好。

OO和抽象,也是同样的关系。
好的抽象应该达到OO三要素的程度;而刻意模拟甚至强制出来的OO三要素,仅仅是个拙劣的模仿。

OO给人一种假象,好像一旦用了OO语言提供的OO协议,这个设计自然而然就具备了OO三要素,接下来只需要搞一些繁文缛节的宗教礼仪就够了;甚至进而完全抛弃了抽象,拿着对象发现方法论随便一对付就以为三要素已经满足了,然后就完全钻到繁文缛节里研究更高深的学问去了。

[ 本帖最后由 shan_ghost 于 2009-3-31 13:31 编辑 ]

论坛徽章:
0
413 [报告]
发表于 2009-03-31 13:41 |只看该作者
原帖由 OwnWaterloo 于 2009-3-30 22:06 发表


不好的地方是如下这些吗?



C++不好的地方可以专门写本书 .
坦言,俺反感C++的主要原因是C++的连接器不友好造成的,倒不是所谓的OO问题,举个简单例子,一个函数模板foo<...>,在A库中被实例话foo<int>,在B库中也实例化foo<int>.因此A,B中各有一份实例化的foo<int>,我搞不懂同时连接A,B两个库时咋办,连接器不会报错吗?或者说编译器为由模板实例化的函数自动添加static内部连接属性,这样不会造成二进制文件体积爆炸式膨胀吗?这个问题还真搞不懂,请你指点了

原帖由 OwnWaterloo 于 2009-3-30 22:06 发表

全面否定?  只是否定其效率吧?  同时C在这方面也难免不会被否定。


否定C++在效率与特性之间的平衡,进而全面否定C++.
C语言根本就没啥特性,也就没有否定的一说.
如果C++,C全迁移到jvm平台上,你会发现C是一本特性很少很少的语言,而C++是一门设计愚蠢的语言(注意,俺说是如果迁移到jvm上)

原帖由 OwnWaterloo 于 2009-3-30 22:06 发表

2. 突破能达到什么水平?
性能完全超越仅静态优化的C/C++ ?
或者, 和C/C++持平? 还是接近?

俺前边提到过超线性并行受益吧,我觉得既然有些优化是不可能在编译时进行的,这里也存在一个超线性的问题,没准会超过C++.参考前边说过的那个脚本语言快过C++的例子

原帖由 OwnWaterloo 于 2009-3-30 22:06 发表

3. C++标准没有说优化必须采用静态优化。
多态如何实现, 没有说。
模板仅说了必须遵守单一定义原则。


C语言标准里还没有些必须静态优化呢,我说的问题是C++为了静态优化裁减了很多OO特性


另外,在引用Art of Unix Programming里一个观点.假设越多,错的越厉害.C的生命里就在于C标准里假设很少.反观C++,在选取特性的时候做了太多假设

原帖由 艾斯尼勒 于 2009-3-31 13:04 发表



好帖。分析的很透彻。收了

恩。一个由java引起的口水帖中途回归了C版的C/C++的阵地。现在又讨论到了OO的设计和实现问题。
很好很强大。

另外,诚如大R所言,shan_ghost好像搞混了OO的思想表达和语法表达之间的差距


不要乱叫,俺算晚辈的
另外是shan_ghost启发了我,
最后发现

原帖由 flw 于 2009-3-31 12:35 发表

你把抽象和 OO 搞混了。

这种成了精的老家伙很厉害

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
414 [报告]
发表于 2009-03-31 13:58 |只看该作者
总结一下:

1、面向对象程序设计本质上是一种抽象准则,达到这个准则的系统就是可重用、易维护、易扩充的

2、要达到面向对象的高度,并不一定需要任何流行的面向对象协议里用到的技术。

3、所谓面向对象语言,其实是一种提供了一套可以表达面向对象设计思想关键要素的协议的编程语言

4、使用面向对象协议,你可以让任何垃圾表现出面向对象的三要素;但它们仍然是垃圾


有个笑话说,古代一大哲学家,好像是柏拉图吧,说人是什么?人就是无毛的直立行走的两足动物。结果他的学生就把一只拔光毛的鸡扔他面前,说这就是人

人是面向对象的话,柏拉图关于人的定义就是面向对象协议,而扒光毛的鸡符合所有柏拉图关于人所定的指标。

同样,泛文件是面向对象的,C++/Java定义了一组面向对象的协议,然后fans们仔细研究着这个协议的点点滴滴,搞出了一只又一只无毛鸡;并且越是研究到细枝末节,越是容易搞出无毛鸡。

[ 本帖最后由 shan_ghost 于 2009-3-31 14:00 编辑 ]

论坛徽章:
0
415 [报告]
发表于 2009-03-31 14:08 |只看该作者
同样,泛文件是面向对象的,C++/Java定义了一组面向对象的协议,然后fans们仔细研究着这个协议的点点滴滴,搞出了一只又一只无毛鸡。

呵呵,有意思 ,正确与否不说,单单能博大伙一乐,
楼上就功德无量!!

[ 本帖最后由 windyrobin 于 2009-3-31 14:16 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
416 [报告]
发表于 2009-03-31 14:09 |只看该作者
别本质本质的,C 程序员的最大的毛病就是喜欢说“本质上”。你的本质还是碳水化合物呢。
本质和表象是不可分隔的整体。

抽象有很多种方法,OO 只不过是其中一种。
你用别的方法达到了 OO 想要达到的目的,这并不能说明这种方法就是 OO。
OO 是有血有肉的,讨论 OO 的时候,不要跑题太远。
学术一点好不好。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
417 [报告]
发表于 2009-03-31 14:13 |只看该作者
原帖由 OwnWaterloo 于 2009-3-31 12:45 发表
flw大大能回复一下我在39页, 382楼的帖子么?
谢谢~~~

你们的讨论我一直都在看。
你那个回复我也看到了,说实话,太高深,我看不懂。所以就没回复。

BTW:欢迎到 FP 版交流。

论坛徽章:
0
418 [报告]
发表于 2009-03-31 14:23 |只看该作者
原帖由 flw 于 2009-3-31 14:09 发表
本质和表象是不可分隔的整体。


曾经有老中医说中医科学化:“我们研究的就是象。抽象抽象,你把象抽了,我们还能研究什么?”

[ 本帖最后由 swxlion 于 2009-3-31 14:25 编辑 ]

论坛徽章:
0
419 [报告]
发表于 2009-03-31 14:29 |只看该作者
真可谓殊途同归,最后归于哲学

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
420 [报告]
发表于 2009-03-31 15:07 |只看该作者
原帖由 flw 于 2009-3-31 14:09 发表
别本质本质的,C 程序员的最大的毛病就是喜欢说“本质上”。你的本质还是碳水化合物呢。
本质和表象是不可分隔的整体。

抽象有很多种方法,OO 只不过是其中一种。
你用别的方法达到了 OO 想要达到的目的, ...


看问题的角度不同而已。

http://en.wikipedia.org/wiki/Object_oriented
Object-oriented programming (OOP) is a programming paradigm that uses "objects" and their interactions to design applications and computer programs. Programming techniques may include features such as information hiding, data abstraction, encapsulation, modularity, polymorphism, and inheritance. It was not commonly used in mainstream software application development until the early 1990s. Many modern programming languages now support OOP.

如上,如果抠字眼的话,一个文件描述符就代表着一个文件对象(对象);这个文件对象可以通过fwrite/fread方法来访问和操作(方法),这两个接口也只能操纵文件描述符(或代表文件描述符的句柄);除了基本的文件描述符区域,特定的设备文件还有自己特定的数据区,可以通过相对应的xxctl类接口操纵这些特殊区域(继承)……

请问,这个表述是否符合面向对象标准?
现在我把它的设计完全用面向对象的术语描述出来,然后再用C实现一遍,即使最终源代码一模一样,也是前者绝对不是面向对象而后来的实现才是面向对象的,哪怕它们最终写出的源码一模一样?

或者说,只有使用面向对象术语,才算“正宗”的面向对象,否则就是名不正言不顺、更不是主观上故意向面向对象靠拢的,自然就不能算面向对象?

或者,你的意思是: 必须先照着OOC之类教材搞出个C模拟OO框架出来,然后用这个框架搭建才叫面向对象?

不妨看看GTK+,看看它没有模拟任何面向对象关键字和语法,它的作者是否时时处处都受着面向对象的影响?它的整体设计是不是面向对象的?

我想,你的意思总不会是不用面向对象语言就写不出面向对象程序吧?



事实上,我认为你完全没有理解我的意思。

我的意思就是说:
虽然设计时还没有面向对象概念,但从面向对象的角度去看,泛文件设计称得上是真正的面向对象。
只有从那些并非刻意要面向对象的系统出发去发现它们的优点,并找到面向对象的对应物,这才有可能真正理解面向对象最基本最重要的是什么,才能真正朴素的认识到面向对象的好处;也才知道面向对象要抽象的究竟是什么。

相反,嚷嚷了很久面向对象,熟记了很多术语特性特殊用法,究竟为了什么?就为了争执生僻语言特性?!

[ 本帖最后由 shan_ghost 于 2009-3-31 15:10 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP