OOP 思想真的很先进吗 GOTO 真的不能用吗

2016-12-22 09:52:55 +08:00
 nbhec2

由于身处的行业环境,身边有很多做嵌入式的朋友,引发我对这两个问题的老生旧谈的思考。 个人观点:

这个所谓的面向对象思想其实不过是降低了行业的入门门槛罢了,实际上对于任何一段程序,一切归为函数。抽象画一个程序只是降低了记忆力门槛,因为你不需要记下来整个程序段的内容,都封装好了。但是函数、过程明显要高效严谨的多。 GOTO 是一个高效的语句,它和面向过程函数是相辅相成的, GOTO 其实就是 JMP SETJMP , JMP 允许你从程序的某一行跳到另一行, SETJMP 允许你从一个函数中跳到另一个函数中,它使得整个程序致密、高效、严谨,紧紧耦合在工艺上。 总之我身边的工程师每天都在写着这样严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺,小到能源站大到酸奶生产线。听了一节 JAVA 视频,居然听到了这种认为 OOP 先进只支持 OOP 删除 GOTO 语句的程序设计语言,难怪它如此的低效低质。

13161 次点击
所在节点    编程
124 条回复
MartinLv
2016-12-22 17:49:24 +08:00
面向对象编程语言相对于过程式语言的好处之一,就是为抽象增加了更多的语法支持,程序员对模块的抽象更容易了。如果楼主对抽象不屑一顾,那看不上面向对象语言也很正常。所谓降低行业入门门槛,以前程序员需要记住每条指令的机器码才能编程,汇编语言也是降低了入门门槛。看来楼主是个怀旧主义者啊。
quxiangxuanqxx
2016-12-22 18:38:19 +08:00
@nbhec2 跟科班出生无关,面向对象是思想,它带来的收益是推动历史巨轮般的操作。 java 能实现, c 同样能实现面向对象。很多高级语言基于 c 实现的。只是说明,这个思想,你并不是很了解。

大牛也好,我这样的小喽喽也好,从楼主的话中,很是不屑我们这些菜鸟。

也许我们不是决定历史的发展方向,但是我们却在默默地推动它。

那些大将非常厉害,我们这些小士兵确实真正的拼杀在战场上。

计算机发展到现在,有多少思想就是能让更多的人参与进来。但是楼主却在想通过某种方式制造技术壁垒,这是我们盛行的开源精神吗? github 上哪些项目是不是都没有存在的必要了?那么多算法是不是也没有必要了?
quxiangxuanqxx
2016-12-22 18:43:07 +08:00
@nbhec2 还有鸟哥的正面你认真看了吗

别人的意思是希望大家能弄清楚 goto 什么时候用,能有什么用,而不是单方面诋毁它。

而你直接拿到这篇文章的标题就当论据了。。。。。
irgil
2016-12-22 20:04:05 +08:00
goto 和 oop 有什么关系。。。。。。。
padeoe
2016-12-22 20:17:28 +08:00
楼主根本不懂 OOP 吧。“函数、过程明显要高效严谨的多”,“ GOTO 是一个高效的语句”,隐含的意思是面向对象不严谨,效率低?
nbhec2
2016-12-22 21:06:23 +08:00
@quxiangxuanqxx 我文章结尾不是写了么,我在抨击 JAVA 这种没有 GOTO 纯 OOP 的低能的设计。
nbhec2
2016-12-22 21:10:24 +08:00
@MartinLv 跨函数 GOTO 的好处就是我可以合并分支函数到不同的主干函数当中去。举例我有一组泵 6 用 2 备 我可以只建立 2 个干函数就行了。
quxiangxuanqxx
2016-12-22 21:41:28 +08:00
@nbhec2 所以说你根本不理解 OOP 这种思想, OOP 和 goto 就不是包含和被包含的关系。用了 OOP 思想,根本就不会考虑函数的多少,稍微大一点的项目,就有上百个函数,它们都有信息交流。用 goto ?能保证业务逻辑不出错吗?
没有 goto 就低效吗??大数据 java 不还是做的很好,效率也很高?
如果你的衡量标准只有快,我只能说软件工程最基本的东西没学好,这么重要的鲁棒性不记得吗??
cuebyte
2016-12-22 21:49:25 +08:00
@nbhec2 看了一天了我忍不住了,就冒昧代表大家一下吧——我们一直在抨击你低能的大脑。
cuebyte
2016-12-22 22:02:02 +08:00
@nbhec2 另外也忍不住想说。你所谓的“严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺”,但却充斥着 goto 的、高耦合的代码,也许实际上是一坨意(S)大(H)利(I)面(T)条呢?

