专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 开发方法

请教多态的优势到底在哪里啊

发布时间: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建模表示系统(框架)可扩展性 求解:如何在UML中表示系统或者开发框架的可扩展性? ------解决方案-------------------- 你的问题...

  • 实体类应该有增删改查的Operation么?解决办法

    实体类应该有增删改查的Operation么? 我们正在设计一个系统,他们说实体类都要实现增删改查的方法。 理由是以面向对象开发为模式,那...

  • 需求说明书该不该写的很详细?解决方案

    需求说明书该不该写的很详细? 需求说明书一般都是这样写的: 6.3.2.3参数设置 设置系统运行需要的基本参数配置。 系统配置参数如...

  • UML书籍推荐解决办法

    UML书籍推荐 各位兄台: 我最近由于工作原因,需要进行如下工作: 1、用户需求到产品需求的转换,根据产品业务抽取业务模型,制...

  • 用labview模拟cpu解决思路

    用labview模拟cpu 我刚学习微型计算机原理,同时又接触了labview,看到微型计算机的基本原理结构,有了用labview模拟其工作原理的想法...

  • 软件接口标准有哪些?解决方法

    软件接口标准有哪些? 一般来说,接口遵循的标准应该不是指设计原则之类的吧?如,单一职责原则 - Single Responsibility Principle(SRP)...

  • 请问,找几本设计模式方面的经典书,大家推荐下

    请教,找几本设计模式方面的经典书,大家推荐下 请教,找几本设计模式方面的经典书,大家推荐下 ------解决方案-------------------- 偶...

  • 从数据流图导出模块结构图,该如何处理

    从数据流图导出模块结构图 本例是来自张海藩编著的《软件工程导论》第五版第5章P112中关于事务分析的映射方法。 数据流图如下 结...

  • C写的软件代码怎么实现

    C写的软件代码如何实现 应用软件的结构框架是。。。。。,谁能说下,我是菜鸟,特地来此请教 ------解决方案-------------------- 超...

  • 啊解决思路

    啊? 什么是云计算?学那个难不难? ------解决方案-------------------- 云计算的定义LZ自己百度吧,不管什么,只要自己想学,并下定决心...

热门推荐: