免费注册 查看新帖 |

Chinaunix

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

弱弱的问题,c 语言可以模拟多重继承吗?? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2012-02-18 22:42 |只看该作者
OwnWaterloo 发表于 2012-02-18 21:17
原来业界还没有被面向对象玩坏啊?

求细节……

松本行弘就坚持在他的Ruby中搞面向对象,他在《松本行弘的程序世界》中说人们对面向对象有两个误解。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
32 [报告]
发表于 2012-02-18 23:07 |只看该作者
回复 31# KanonInD

每一次,每一次我打算去了解一下ruby的时候,就会看到类似这样的言论:
嘿,ruby里every is an object,看2.add(13)! 其他语言里你可不能这样。

立马就兴致全无了……可以2.add(13)有屌个用啊?


当然,这有可能是社区的人把ruby玩坏了也说不定,松本也许并不是这个意思。
但这也说明了面向对象的一个问题:这术语已经烂大街了,是个谁都可以扯,但没多少人知道自己真正在说什么的东西。
很多人其实没认识到它到底哪里好,或者哪里不好,仅仅是在赶时髦而已……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
33 [报告]
发表于 2012-02-18 23:20 |只看该作者
回复 31# KanonInD

8、两个误解
误解1、对象是对现实世界中具体物体的反映,继承是对物体分类的反映。
结构化编程实现了控制流程的结构化(抛弃goto),但此时要处理的数据还没有结构化,这就是面向对象的作用,即实现了要处理的数据的结构化。最终提高生产率。
最终所有面向对象编程语言都有以下共通功能:
i、不需要知道内部的详细处理就可能进行操作(封装、数据抽象)
ii、根据不同的数据类型自动选择适当的方法(多态性)
所以面向对象是对结构化编程的扩展,对象是否是现实世界中具体物体的反映就不重要的。如字符串、数组等很多没有具体物体相对应。而且即使有对应,也只是描述现有物体部分概念而已。程序不需要实现所有功能,它只是处理抽象数据的。

类是对象的模板,包含两方法特性:类型(类的特征)+模块(即方法)。
继承是利用模块的手段。类之间会存在共同点。避免重复的方法是继承。
继承只不过是抽象的功能利用方法,不必牵强为“继承是对现实事物分类的反映”。

误解2、多重继承是不好的,而Mix-in却很好。
多重继承用得不好就会出问题,并不是本身不好。Mix-in只是实现多重继承的一个技巧而已。Java中接口实际上就是多重继承。

是这段么?

对,这确实是经常出现的误解,尤其是第一个。从来就不应该牵强地将object映射到现实中具体物体,或者相反。
但他后面的话了。

1. 封装,数据抽象并不是面向对象的专利。
2. 至少从smalltalk开始,包括C++,也包括ruby的那种通过某一个参数的类型或者说能力(capacity)进行多态是一种病态。
3. 通过继承实现代码复用,更是bug。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
34 [报告]
发表于 2012-02-18 23:22 |只看该作者
哎,本来还有点小期待的,结果松本也只是如此而已……

论坛徽章:
0
35 [报告]
发表于 2012-02-18 23:46 |只看该作者
回复 33# OwnWaterloo


    面向对象之外,还有哪门技术包含封装+数据抽象?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
36 [报告]
发表于 2012-02-19 00:13 |只看该作者
哎…… 每次一提到OO,总是不够理智……
因为那种"hey everything in X language is an object, cool!"的言论实在是看得心中一股躁动无处发泄……
出言不逊绝对不是针对某些人,要针对也是针对Alan Kay那个弱智而已。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
37 [报告]
发表于 2012-02-19 01:04 |只看该作者
OwnWaterloo 发表于 2012-02-18 23:22
哎,本来还有点小期待的,结果松本也只是如此而已……


对呀,linus不懂C++,松本可能不懂lisp,对不?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
38 [报告]
发表于 2012-02-19 01:20 |只看该作者
回复 38# 塑料袋

嗯,说得很好。

虽然许多object-oriented lisp也搞错了,但也许那是因为lisp变种太多了。
而我见过弄对的两门语言,恰好还都是lisp:common lisp与clojure。

还很戏剧性的是,common lisp的object system经常被认为不是OO的。
而clojure是自己承认不是OO的。

BTW:C++之父也有提议加入multi-dispatch,可惜被否决了。

论坛徽章:
0
39 [报告]
发表于 2012-02-19 08:13 |只看该作者
本帖最后由 三月廿七 于 2012-02-19 08:32 编辑

Java中接口实际上就是多重继承
//Java 的接口 完全等同于 c++的 纯抽象基类(没有成员变量),
   接口扩展 只能扩展 方法,和 多重继承还是有一点区别的。
   
+ 接口的意义不大,不过有两点方便:
   一种强制性约束,比c++的抽象基类约束性要强
   接口集合可以存放实现了该接口的不同类的实例

+ 这些花哨的概念通常把程序搞的一团糟,不花点时间还看不懂作者的意图
   

论坛徽章:
0
40 [报告]
发表于 2012-02-19 08:15 |只看该作者
我还是挺喜欢 Java的, 比 c 简单,也比 c 好象
想要的功能应有尽有,不想要的功能应无尽无
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP