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

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

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

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

13142 次点击
所在节点    编程
124 条回复
nbhec2
2016-12-22 11:04:34 +08:00
@BOYPT 我还是会点高级语言 C VBS PHP GOLANG (在了解)
21grams
2016-12-22 11:07:47 +08:00
关公战秦琼
cuebyte
2016-12-22 11:10:42 +08:00
@nbhec2 不要滥用 goto 是 Dijkstra 在 1968 年向 ACM 提出的。当时已经证明,任何程序可以通过顺序、选择分支和循环三种方式组成,也就是,只需要 if...else 和 while 就是足够的。提倡使用这三种方式进行结构化编程,是提高程序质量的一种方法。 Dijkstra 的详细理由,大意是提高程序质量、明晰程序流程。其他各种细节的你随便谷歌就出来了。

然而楼主超时空甩锅到了 OOP 头上。( OOP: "我也是日了狗了。")

另外我不是搞嵌入式的, J2ME 也已经废弃好久了。但如果 Java 是跑在服务器上的话……所谓的“必将引发事故”,可能是你们对 Java 不了解导致的吧?或者你能说出 Java 的硬伤么?
nbhec2
2016-12-22 11:17:12 +08:00
@cuebyte Dijkstra 已经死了。
引发事故的隐患过多是我们共同的结论,因为我们要求高度的耦合才能在调试中发现每一个事故点。例如假设一个化工厂,你工艺中一个出品环节,出品没完成料先进来了。。。
murmur
2016-12-22 11:19:37 +08:00
goto 用的最多的是在循环跳出里。。
Cbdy
2016-12-22 11:28:54 +08:00
OOP 思想在很多应用场景挺先进的。
goto 循环在绝大多数场景最好不要用。

另外,这和 goto 语句有关系吗?你写一个 goto 循环、再写一个 while 循环。然后 cc -s 一下,看看编译出来的
as 是不是一样的。
cuebyte
2016-12-22 11:29:01 +08:00
@nbhec2 没看懂你说什么。不滥用 goto 是广大共识,依然建议你去谷歌。

既然如此,你应该喷“低耦合”这个概念, Java 也能写出高耦合度的代码。

唉,不想浪费时间了。
est
2016-12-22 11:29:55 +08:00
此处应插入 <老汉复制粘贴就是干.jpg>
easing
2016-12-22 11:34:18 +08:00
啥情况? goto 的对手不应该是结构化编程么,也就是 C 大行其道的时候讨论的么?怎么就说到 Java 了。。话说,到目前为止,虽然略显啰嗦,但各方综合效率最高的我认为依然是 java 。 LZ 你是不是喷错地方了。
至于该不该用 Goto ,这个 @cuebyte 已经说得很清楚了,其实 goto 的功能被 if 和 while 替换了,也就是结构化编程作为图灵完备的三个基本元素:顺序执行、条件判断、循环中的后两个是 Goto 衍生出来,但对于程序员来说,写起来更有条理性,更容易阅读。
LZ 你非要认为你们用 Goto 写的程序更美更好阅读更好调试,那我也无话可说,只能表示敬佩。
nbhec2
2016-12-22 11:37:46 +08:00
@cuebyte 这应该是局部共识,那个胡言乱语者还活着的时候就有人反驳他。不要把别人代表了, GOTO 是很传统的用法, LINUX 是 C 写的内核里也很多很多 GOTO ,而且再底层些的语言更是只有 GOTO ( JMP/SETJMP )能用。更何谈所谓“滥用”这种感情词汇之讲,只有驾驭的了常用或驾驭的不了不常用只讲。
levn
2016-12-22 11:57:00 +08:00
@nbhec2 你得去找那个讲视频的人撕…… 没必要把吃瓜群众当成包青天
h4x3rotab
2016-12-22 12:13:45 +08:00
233 越往后看越觉得 lz 在高级黑
ovear
2016-12-22 12:15:26 +08:00
@nbhec2 银行好像没有出事也。。银行是 Java 用的较多的地方
veelog
2016-12-22 12:29:33 +08:00
goto 很好用,但是不好维护。维护的人多了他就乱了。
000wangxinyu000
2016-12-22 13:15:31 +08:00
@nbhec2 goto 是世界上最好的指令
gouchaoer
2016-12-22 13:20:20 +08:00
php 为啥加入了 goto ,因为好用
hyuwang
2016-12-22 13:38:50 +08:00
你把嵌入式开发和软件工程的问题搞混了
写 arm 有人不让你用 goto 么?

隔行隔山,吐槽也要看背景
如 @cuebyte 所言, Dijkstra 向 ACM 提出不要使用 goto
这个问题的主要背景是 Software crisis https://en.wikipedia.org/wiki/Software_crisis
学过软件工程的话应该都有了解过

具体细节请自行搜索,一句话总结一下,禁用 goto 是为了代码的可维护性
OOP 高度抽象的思想背后,是大堆工程思想的结晶也是历史的结果,也为大型软件工程创下了基础
kkk330
2016-12-22 13:40:51 +08:00
kkzxak47
2016-12-22 13:55:17 +08:00
其实一个组织,比如政府啊公司啊,里面根本没必要搞那么多小机构,这个局啊那个部的,不如所有人都统一指挥,要做什么事就统一分配人手去做,高效得多,根本不会有部门之间扯皮的事情,也不会有一个部门忙死另一个部门闲死。
10 个人这样搞, 10000 个人也是一样的,只要管理层严谨、精细的调配就好了嘛,楼主你说是不是啊。
popesaga
2016-12-22 13:59:45 +08:00
隔行如隔山,即使大家都是程序员……楼上很多反驳楼主的引经据典说的都很不错了……楼主的首要问题是把两件驴头不对马嘴的事情搞成对立。 GOTO 和 OOP 。这让人不管怎么解释都像是在叫醒一个装睡的,后面的反驳基本上就是死缠烂打了。楼主,有个问题想问你,你是 CS 出身吗?是 CS 出身的即使不敢说学过的计算机科学知识都是金科玉律,也不会随随便便把一个著名科学家的论断直接当胡言乱语一棍子打死。后面很多讨论的范畴在软件工程这门学科里。在你所处的行业里高耦合有更高的可用性,可靠性可能是不错。但是没有什么技术是银弹是可以包治百病的。 Java 的流行也不仅仅是说面向对象就能解决的。活生生地扭曲 Java 在很多领域也可以写出高可用高可靠的代码很难吗?至于楼主随手提的其他语言, C VBS PHP GOLANG 。 C 也可以面向对象开发楼主知道吗?不过估计楼主看的 Java 教学视频质量也不佳,有点像一知半解地照本宣科。其实楼主你在你的行业里干的挺好的可以了。如果真想开拓开拓视野,还是谦虚地多学点背景知识吧。后面的人也不用举例什么 Java 也很好用怎么怎么的了。

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

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

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

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

© 2021 V2EX