面向对象的编程,到底是不是正途

摇撼大地 2016-08-24 03:13:34
加精
最近听到一种论调。说是面向对象的编程思想可能是编程历史上的败笔。
理由:学起来太难,开发速度太慢。
不知道大神们怎么看这个问题。

我先说说我的看法。我觉得学习面向对象的时候,对我的编程思路改变了很多,感觉这种方式比较符合人的思维,并且容易处理大的问题。而且编出来的程序不容易出错。虽然开发速度还是慢。而且用的不好,可能吧自己绕进去,而且如果思路不对,后面的程序可能改起来也不是很简单。
...全文
6047 99 打赏 收藏 转发到动态 举报
写回复
用AI写文章
99 条回复
切换为时间正序
请发表友善的回复…
发表回复
天润少爷 2017-09-17
  • 打赏
  • 举报
回复
其实我感觉吧,没有好的编程语言,只有自己能明白的。你说学了一辈子C的人,面向过程面了一辈子。能说别的好吗?
zgl263885058 2017-05-04
  • 打赏
  • 举报
回复
引用 18 楼 sp1234 的回复:
[quote=引用 17 楼 yenange 的回复:] 打个比方: 你家门前有条河, 但你隔几天就得过河, 两种方案: 1. 过轮渡, 每次 10 元(面向过程); 2. 修桥, 大概 10 万(面向对象)。 你愿意选哪个, 看着办
谁说“轮渡”不是对象呢? 面向对象首先应该是设计技术,编程实现跟设计应该完全一致。有许多人在编程时跟系统分析设计,完全不一致。这样才会产生“冗余”。 你根本找不出“自然的”应用领域中不能作为对象来分析描述的东西。一些人错误地使用面向对象技术,跟一些人根本不懂对象,这都不算是什么设计开发理由![/quote]他可能想表达轮渡短期看起来便宜,方便,但是从长远看,桥的用途更广,成本更低,扩展性更好。
头狼一号 2017-03-01
  • 打赏
  • 举报
回复
chf_wyy 2016-11-23
  • 打赏
  • 举报
回复
怎么说,我们技术没达到一定程度还是按照前辈定义好的框框(面向对象)来吧,总归有个路走,不至于迷路。当你能力到了,足够跳出这框,那你就随意用吧。
  • 打赏
  • 举报
回复
引用 17 楼 yenange 的回复:
打个比方: 你家门前有条河, 但你隔几天就得过河, 两种方案: 1. 过轮渡, 每次 10 元(面向过程); 2. 修桥, 大概 10 万(面向对象)。 你愿意选哪个, 看着办
可以,这个不错
  • 打赏
  • 举报
回复
刚入门的小白路过。但没觉得面向对象有多难。倒觉得c的指针有点麻烦
  • 打赏
  • 举报
回复
引用 10 楼 xuanbg 的回复:
这简直是胡扯!面向对象不能解决所有问题,但这不影响它是一种比面向过程先进的编程思想。虽然我个人也认为继承和多态并没什么卵用,用得不好还会添麻烦。但封装却是实打实的现代软件工程得以发展壮大的支柱,六字真言『高内聚,低耦合』全靠它实现。 PS:对弱类型的支持并不能说明面向对象错了。。。强类型/弱类型和面向对象有个毛的关系???
继承和多态以及设计模式,在面向接口开发的思维和架构中才能发挥强大的作用。 面向接口也就是敏捷设计原则中的依赖倒置原则。 关于继承/派生,一般说来包含关系优于派生关系,而且要尽可能避免多重继承。
zhangli0815 2016-09-14
  • 打赏
  • 举报
回复
面向对象是把双刃刀,当一种语言越来越有助于人类的理解,那他就离机器语言就越来越远,效率相对低。所以,其利与弊自己权衡。
qq_36049125 2016-09-12
  • 打赏
  • 举报
回复
永远支持c++
qq_36049125 2016-09-12
  • 打赏
  • 举报
回复
永远支持c++
恒宝乐园 2016-09-09
  • 打赏
  • 举报
回复
面向对象多好,没有对象,可以new一个
  • 打赏
  • 举报
回复
是哪里听来的?
  • 打赏
  • 举报
回复
你说得缺点我完全不知道。优点太多说不过来就不说了
qq_23984017 2016-09-02
  • 打赏
  • 举报
回复
我要积分······
rickys2080 2016-09-02
  • 打赏
  • 举报
回复
面向数据编程
HaoYuan 2016-09-02
  • 打赏
  • 举报
回复
我也喜欢面向对象编程,因为没有对象我也能编程
夜间独行 2016-09-01
  • 打赏
  • 举报
回复
上有面有人说的很对。 面向过程更倾向业务逻辑,面向对象更倾向结构。 对于现在来说,除了特定方面,在成规模后,面向对象比过程应用要广泛的多,因为开发、维护都比面向过程要轻松。 拿php来说吧,如果做后台,直接OOP、ORM等,如果是写接口则普遍采用面向过程,反过来用面向过程开发后台,会开发慢、维护难,用OOP、ORM开发接口会有一定的冗余、低效。
draculamx 2016-08-31
  • 打赏
  • 举报
回复
引用 13 楼 diaodiaop 的回复:
的确是这样.不如转行吧. 开个网吧什么的 比写代码赚钱多了.
开网吧也不行啊。。现在最赚钱的路子: 1.北京买房 2.上海买房 3.深圳买房 这个来钱最快,所以实体经济衰落了
yahle 2016-08-31
  • 打赏
  • 举报
回复
大家有没有区分, 面向对象语言 和 面向对象思维 的差别?
onetwonumberlzw 2016-08-31
  • 打赏
  • 举报
