说“带继承性,你被锁定在编译时关于代码行为的决定”是什么意思。我想知道编译时决策的含义
回答
我建议这个职位从Donal Fellows on Programmers,
一些语言是相当强烈的静态的,只允许两个类之间的继承关系的 规范在 这些类定义的时间。对于C++,定义时间为 几乎与编译时间相同。 (它在 Java和C#中略有不同,但不是很多)。其他语言允许动态重新配置类(以及Javascript中类对象类型的对象)的关系;有些甚至允许修改现有对象的 类,或者改变 类的超类。 (这可能会导致总逻辑混乱,同时也可以 模型现实世界中的脏东西相当不错的。)
但对比这组成,其中一个物体和另一个的 关系不是他们 类定义是很重要的关系(即,他们的类型),而是由参考文献 ,每个关系与另一个。通用组合是一种非常强大而且无处不在的安排对象的方法:当一个对象 需要知道另一个对象时,它会引用该对象并根据需要在其上调用方法。只要你 开始寻找这种超级基本模式,你会发现它绝对无处不在,你会发现它 ;避免它的唯一方法是把所有的 都放在一个对象中,这将会非常愚蠢! (还有更严格的 UML组合/汇聚,但这不是GoF的书是什么 谈论那里。)
一个关于组合关系的事情之一是, 特定对象不需要是硬约束,以彼此。具体对象的 模式非常灵活,即使在非常静态的 语言(如C++)中也是如此。 (让事情非常静态是有好处的: 可以更密切地分析代码,并且至少有可能在更少的开销下发布更好的代码。)回顾一下,与许多其他动态语言一样,可以使用Javascript假装它 根本不使用汇编;当然只是假装,但是基础语言模型不需要转换为固定的中间格式(例如,“磁盘上的二进制可执行文件”)。编译完成的操作在运行时完成,如果事情变化太大,可以轻松重做 。 (迷人的是,这样的编译好的 工作就可以完成,甚至从一个非常有活力的 基础开始...)
一些GOF模式才真正有意义的语言 的背景里的东西是相当稳定。没关系;它只是意味着并不是所有影响模式的力量都必须列出。关于学习模式的一个关键点 是它帮助我们了解这些重要的差异和注意事项。 (其他图案更普遍 保持你的眼睛为这些开放。)
- 1. 我想知道,编译器将如何获得字符序列
- 2. 我如何知道我在编译mac?
- 3. 我想知道MKMapView?
- 4. 我想知道有关编程
- 5. 我想知道所有关于编码
- 6. 我想知道任何RTOS的备份策略
- 7. PInvoke在编译时不知道DLL吗?
- 8. 我想知道SQL命令
- 9. 我想知道在休眠
- 10. 火花集群:我想知道以下错误和可能原因的含义:
- 11. 解决与Windsor的通用接口而不知道编译时的类型?
- 12. 我想知道这个原因和解决方案
- 13. 请帮助我....我想知道如何编写背景扣除
- 14. 我想知道为IntentFilter定义的所有类型的操作?
- 15. 如果我在编译时不知道类,我该如何获得Enum的值?
- 16. 我想知道收费的百分比
- 17. 我想知道的.htaccess规则
- 18. 我想知道代码的输出
- 19. 如何知道'errno'的含义?
- 20. 编译时为什么编译器不知道局部变量的地址?
- 21. 我想知道如何“填充”在CollectLangString中定义的TStings?
- 22. 我怎么知道,我用过哪个编译器
- 23. 好奇,想知道
- 24. 我不知道如何解决我的两个错误之前编译我的程序
- 25. 我想知道我们使用的ide是否包含链接器
- 26. EasyMock:在编译时提供你不知道的参数
- 27. 在编译时知道索引上的static_assert
- 28. 我不知道Python代码中一个字符的含义
- 29. 我不知道什么哈希(#)在zsh中的含义
- 30. 我不知道错误的含义是什么?