继承和动态规划的危险

Posted 郑哲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承和动态规划的危险相关的知识,希望对你有一定的参考价值。

1.面向对象的编程中,我们希望尽可能减少类之间的依赖行。这样能让类更加强健,更加容易维护。

但继承却与次背道而驰。

每个派生类十分依赖它的基类(或多个类),如果基类的接口发生改动,所以派生类都不得不为了适应基类的接口而改动。

(这是我们为什么总力争设计出几乎无需修改的基类)

 

2.动态绑定的开销。非虚方法在编译时绑定(即在编译时便已知被调用的函数),因此不存在运行时函数调用的相关开销;

C++中动态绑定的方法存在一项固定开销---通常是4-5条汇编语言指令。

 

包含虚函数声明的每个类对象都存在相关的大小开销。这项开销通常来源于一个额外的指针(C++中的vptr,本章稍后讨论)。

根据实现(和处理器),指针在32位机器上通常需要4个字节。因此,对象的大小以4字节递增。这种递增看起来无关紧要,

但它确实存在。这项开销在使用大量(成千上万)对象时便显而易见,这可能导致虚拟内存分页,从而影响了程序的性能;

对于大型项目而言,额外指针的开销几乎可以忽略不计。

 

3.软件的复杂性:

使用类层次和框架显然会增加系统的复杂程度。必须要充分理解,才能正确地使用它们。也就是说,使用它们增加了初学者的学习难度。

而且要设计这些层次也绝非易事。

 

但继承确实由很多好处,充分利用利完全大于弊

以上是关于继承和动态规划的危险的主要内容,如果未能解决你的问题,请参考以下文章

[SinGuLaRiTy] 动态规划题目复习

动态规划分析总结——怎样设计和实现动态规划算法

关于动态规划算法,哪位可以讲一下自己心得体会?

递归与动态规划

动态规划中控制和预测部分的区别是

左程云-递归和动态规划