请教多态的优势到底在哪里啊
发布时间:2011-06-18 09:24:42 文章来源:www.iduyao.cn 采编人员:星星草
请问多态的优势到底在哪里啊?
比如,Derivate继承自Base,有个虚函数fun()。
Base A; Derivate B,C;
A *a;
Switch(ConditionPara)
{
case ConditonA:
a = new A;
case ConditionB:
a = new B;
break;
case ConditionC:
a = new C;
break;
}
a->fun();
上述代码感觉跟不用多态的功能差不多啊。
Base A; Derivate B,C;
Switch(ConditionPara)
{
case ConditonA:
A a;
a.fun()
break;
case ConditionB:
B b;
b.fun()
break;
case ConditionC:
C c;
c.fun();
break;
}
感觉上述两个实现都差不多啊。而且,第二种看起来更直接,多态的优势在哪里啊?????
------解决方案--------------------
如果一上来就拿出A类型、B类型这类不“自然”的代码示例,或者像有些人那样为了复用一些代码而奢谈继承和多态,“为了继承而继承,为了多态而多态”,过于技术化,就会进入设计误区。
继承和多态,生活中的例子无处不在,每一分钟你想到事物概念时都自觉不自觉地应用着。中国古代的逻辑史上有一个著名的“白马非马”的谬论,公孙龙牵马要过城门,守门士兵说有规定马不让过关,公孙龙大言不惭地说“我牵的是白马,不是马”。这就好像说你写的处理“员工”的程序,对于实例化为“员工”的对象允许安排培训,对于实例化为“机关干部”的就不允许了,你说“我这个功能只对员工服务,不对机关干部”服务,这样客户一定会觉得你的脑子因为搞软件开发而变傻了(其实搞OO设计的人应该理解力更强、更灵活才对)!
如果你的编程语言可以让你清晰直观地这样表达代码逻辑,就是OOPL语言。否则,你的编程语言就限制了你的表达能力,你只能用编程语言可以支持运行的很低级的方式模拟表达这种能力。
多态是所有OOPL的基本特征。
------解决方案--------------------
软件开发中有一个原则叫做:开放封闭原则(OCP)
意思是对 追加功能开发,对修改功能封闭
回到你的问题上:
用多态的方案,你可以在不修改原来代码的情况下追加新的类。以扩从系统功能。
而如果用分支,每增加一个分支,你都需要对现有的程序进行修改,测试。
特别是当这个分支遍布你的软件很多地方的时候,情况更糟糕!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
UML建模表示系统(框架)可扩展性
求解:如何在UML中表示系统或者开发框架的可扩展性?
------解决方案--------------------
你的问题...
-
实体类应该有增删改查的Operation么?
我们正在设计一个系统,他们说实体类都要实现增删改查的方法。
理由是以面向对象开发为模式,那...
-
需求说明书该不该写的很详细?
需求说明书一般都是这样写的:
6.3.2.3参数设置
设置系统运行需要的基本参数配置。
系统配置参数如...
-
UML书籍推荐
各位兄台:
我最近由于工作原因,需要进行如下工作:
1、用户需求到产品需求的转换,根据产品业务抽取业务模型,制...
-
用labview模拟cpu
我刚学习微型计算机原理,同时又接触了labview,看到微型计算机的基本原理结构,有了用labview模拟其工作原理的想法...
-
软件接口标准有哪些?
一般来说,接口遵循的标准应该不是指设计原则之类的吧?如,单一职责原则 - Single Responsibility Principle(SRP)...
-
请教,找几本设计模式方面的经典书,大家推荐下
请教,找几本设计模式方面的经典书,大家推荐下
------解决方案--------------------
偶...
-
从数据流图导出模块结构图
本例是来自张海藩编著的《软件工程导论》第五版第5章P112中关于事务分析的映射方法。
数据流图如下
结...
-
C写的软件代码如何实现
应用软件的结构框架是。。。。。,谁能说下,我是菜鸟,特地来此请教
------解决方案--------------------
超...
-
啊?
什么是云计算?学那个难不难?
------解决方案--------------------
云计算的定义LZ自己百度吧,不管什么,只要自己想学,并下定决心...