b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

代码设计模式 【转载】面向对象编程的弊端是什么?(5)

电脑杂谈  发布时间:2018-02-19 17:03:51  来源:网络整理

用面向对象语言写程序,和一个程序的设计是面向对象的,两者是八杆子打不着的两码事。纯C写的linux kernel事实上比c++/java之类语言搞出来的大多数项目更加面向对象——只是绝大部分人都自以为自己到处瞎写class的面条代码才是面向对象的正统、而死脑筋的linus搞的泛文件抽象不过是过程式思维搞出来的老古董。

——这个误解之深,甚至达到连wiki词条里面,都把OOP定义为“用支持面向对象的语言写程序”的程度。

——我们提及面向对象时,明明在谈论战略、谈论软件总体设计;但总有人把它歪曲成战术方面的、漫无目标却还自我感觉良好的、琐碎的投机。

——恐怕这也是没有人说泛文件设计思想是个骗局、而面向对象却被业界大牛们严厉抨击的根本原因了:真正的封装、归一化精髓被抛弃,浮于表面的、喋喋不休的class/设计模式却成了”正统“!

借用楼下PeytonCai朋友的链接:

名家吐槽:面向对象编程从骨子里就有问题

————————————————————————————

总结: 面向对象其实是对过去成功的设计经验的总结。但那些成功的设计,不是因为用了封装/归一化而成功,而是切合自己面对的问题,给出了恰到好处的设计。

让一个初学者知道自己应该向封装/归一化这个方向前进,是好的;用一个面向对象的条条框框把他们框在里面、甚至使得他们以为写下class是完全无需思索的、真正应该追求的是设计模式,则是罪恶的——它实质上是把初学者的注意力从真正应该注意的封装、归一化方向引开,欺骗他们陷入“近乎恶意的全方位滥用多态”的泥潭。

事实上,class写的越随意,才越需要设计模式;就着错误的实现写得越多、特性用得越多,它就越发的死板,以至于必须更加多得多的特性、模式、甚至语法hack,才能勉强完成需求。

只有经过真正的深思熟虑,才有可能做到KISS。

到处鼓噪的面向对象编程的最大弊端,是把软件设计工作偷换概念,变成了“就着class及相关教条瞎胡闹,不管有没有好处先插一杠子”,甚至使得人们忘记去关注“抽象是否真正简化了面对的问题”——这是猥琐的投机,不是设计。

一言以蔽之:没有银弹。任何寄希望于靠着某种“高大上”的技术——无论是面向对象、数据驱动、消息驱动还是lambda、协程等等等等——就能一劳永逸的使得任何现实问题“迎刃而解”的企图都是注定要失败的,都不过是外行的意淫而已;靠意淫来做设计,不掉沟里才怪。

想要做出KISS的方案,就必须对面对的问题有透彻的了解,有足够的经验和能力,并经过深思熟虑,这才能做出简洁的抽象:至于最终的抽象是面向对象的、面向过程的还是数据驱动/消息驱动的,甚至是大杂烩的,那都无所谓。只要这个设计能做到最重要、也是最难的KISS,它就是个好设计。

在特定领域、特定场景下,的确有成功的经验、正确/合理的方向:技术无罪,但,没有银弹。

————————————————————————————————————————

2016.5.16:

嗯,这个是我很久很久以前在CU上发过的一系列帖子……

当时很多鼓吹“面向对象就是好来就是好的”就着一知半解胡搅蛮缠,这系列帖子是驳斥他们的。所以很多词句挖苦意味很浓,见谅。

再比如,传说中的面向对象本该大显神威的游戏领域——就说流行的WOW吧。

最后,最最重要的是,这所有职业上千个技能(或许加上NPC特有的一些技能,数目会达到几千种)并不稳定,常常会因为某个技能或某些技能的组合过于强大/弱小而加以修改(比如加一个额外的负面状态如无敌/圣疗;甚至全面修改“抗性”“破甲”概念的定义)——玩过wow的都知道,这事几乎每个月都有发生。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-85281-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张可久
      张可久

      另一半利息在国内开家公司

    • 杨发
      杨发

      送检的产品还会不合格吗

    热点图片
    拼命载入中...