另外请别拿 linux kernel 说事,你们的代码可能根本不配和它们相提并论。
whitefable
2016-12-22 22:06:34 +08:00
看了这么多我都忍不住了你还是电气科班出身的...然后都是充斥着高耦合的代码直接在高耦合的强度下进行调试??!!!
学的电气没学过控制理论?解耦设计不应该是最基本的思想之一么?你学了用了这么久就不知道工业控制 /偏底层的编程和软件行业的差别多大么?看着上面各种我都快要笑死了~~~黑人问号.jpg
nbhec2
2016-12-22 22:12:58 +08:00
@cuebyte 你的大脑很低能到是真的,好像没人让你代表你自作多情了。遇事不想为什么只会引用老师的话证明你和教书匠一样傻,所以终究你只是码农。而我们电气工程师既负责实现工艺的架构又负责软件的编写直到整套流程运转起来十几年无事故不知道要比你强多少。估计从你的言语看,这种工程交给你,第一天就该有东西炸了。所以你只能用最笨的 OOP 躲开灵活的 GOTO 去写一坨一坨臃肿底效的 JAVA 那样的程序。
nbhec2
2016-12-22 22:17:15 +08:00
@whitefable 可是实际和你的理论恰好相反,给你一个案例自己去看,山武控制是日本著名的能源控制厂,很多复杂站都是他们的系统,你看下他的工程样例的耦合度。另外过度解耦只会把自己的市场拱手让人。
cuebyte
2016-12-22 22:19:24 +08:00
@nbhec2 goto 就是会降低可读性。你们的代码到处都是 goto ,只能像狗屁不通的文章一样,又臭又长。 OOP 这么简单的东西还要看国内视频学,还学不会,你的水准大概也就那样了,和你厂的代码很般配。
whitefable
2016-12-22 22:25:18 +08:00
@nbhec2 你是大概未明白什么意思是吧???在设计中对对象进行解耦然后去设计控制...和最终的工程样例的耦合度真的是一回事?你能在高耦合情况下调试是你本事.....或者不如你试试对交流电机不要解耦然后去控制试试??
而且呢我认为 OOP 只是一种大概是封装 /抽象的思想?~.....硬是要扯的话那抽象到极端的数学都不好咯~还不如你直接实打实的直接去接触实物然后控制好咯?
nbhec2
2016-12-22 22:25:18 +08:00
@cuebyte 秀无知? 我们不是不会 OOP 只是看下 JAVA 发现它只支持 OOP ,但是我们很反感 OOP 这种设计。另外谁说软件必须要 OOP ,我们的代码质量不亚于 LINUX 内核,我们做 ARM AVR ,那麻烦你狗屁通,请让我见识见识没有 GOTO(JMP)做 ARM 做 AVR 的神工程师。来亮个相吧
cuebyte
2016-12-22 22:30:32 +08:00
@nbhec2 上面那么多回复都说了 goto 是不要“滥用”,并没有禁止。你阅读能力可能存在严重问题,应该是低能导致的。
nbhec2
2016-12-22 22:30:46 +08:00
@whitefable 调试时当然是分段,变频器是变频器工频机是工频机表是表阀是阀 X 是 X ,慢慢的组合的过程也是一个复杂化的过程。我的意思是很多控制厂都会克意的去提高他们的耦合度然后交给客户,也就是实际跑的程序是极度耦合的。
nbhec2
2016-12-22 22:35:21 +08:00
@cuebyte 别人的言论我都看的懂不用你操心,我只是觉得你非常适合做 OOP 因为低能脑容量不够记忆力不足。睁大眼睛看下本文尾指名点姓喷了 JAVA ,你来让我见识下 JAVA 里没禁用的 GOTO 。
Thoxvi
2016-12-22 22:35:43 +08:00
@nbhec2

嘛楼主你想争的话我就没话说了,
思想这种东西还不是仁者见仁智者见智。

讲道理到最后还不是机器码执行,那机器码就是瞎几把面相咯?

思想还不就是方便解决问题,脱离实际讲什么 goto 讲什么面向对象不是瞎几把扯吗

╮(‵▽′)╭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/329320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX