免费注册 查看新帖 |

Chinaunix

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

[C] 思考题:语言是工具?重要是思想?那如何表达思想?(修改版) [复制链接]

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
131 [报告]
发表于 2012-07-14 19:14 |只看该作者
语言是表述思维的工具

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

时间有点久了……如果没记错的话,这贴选polymorphism作为例子的动机并不是很纯洁……是个坑……所以你这样我会问心有愧的……

记得当时论坛上又开始OO来OO去了。
所以此帖目的之一是想将一些被OO(或者说被某些语言的OO、这里也包括C++)玩坏了的人吸引进来。
当他们见到自己熟悉的那些东西并为之感到自豪时再用double dispatch泼冷水。
对那些被design pattern玩坏了的、提出visitor pattern的人,再用multiple dispatch继续泼。射一脸。

从结果来看……应该不是没人上当,而是被OO玩坏的人也就只会当那几个口号的复读机,都是战斗力不足5的渣渣。

论坛徽章:
0
133 [报告]
发表于 2012-07-15 10:32 |只看该作者
本帖最后由 KanonInD 于 2012-07-15 11:00 编辑

回复 108# 狗蛋
如果嫌这个还不够刺激的话,人会说话,哑巴是人吗?人有四肢,独臂神尼是人吗?人有心跳,死人能不能告诉我他心

跳3下需要多少时间?

要在面向对象的框架里面解决这个问题,除了让人这个基类什么都不会(因而多态也就成了摆设)之外,恐怕就只能搞

一些诘屈聱牙的东东打补丁了。这也是复杂性爆炸的一个原因。
当然,这问题用接口(speakable)之类,解决起来就很容易了。
但,不同类的speakable实现可能不太一样:比如聋子说话声音会大、还会吐字不清、口型比较夸张。这样如果每个类

都重写speakable的话,继承还有什么作用?
不想重写,难道从聋子和左腿残疾多重继承,以便让一个左腿残疾的聋子说话?嗯嗯,当然,左腿残疾还要从活人继承

——从死人继承的左腿残疾貌似也是不可或缺的:这可关系到“滑落的力学分析”和走路的姿势,其中前者死活都一样

而后者不同……

好吧,咱不玩了好吧?你没崩溃我都要崩溃了……

想让子类缺少父类的某个方法吗?Ruby的开放类可以打开一个现成的类,向其添加、删除、修改其方法,可以将一个现成的类改得面目全非。
例如:
  1. #!/usr/bin/ruby
  2. # -*- coding: utf-8 -*-

  3. class Base
  4.   def method1
  5.     puts "do method1..."
  6.   end

  7.   def method2
  8.     puts "do method2..."
  9.   end
  10. end

  11. class SubClass < Base
  12.   def method3
  13.     puts "do method3..."
  14.   end
  15. end

  16. c = SubClass.new
  17. c.method1
  18. c.method2
  19. c.method3

  20. class SubClass #打开SubClass
  21.   undef method2  # 去除 method2
  22. end

  23. c.method1
  24. c.method2 # method2 已去除,所以出错了。
  25. c.method3
复制代码

论坛徽章:
0
134 [报告]
发表于 2012-07-16 09:59 |只看该作者
有时间好好看一下这帖子。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP