免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP