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

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

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

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

13143 次点击
所在节点    编程
124 条回复
fantastM
2016-12-22 09:59:11 +08:00
面向对象思想其实不过是降低了行业的入门门槛罢了 -1 。
我觉得一个好用 OOP 设计,挺难的。。
canfoderiskii
2016-12-22 10:02:50 +08:00
goto 很好很必要
server
2016-12-22 10:04:01 +08:00
嵌入式开发 和 大型应用开发 是一个路子?为啥总是有人拿看似可以比较的东西引发论战。
igboy
2016-12-22 10:07:22 +08:00
只有适合不适合,没有能用不能用,记住没有万能的“银弹”。
nbhec2
2016-12-22 10:08:32 +08:00
@server 很多嵌入式应用已经足够复杂足够大型了,工艺极度复杂集成度极高的场景并不少
kmyzzy
2016-12-22 10:13:19 +08:00
OOP 和 goto 有什么关系??
coderluan
2016-12-22 10:22:33 +08:00
抛开使用场合谈论技术优劣是很蠢的。

讲 Java 时说一下支持 oop 我感觉很正常( goto 这个不太赞同),没人讲 Java 时会没句话都加一句 [我下面说的是 Java] 吧。楼主拿嵌入式的使用场景来反驳 Java 课上的言论,我感觉非常蛋疼,对方又没说什么 [Java 世界上最好的语言] 不是。
1OF7G
2016-12-22 10:31:33 +08:00
我也不太懂, OOP 听说最多的优点就是代码复用。可能嵌入式独立性比较高,不太需要代码重用?
软件上导入一个类就可以用了,要是像嵌入式一样代码紧密耦合,那就很难实现代码复用了
qwer1234asdf
2016-12-22 10:34:06 +08:00
goto 也好,面向对象也好,甚至是封装继承、构造函数、析构函数,还有各种设计模式。。都可以在 linux 内核中找到相应的实现, goto 用的也很多。。。
不觉得高级语言的异常处理,甚至是 golang 的 defer ,和 goto 用来处理错误,有异曲同工之妙吗。。。
nbhec2
2016-12-22 10:34:50 +08:00
@1OF7G 函数和 GOTO 语句也是实现了代码复用。当然 GOTO 语句主要功能不是它,但是当你每调用一次函数那不正是复用了一段代码嘛~
QAPTEAWH
2016-12-22 10:40:24 +08:00
不用 goto ,你可以 throw-catch 嘛
PickMio
2016-12-22 10:42:18 +08:00
不了解嵌入式, 嵌入式也会上线了会不会没几天就来个新需求让你改么...
finian
2016-12-22 10:43:04 +08:00
「这个所谓的过程式编程思想其实不过是降低了行业的入门门槛罢了,实际上对于任何一段程序,一切归为机器码。抽象画一个程序只是降低了记忆力门槛,因为你不需要记下来整套 CPU 指令,都封装好了。但是 CPU 指令明显要高效严谨的多。」
cuebyte
2016-12-22 10:51:42 +08:00
滥用 goto 的确会有问题,你们用得好也是你们的能耐。但是……你说"总之我身边的工程师每天都在写着这样严谨、美观、精致极富逻辑结晶的程序,调试控制实现着各种复杂的工艺。",完了还喷 Java 低效低质?

隔行如隔山,要学 OOP 你就好好学,不要看了点视频就出来喷,你连 OOP 是什么都不知道。
imn1
2016-12-22 10:51:59 +08:00
我自己是很清楚 goto 哪里的,但如果旁边的人问 goto 哪里,我会懵圈的
server
2016-12-22 10:54:18 +08:00
@nbhec2 这种论战毫无意义,技术工作不等于技术。
nbhec2
2016-12-22 10:58:22 +08:00
@cuebyte 没学就看了一下,我们现在的结论是 JAVA 做中控复杂度高了必将引发事故,继续使用思考相对严谨的方法。
BOYPT
2016-12-22 10:59:30 +08:00
高级低级语言程序员隔行了(
monnand
2016-12-22 11:03:19 +08:00
不懂范畴论就谈编程语言好坏,这基本就是自己往坑里跳。
levn
2016-12-22 11:04:02 +08:00
避免使用 goto 是从结构化编程开始的,而不是面向对象……

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

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

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

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

© 2021 V2EX