回复
主要是大家都没有对象
加载更多回复(79)
有不少的同学发信给我,和我探讨java的自学过程应该是什么样的,毕竟有很多人因为各种各样的原因不能参加培训。我试着给出自己的见解,抛砖引玉吧。 这个路线图是给那些为了就业的人准备的,如果只是兴趣,不一定照这个走。 这里只是讲了路线图,关于路线中的各个阶段,学到什么程度,如何学习等,可以参考后面的JAVA自学之路 七:《路线图明细》。 首先要学JavaSE,这是无庸置疑的。 与此同时,是的,与此同时,和JavaSE的学习同步,建议大家研究一下数据结构与算法。 在这儿之后,你可以选择向J2ME、或者Java GUI、Socket编程等方向努力,但是通过第一篇的办法,你可以很容易就将这方向过滤掉(永远不要忘了我们是为了就业),好吧,暂时和它们诀别,还是向着J2EE的方向前进吧。 在JavaSE完成之后,可以试着完成一些小项目,同时关注一下设计模式的内容,不必强求自己能够完全掌握各种细节,往前走吧。 掌握一种编程工具,比如说Eclipse。 数据库,可以选择使用Oracle或者MySQL开始 。 JDBC,用Java连接数据库。 可以选择在这个地方切入Hibernate,也可以选择在Struts 之后。 HTML CSS JavaScript,这些东西是做web项目必需的内容 。 Servlet JSP,服务器端必需。 XML AJAX,新的流行趋势不能不了解。 作一些小项目吧。比如BBS、留言系统、学籍管理、商城等等,随便着一些业务逻辑比较简单的来做一做。 Struts,MVC的典型应用 Hibernate,OR Mapping的典范之作。 Spring IOC + AOP, 面向对象 + 面向切面,完善的旅程。 把以前自己的小项目加入Struts、Spring、Hibernate的元素吧。 去研究各种商业项目的业务逻辑吧,才能在你的简历中加入浓重的一笔。 EJB3.0,java在走了很多弯路后的回归之作,值得研究。 SOA,业界铁定的未来趋势,要紧紧跟随。 在后面,我会告诉你每一步的学习方法和学习重点。 JAVA自学之路 三:要动手 无论如何,请坚持不懈的动手实验! 学习Java要动手,仅仅是看和听是不能够学好编程的。总有同学来信问我们这样的问题,说:"老师我看了视频了,可是怎么一动手就没有任何思路呢?" 对此,我一般都会说不要着急,如果你只是看了视频就想行云流水的话,那老师这些年的锻炼真是白费了,这么多年的苦练才能略有些行云流水的感觉,你一朝一夕就想自己能够达到,不是太奢侈了吗 作为编程的过来人想一下,当年自己学编程的时候是什么时候有思路的呢?至少也是照猫画虎画了一段时间之后吧,我本人是在某一个领域画虎画了上万行代码的时候才慢慢有自己思路的。就像写作文,要有自己思路总是一般来说要经过几个阶段,首先学习词汇,然后学习造句,然后大量阅读别人的文章,自己模仿着写一些,逐渐的经验积累,才能形成自己的思路。学编程,恐怕也得慢慢的来吧,只是看一看、听一听视频,是不足以学好编程的。 所以,动手吧,跟着做,一行一行的跟着敲,一个项目敲完了,比如坦克,再试着加一些自己的功能,按照自己的思路敲一些代码,收获远比干听大的多。 如果遇到,暂时对于一些思路不能理解的同学,我一般都会劝告说,动手写,先写代码,量变会引起质变的。而这种质变的确发生过不少次。 提醒一句,要理解代码思路之后再跟着敲 ,背着敲,千万不要左边摆着别人的程序,右边自己一个一个子母的写,这就不再是程序员了,成了打字员了。 纸上得来终觉浅,所以:别问那么多,别想那么多,动手写吧。 JAVA自学之路 四:要事为先 对待人生的任何事情都要:抓大放小,要事为先 对于一个以前从来没有接触过java的人,java无疑是庞大的,似乎每个领域都可以拓展开来都是一片开阔地,每一个领域要想深入接触到每一个细节所耗费的精力都是巨大的。这个时候大家都胸怀壮志,两眼发光的盯着每一个崭新的知识点,遇见了任何一个知识点都恨不得抠的清清楚楚,明明白白。 难道这有什么不对吗? 我的意见是,没什么大毛病,但是学习效率太低了!我们推荐的学习方式是,抓大放小,要事为先。 比如说学习J2SE的时候,学到GUI这一章,有的同学认为,既然学到这儿了,我们去把SWING细细的了解一遍吧;还有的同学,遇到了在Linux下的Shell编程,就恨不得把Shell先学成专家才肯,或者是才敢,继续往下学习;有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚至非要把上册复习一遍才敢继续学习。如果你也是这样,要去看看心理医生啦,没准儿会有洁癖的毛病。 任何事情都要追求完美才敢继续往后进行,是一种性格缺陷 大胆的放弃一些东西吧,有失才有得,把自己有限的、宝贵的精力用在对于就业直接相关的地方,这才是最有效率的学习方式!等你参加工作,有了可持续发展的事业动力和经济基础,有时间有精力闲的没事儿干的时候,再去研究那些其它吧。 曾经有一个故事,说得是产能和产量的关系。 一个人喜欢读书,读了一辈子,无所不通,这时候要做任何工作都可以,他的产能到了极致,但是,他老了,即便每天产出大量的东西也不能维持多久了,一辈子的产量并没有多少。 另一个人直接工作,忙,天天在机器旁日复一日,做了一辈子,没时间学习和进修,可以想象,产量能有多大呢。 人的一生,要锻炼产能,也要及时产出,引擎要转,也要停下来加油,这两者平衡的越好,你的贡献和产量就会越大。如果钻研的东西和产能目标(或者说近期的产能目标)无关的话,要舍得放手。 所以,对于SWING,暂时先扔在一边吧。 对于shell,对于各种协议过于详细的细节,对于喜欢的游戏编程,对于javascript各种华而不实的效果,都暂时和它们分别吧。一切和我们的直接工作目标关联不大的东西,扔在一边或者弄清楚到足够支持下一步的学习就可以了。 那这样岂不是妨碍我成为通晓各种细节的高手了吗? 我一向不认为一个人掌握了很多很多知识点的细节就是高手了,一个人如果告诉你,回字有四种写法,你会认为他是高手吗? 毫不客气的说,现在我们所教授的所有知识细节在网上或书中都可以找到,只要你肯花时间花精力去动手试,去钻研,没有什么不能掌握的。struts、spring你能掌握吗?当然能!但是如果把时间花在spring的各种细节的研究上,花在研究中国企业应用不广泛地的spring mvc上,这个精力就太浪费了,而且学习的积极性会受到打击,谁愿意整天泡在细节的蜘蛛网中挣扎不出来呢?谁愿意天天经历风雨却总是不能见到彩虹呢? 盖房子,要先建骨架,再谈修饰。 画山水,要先画结构,再谈润色。 认识一台结构复杂的机器,应该首先认清楚脉络,然后再逐步认识每一个关节。 为了应付从小学到大学的考试,我们背了各种各样的不应该提前掌握的细节,同时也养成了见到细节就抠的学习习惯。而现在,是到改改的时候了。 请在合适的时间,做合适的事情吧。 把时间和精力花在作项目上面,花在写作品以及锻炼解决问题的能力上面吧,这是迈向高手的正确的而且快速的方向。 我一直不认为一个课程提供了很多很多的细节就是优秀的价值高的课程了,掌握必要的细节,这个不含糊,至于其他,或者通过视频给出(这样可以给出更多的细节,但是不占上课时间,课上只讲重要的、必要的细节知识),或者在掌握了自学的能力后自己能够查出,这才是正途。 当你看书到某个地方暂时不理解的时候的,暂时放手吧,追求一些行云流水、自然而然的境界吧,只是不要停下前进的脚步,不要被大路旁边的支根末节干扰了你前进的行程,项目,真实的项目,这才是目的,就在不远的前方。 陶渊明读书,叫做“不求甚解”,但他是大诗人。 诸葛亮读书,总是“观其大略”,但他是大政治家。 作研究的,是在确定了方向之后才详细的研究深入的东西。 到了庐山,脉络形状扔在一边,盯着一棵棵小草、一粒粒石子的看,怎么样才能识得“真面目”? 作为应用型的人才,是研究回字的n种写法还是抓紧时间向着主要应用的方向努力,请自己作出抉择。 以项目驱动自己的学习吧,当把握了技术的脉络之后再去补充细节的研究,是正途。 这辈子就不研究其他的方向了吗? 当然要研究!但是在将来合适的时间再说吧。 所以,抓大放小,要事为先! 那么,在JAVA的这些课程中,哪些才是大,才是要事呢?请继续读下去。 JAVA自学之路 五:问题解决之道 既然是学习,就不可能不遇到问题。 既然是自学,就没有方便的和老师探讨的机会。 那么,遇到问题之后,环境配不通,程序调不过,运行不正常,遇见这些恼人的问题的时候,该怎么办呢? 首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。 但是总是解决不了也是很恼人的,怎么办呢? 我一般要求我们的学生都是这样来进行的。 当你遇到一个问题的时候: 1:要仔细的观察错误的现象,是的,要仔细 有不少同学的手非常快,在编译一个程序的时候,报了一大堆的错误,扫了一眼之后就开始盯着代码一行一行的找,看清什么错误了吗?没有!有的时候安装软件出问题了,一个对话框弹出来说出错了,马上举手问老师:“不得了了,出错了,出错了”。 “什么错误?” “还没看呢?” 这都是典型的不上心的方法!请记住,学习编程并不是一件很容易的事情,自己首先要重视,要用心才可以。 在开发中,仔细观察出错信息,或者运行不正常的信息,是你要做的第一件事。 读清楚了,才能在以后的步骤中有的放矢,哭了半天,总要知道哭的是谁才成。 这里又分三种情况: A:错误信息读懂了,那么请进入2步:要仔细思考问题会出在哪些环节 B:没读懂,愣是一点没看懂,进入第4步吧:google C:读了个半懂,有些眉目但是不太能确定,第2步和第4步结合着来。 2:要仔细思考问题会出在哪些环节(重要) 当你读懂了一个问题之后,要好好的思考这个问题可能会在哪些环节上出错。 一辆汽车从总成线上下来,车门子关不上! 哪错了?你怎么查? 当然是顺着生产线一站一站的查下来。 程序也是一样的,也是一系列语句完成后产生的结果。 写一个网络程序,总是发现服务器端打印不出接收的数据,有几个环节会出错? 仔细分析这个现象的环节: 客户端产生数据->按“发送”按钮->发送到服务器->服务器接收到后打印 这几个环节都有可能会出错: 有可能客户端根本就没产生数据,有可能发送按钮按下去后根本就没发出去,或者发出去的不是你产生的东西,或者根本就没连接网络,或者发送出去服务器没有接收到,或者接收到之前就打印了等等等等。 学着去这样仔细的分析程序的环节和这些环节可能会产生的问题,你的经验值定然会大幅度快速的提升,这样做很累人,但是一件事情如果做下来一点都不累的话,这个东西还有价值吗? 在网页A输入了一个人的名字,提交到B,首先存储到数据库,然后再读出来,发现乱码!怎么办?当然是分析环节: 客户输入->HTTP发送->B接收->存储到数据库->读出->展现到网页 每个环节都可能出问题,怎么才能知道哪里出的问题?继续往下读。 3:如何定位错误(重要)分析清楚有哪些环节之后,下一步就是定位到底什么环节出错了。 定位有以下三种办法: A 打印输出,比如java的System.out.println(),比如js的alert(),这种办法常用,必须掌握 B Debug,可以参考我们的视频《坦克大战》,详细讲了Eclipse的调试。 C 删掉一部分调试一部分,也就是去掉一部分的功能,做简化,然后调试剩下的功能,JSP和JavaScript常用。 4:如果还不行,google吧 还查不出来?恭喜你,你遇到的错误是值得认真对待的错误,是会影响你学习生涯的错误,问一下google或者百度吧。照着下面的方法查查看。 一般来讲,搜索引擎可以搜到各种知识点,我曾经跟同学们开玩笑说:“学会了怎么google或者baidu,其实没必要跟老师学了,自己全都搞懂了,尚学堂是没必要来的。”当然,只是玩笑,培训的作用有三个: A:系统化知识 B:真实项目锻炼经验 C:少走弯路,节省时间 不知不觉开始做广告了,请原谅,处其位谋其事,总得为尚学堂说点什么:) 言归正传,如何查搜索引擎? 先精后粗,首先先进行尽量精确的查找,比如一个错误,SocketException,你怀疑它是在connect()方法出的问题,那么当然是选这样的关键词java connect SocketException 先中后英,本着以解决问题为主的想法,练习英文还是先放在一边吧,首先应该在中文网页中查询,还不行的话,搜索英文的吧,最近的尚学堂课程中会带大家阅读英文的书籍。有很多东西就像一层窗户纸,远看灰蒙蒙怪唬人的,你壮着胆子一捅,它就破了。阅读英文的书籍就是如此,不是想象中的那么困难:)宁可在沙场上战死,也不能被吓死不是吗:) 信息筛选,搜索出来的结果不见得能够完全匹配,建议大家多阅读前几页的搜索结果,多打开几个网页看看,不过,我的经验是超过3页一般就没意义了,所以超过3页还没有找到合适的答案,或许应该调整一下关键词,或者放粗整个搜索的结果了。 经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点的细节。这也是涨知识的重要的途径。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