打着面向对象的旗号干着面向过程的事

来源:互联网 发布:微信有多少营销软件 编辑:程序博客网 时间:2024/04/29 19:51

     昨天用了一天时间,和八期,米老师一块讨论了关于面向对象的那点事.虽然自己就是近段时间才参与到gxpt,而且这段时间接近期末了,需要处理网考学生的信息,没有过多的时间放在gxpt,我就做了一条线,这条线还是模仿着别人写好的demo做的.但是今天这一天的课,我感觉我听得特别的值得,老师说的内容不单单是面向对象的理论和设计.更多的是在说我们思考问题的一种方式.在题目中,我们就提到过面向对象和面向过程这两个词,那么我们先来说说这来个词.


     面向过程:(Procedure Oridnted )是一种以过程为中心的编程思想.简单来说就是分析出解决问题所需要的步骤,然后使用函数把这些步骤一步步的实现,使用的时候一个个依次调用就可以了.


     面向过程的程序设计是一种自上而下,逐层分解的设计方法,最典型的就是设计者用一个main函数概括整个应用程序需要做的事情,main函数由对一系列子函数的的调用组成.对于main中的每一个子函数,又可以在被分解成为更加小的函数.被调用的这一个过程不断的重复,就可以完成一个过程式的设计.面向过程的特征是以函数为中心,用函数来作为划分程序的基本单位,数据在过程式设计中往往处于从数的位置.

 

     面向过程设计的有点是易于理解和掌握,运行速度快.而且逐步细化问题的设计方法和大部分人的思维方式比较接近,很容易让人接受.例如咱们生活中遇到什么事情,就会先做什么,然后做什么,最后做什么,这个就是典型的面向过程.

 

     但是在面对比较复杂的问题,或者是在开发中需求变化比较多的时候,往往就显得力不从心了.瀑布模型就是一个典型的面向过程的设计模型.


     同时在面向过程的语言中,一般有定义数据的元素,也有定义操作的元素.这样做的结果就会把数据和操作分离开来,容易导致对一种数据的操作分布在整个程序的各个角落,而且一个操作也有可能会用到多个数据,一旦程序出现错误或者需求发生更变的时候,修改就会变得很困难,牵一发而动全身.这样的程序就算是自己做的,都把自己恶心得够呛.


     而且使用面向过程的程序设计中,很容易将一些较外延和易变化的逻辑同程序的核心逻辑混淆在一起,主要是因为main()函数处于一个十分十分重要的地位.设计者在main()函数中,对整个系统进行一次概括的描述,再以此为起点,逐步细化出整个应用程序.

 

     面向过程的特征就是以函数为中心,用函数来划分程序的最基本单位,在整个过程中函数被不断地调用.面向过程式设计就是以其程序架构的依赖关系问题,一个典型的面向过程式程序如下图所示:




     面向对象:(Object Oriented,OO)是一种以事物为中心的编程思想.面向对象是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物的整个解决问题的步骤中的行为.

 

     面向对象是一种自下而上的程序设计方法.不像面向过程设计那样一开始就需要用main概括出整个程序,面向对象设计往往从问题的一部分着手,一点点地构建出整个程序.面向对象的程序设计牺牲了运行速度,在复用性和扩展方法做的比较好.在需求发生更改,或者某处程序出现错误的时候不需要牵一发而动全身了,只修改一处的代码就可以了.面向对象的程序设计最后维护的时候不会把自己给恶心了.

 

     面向对象设计以数据为中心,类作为表现数据的工具,是划分程序的基本单位.而函数在面向对象设计中成为类的接口.在面向对象的设计中,每个对象都是独立的个体,其他的对象发生了变化,只要接口不发生变化,对象都不会受到影响.

 

     以上是对面向对象和面向过程的一个理解.在学习的第二年我们就开始学习面向对象的思想,学习面向对象的理论.但是真正用到实战中,我们确实打着面向对象的旗号,干着面向过程的事情,我总结了一下,主要可以从一下六个方面来说:


1.小农思想


     先来解释一下什么是小农思想:为满足个人温饱,在一小块地上自耕自作,无约束,无协作,无交换.在写代码的时候,我们只是想着怎么去做自己那一块的内容,做完就是好事,不会考虑到自己做的这一块是否别人也会用到,别人用到的时候是不是可以直接调用我封装的方法呢.就拿我做过的一个档案管理系统系统来说吧,一共10个页面,其中会用6个页面会用到导入和导出这个功能,但是做的时候,从别处找了一个demo,研究研究就放到系统中了,然后其他人需要导入导出的功能的时候,就从我这里复制然后修改修改



