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

becgiggs 2009-03-07 07:39:58
比如,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;
}

感觉上述两个实现都差不多啊。而且,第二种看起来更直接,多态的优势在哪里啊?????
...全文
280 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xushaoke 2009-12-05
  • 打赏
  • 举报
回复
顶13楼的兄弟
cfvgodot 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
如果一上来就拿出A类型、B类型这类不“自然”的代码示例,或者像有些人那样为了复用一些代码而奢谈继承和多态,“为了继承而继承,为了多态而多态”,过于技术化,就会进入设计误区。

继承和多态,生活中的例子无处不在,每一分钟你想到事物概念时都自觉不自觉地应用着。中国古代的逻辑史上有一个著名的“白马非马”的谬论,公孙龙牵马要过城门,守门士兵说有规定马不让过关,公孙龙大言不惭地说“我牵的是白马,不是马”。这就好像说你写的处理“员工”的程序,对于实例化为“员工”的对象允许安排培训,对于实例化为“机关干部”的就不允许了,你说“我这个功能只对员工服务,不对机关干部”服务,这样客户一定会觉得你的脑子因为搞软件开发而变傻了(其实搞OO设计的人应该理解力更强、更灵活才对)!

如果你的编程语言可以让你清晰直观地这样表达代码逻辑,就是OOPL语言。否则,你的编程语言就限制了你的表达能力,你只能用编程语言可以支持运行的很低级的方式模拟表达这种能力。

多态是所有OOPL的基本特征。
[/Quote]


哥们,你走火入魔了你...语文,建筑又艺术的...前言不搭后语,还是多看金庸少看古龙吧!

啥乱七八糟的...不管做程序还是做什么,四个字--熟能生巧...经验的积累才是王道,可能适合我的东西不见得适合你,没必要苛求什么多态啊分支的,跟着自己的需求走才是正路!我觉得经验积累到一定的时候,方法和途径就会自然的体现出来,没必要把自己搞的跟黄大仙似的,成天对着电脑跳大神....好象自己多抽象似的,总觉得自己可以被人经常实例化拿来用!
BasicArchitect 2009-05-27
  • 打赏
  • 举报
回复
软件开发中有一个原则叫做:开放封闭原则(OCP)
意思是对 追加功能开发,对修改功能封闭

回到你的问题上:
用多态的方案,你可以在不修改原来代码的情况下追加新的类。以扩从系统功能。

而如果用分支,每增加一个分支,你都需要对现有的程序进行修改,测试。
特别是当这个分支遍布你的软件很多地方的时候,情况更糟糕!
lyguo 2009-05-25
  • 打赏
  • 举报
回复
你用面向对象的方法写几个项目就能体会到了
lyguo 2009-05-25
  • 打赏
  • 举报
回复
没有可比性。

多态灵活太多了。
hityct1 2009-04-26
  • 打赏
  • 举报
回复

可以这样想:

假设有一指针a指向一个对象,但不知道它的具体类型(当然知道其类型为类A或其继承类),
有了多态,我们就是不需判断他具体是什么,我们直接
a->fun();
这样是程序员较少关心细节了。
pathuang68 2009-04-25
  • 打赏
  • 举报
回复
多态的优势就是灵活,可以在一定程度上更好地适应需求变化。
请参考:
http://blog.csdn.net/pathuang68/archive/2009/04/21/4096521.aspx

多态的劣势就是对资源的消耗比如内存和CPU等
wang396714147 2009-03-14
  • 打赏
  • 举报
回复
看了 谢谢 谢写诶诶
ginni215 2009-03-13
  • 打赏
  • 举报
回复
就是一种思想,得慢慢领悟,等你悟到了,就豁然开朗了~~
becgiggs 2009-03-13
  • 打赏
  • 举报
回复
是挺玄的,还是不明白。
  • 打赏
  • 举报
回复
代码“Switch(ConditionPara)”这个简单场景根本不是多态的场景(上面举的设计场景才是),你选择的根本不是多态应用,这个例子怎么可能很好地说明多态呢?
  • 打赏
  • 举报
回复
如果一上来就拿出A类型、B类型这类不“自然”的代码示例,或者像有些人那样为了复用一些代码而奢谈继承和多态,“为了继承而继承,为了多态而多态”,过于技术化,就会进入设计误区。

继承和多态,生活中的例子无处不在,每一分钟你想到事物概念时都自觉不自觉地应用着。中国古代的逻辑史上有一个著名的“白马非马”的谬论,公孙龙牵马要过城门,守门士兵说有规定马不让过关,公孙龙大言不惭地说“我牵的是白马,不是马”。这就好像说你写的处理“员工”的程序,对于实例化为“员工”的对象允许安排培训,对于实例化为“机关干部”的就不允许了,你说“我这个功能只对员工服务,不对机关干部”服务,这样客户一定会觉得你的脑子因为搞软件开发而变傻了(其实搞OO设计的人应该理解力更强、更灵活才对)!

如果你的编程语言可以让你清晰直观地这样表达代码逻辑,就是OOPL语言。否则,你的编程语言就限制了你的表达能力,你只能用编程语言可以支持运行的很低级的方式模拟表达这种能力。

多态是所有OOPL的基本特征。
  • 打赏
  • 举报
回复
呵呵,说句“玄”的话,多态就是删除Switch分支思维,让你的思路更清晰。

例如你可以写一个“安排一年培训计划”的方法它接受一个“员工”类型的参数,那么对任意一种员工都可以处理,你写这个方法是哪里知道将来会有多少种员工呢?而你故意写一个Switch代码,似乎各种各样的A都在此枚举,是何居心?

你没有多态思路,就写不出多态代码。所以真正好的程序员不是从代码中学设计,而是从逻辑、数学、语文、建筑、艺术等等与计算机无关应用领域的设计概念中学设计,你先有了多态地表达逻辑概念的需求,然后才会考虑如何用代码来表达的问题。玄吧?面向对象设计就要从电脑领域以外的概念中来学习的。
becgiggs 2009-03-12
  • 打赏
  • 举报
回复
是不是问题太简单了,没人愿意回答啊?

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