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

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

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

正是通过封装和归一化,我们才可以做到“如果一个师解决不了问题,那就再调两个师”“如果单凭陆军解决不了问题,那就让空军也过来”——这种灵活性显然是从良好的部队编制得来的。在软件设计里,我们叫它“通过合理模块化而灵活应对需求变更”。

软件设计同样。比如说,消息循环在派发消息时,只需知道所有UI对象都是个window,都可以响应窗口消息就足够了;它没必要知道每个UI对象究竟是什么(归一化)、也不应该关心这个UI对象的内部执行细节(封装)——该对象自己知道收到消息该怎么做;而且若它出了问题,只需修改该对象即可,不会影响外部。

合理划分功能层级、适时砍掉不必要的繁杂信息,一层层向上提供简洁却又完备的信息/接口,高层模块才不会被累死——KISS是最难也是最优的软件设计方法,没有之一。

可见,封装和归一化才是战略层面、生死攸关的问题。遵循它并不能保证你一定能打胜仗,但违反它你必定死的很难看。

但这两个问题太大、太难,并且不存在普适性答案。这就使得没有足够经验、缺乏认真思考的外行们根本无从置喙。

前面提到过,人们错误的把多态这个战术技巧提到“封装和归一化”相同的战略层面上。这就致使本该谈论战略的设计工作被一群毫无实践经验、只会就着浅显的多态胡扯八道的战术家攻占和把持,进而使得“以战术代替战略”成为普遍现象——因为对他们来说,多态是既容易理解又容易玩出诸多花样的;而封装和归一化就太空泛又太复杂,对他们来说完全无从着手了。

所以,他们把一切精力都用在多态的滥用上,却从不谈封装和归一化:即使谈到了,也是作为多态的附庸出现的。代码设计模式

这种战术层面的空谈很容易、也很容易出彩,但并不解决问题——反而总是导致简单问题复杂化。

然而,对于如何解决问题,他们并不在行,也不在乎。因为他们没有能力在乎。

这就要命了。

总结:面向对象的好处实际就这么两点。

一是通过封装明确定义了何谓接口、何谓接口内部实现、何谓接口的外部调用者,使得大家各司其职,不得越界;

二是通过继承+多态这种内置机制,在语言的层面支持归一化的设计,并使得内行可以从代码本身看到这个设计——但,注意仅仅只是支持归一化的设计。不懂如何做出这种设计的外行仍然不可能从瞎胡闹的设计中得到任何好处。

显然,不用面向对象语言、不用class,一样可以做归一化的设计(如老掉牙的泛文件概念、游戏行业的一切皆精灵),一样可以封装(通过定义模块和接口),只是用面向对象语言可以直接用语言元素显式声明这些而已;

而用了面向对象语言,满篇都是class,并不等于就有了归一化的设计。甚至,因为被这些花哨的东西迷惑,反而更加不知道什么才是设计。

2、人们以为面向对象是什么、以及因此制造出的悲剧以及闹剧

误解一、面向对象语言支持用语言元素直接声明封装性和接口兼容性,所以用面向对象语言写出来的东西一定更清晰、易懂。

事实上,既然class意味着声明了封装、继承意味着声明了接口兼容,那么错误的类设计显然就是错误的声明、盲目定义的类就是无意义的喋喋不休。而错误的声明比没有声明更糟;通篇毫无意义的喋喋不休还不如错误的声明。

除非你真正做出了漂亮的设计,然后用面向对象的语法把这个设计声明出来——仅仅声明真正有设计、真正需要人们注意的地方,而不是到处瞎叫唤——否则不可能得到任何好处。

一切皆对象实质上是在鼓励堆砌毫无意义的喋喋不休,并且用这种战术层面都蠢的要命的喋喋不休来代替战略层面的考量。

大部分人——注意,不是个别人——甚至被这种无意义的喋喋不休搞出了神经质,以至于非要在喋喋不休中找出意义:没错,我说的就是设计模式驱动编程,以及如此理解面向对象编程。


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

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

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