2.学习当任务


     把学习当成一个任务,做事的时候不会抱着一种积极的心态去做,想着把自己负责的那块代码的复用性和扩展性发挥到极致.只会把分配给自己的那个模块找资料,demo做出来就行.做完就万事大吉了.把每一个学习的机会当做一个任务,时间长了会让自己变成一个只会写代码的机器人.



3.简单事情复杂化


     常说把一个困难的是分解成一个个小块,所有的事情都不是问题.也许是我们的大脑太聪明了.总是喜欢把简单的事情复杂化.就如做一个下拉框来说,下拉框的职责就是绑定数据然后选择数据.别人给我们送来什么数据,我们就绑定什么数据.但是我们就会把下拉框想的很复杂,比如说会考虑别人会送来什么数据,数据的格式是怎么样的.会不会涉及到级联查询的问题一个个问题的堆积,最后的结果是封装这个下拉框太让人恶心了,不做,爱怎么的就怎么的吧.



4.概念累积不够,理解不透彻


     毛泽东曾说:不能低头拉车,不抬头看路.我发现我们很多时候就是在低头拉车.只是想着怎么多练习一点代码,多懂点技术上的内容,然后让自己写出的代码好.但是我们总是忘记抬头看路.在写出一手好的代码之前,我们需要的是深刻的理解理论,中国共产党还以马克思列宁主义,毛泽东思想,邓小平理论和"三个代表"重要思想作为自己的行动指南,而我们在学习的时候总是把前因给忽略了,只想着后果.总是感觉理论的内容不懂,不懂就不想学习了.而且理论性的内容总是很枯燥的,都不愿去学习,学习理论性的内容看不见摸不着的,没有成就感,而写代码就不一样了,通过代码的组合,能够做出自己想要的效果,特别能够让人感到成就感.



5.眼界过于狭窄


     米老师常说一句话就是"不怕不知道,就怕不知道".同时老师要求每个月都看博客,这个是为了我们好,老师的想法就是让我们扩展着自己眼界.眼界过于狭窄,知识面过于狭窄,仅限于我们在书本和视频中学习的那些内容,是远远不够的,想要做出一个优秀的软件,那真的是难上加难.现在我们做的软件,能够抽象出来的很多还是后台的代码,把后台的代码从藕断丝连中解放出来,但是UI层的代码,只要用到相似的页面还是通过复制来完成的,其实在牛腩新闻发布系统中,他交了一个很好的方法--母版页,但是在后期的实战中,我们又忘得一干二净了,这是我们见过的.还有我们可能没有见过的,使用mvc模式来对UI层进行解耦.眼界问题可以说能够决定你一生是否做出一款好的软件.


6.面向过程更加符合我们的思维


     我们为什么会打着面向对象的旗帜,干着面向过程的事情,我想这点是一个很好的依据.先做什么,然后做什么,最后做什么,这是从幼儿园开始,老师就开始教我们的内容,十几二十年的思想从小就形成了,而面向过程的这一个设计又刚好符合我们的思维,所以我们都不愿去改变,因为用面向过程的方式设计软件在初期会让我们感觉特别舒服,到后期的维护肯定不会在是自己维护了,但是面向对象的设计会让我们前期感觉特别困难,改变总是痛苦的,所以我们就不会再去改变.不愿意去改变是我们打着面向对象的旗帜干着面向过程的事情的根源.

 

     前段时间老师办公室,老师问我什么是泛型,什么是抽象,这些内容我只能模糊的回答出来,关于它的官方且核心的解释我真的是回到出来.而且当时我还是正在使用着泛型,没有去注意过关于泛型的理论知识.想想为什么自己在理论知识方面会如此的缺乏,以上的6点可以做一个解释.其实说到底自己还是不愿去改变自己思考的方式,还是按照自己惯有的思维进行学习和思考问题,这就是我们为什么会在痛过一次次后,好了伤疤忘了痛后,还是打着面向对象的旗帜干着面对过程的事情.



0 0
原创粉丝点击