0.前言

本次作业的基本内容:第一次作业:通过使用面向过程的思想来编写诸如求一元二次方程问题,求日期等等问题。

第二次作业:通过将之前的算法逐步改写转换为面向对象的思想。

第三次作业:将之前的面向对象的思想具体实现和优化,编写完整的代码。

通过三次作业的迭代过程逐渐将面向方法的思想转变为面向对象的思想。

1作业过程总结

从三次作业看来,第一次作业是停留在面向过程的思想,通过简单的c语言的面向过程的思想来对问题和需求进行分析,设计出解决方案并具体实现,采用面向过程的方法来直接解决问题。而第二,第三次作业则是以面向对象的思想来考虑问题和分析需求,它将原本一个个独立的变量和方法联系在一起,相互之前形成有机关联,这样将传统的变量和函数,方法立体起来,变成一个个对象,这不仅让整个逻辑更加清楚条理,也让编写出的程序具有更好的稳定性和通用性。

那么,如何通过这几次的作业逐渐的从面向过程的思想转变成面向对象的思想?首先,我们要了解两种思想的区别与特点,同样的三次作业,需求是一样的,但解决方案却不尽相同,这样就会有不同的效率。面向过程的思想效率要比面向对象的思想要高,因为面向过程的思想直接从问题入手,可以很快的分析出其中的需求,并提出解决方案,而面向对象则不同,它通过首先分析需求,然后考虑这些需求的共性,当完成需求分析时,再将整个方案进行规划,然后具体实现。这么做确实要比面向过程复杂的多,但它也有自己的好处,就是这样编写的代码具有更好的协调统一性,并且可以重复使用,及在相同的需求下,可以保持代码的复用。其次,在完成作业的过程中,也更近一步的认识和体会面向对象的思想也是十分重要的,面向对象的思想也更加贴切生活逻辑,比如类的使用就很形象的代表了生活中的一个个事物,当我们用面向对象的思想来分析需求和规划解决方案时,我们可以联系生活实际,在进行类比,推理,通过这样的方法,也可以进一步提升我们的编程能力。
当然,思想的转变不是一下子就完成的,它是通过不断的理解,不断的尝试,和推导一步步形成的,这要求我们要认清面向对象思想的本源,从根本上看,它是一种分析和解决问题的一种思想,它也不是完美的,有自己的优势和缺点,比如,作业中的一道题:输入一个日期,求它的下n天和前n天。这道题用面向对象的思想来看,就要设计至少3个类,年,月,日,每个类都是独立的,只负责自己的任务,但仅仅这样是不够的,因为这些类之间相互是有联系的,所以,要如何确立这些类的相互之间的关系是一个大问题,不同类之间的逻辑关系不同,它们之间也有不同之处,也有相同之处,如何联系和协调这些类也是一个问题。因此,将这些不同的类统一起来,就需要用到类图,类图是一种结构,关系图,它通过图表的方式来表达类与类之间的关系逻辑,逐步形成一个协调的,互相关联的关系链或关系网,类之间的相互协调,作用,形成了一个有序的程序。

要完成这些作业时间是必不可少的,但也要合理的安排时间,我大部分的时间都花在对类的逻辑需求分析上,为了弄懂一个个类之间的关系,我查阅了很多资料,也询问了同学和老师,最终定下方案后,编写代码并不占用多少时间,但一个程序并不是一次就可以完美通过的,它还有bug和未实现的功能,为了完善功能和修复bug对程序进行调试也花费了不少时间。

因此,在设计和编写程序时,必要的逻辑检查,和输入校验是很重要的,它可以使得编写的代码更加严谨,减少运行错误,提高运行效率是至关重要的,它也可以减少出错,细心是编写代码严谨的一个优秀品质,因此,在编写代码时不能过分追求速度,而忽略了代码的质量和内涵。

2OO设计心得
从这个几次作业来看,一个核心的思想便是了解和掌握面向对象思想的方案,不同于面向过程,面向对象设计有许多不一样的规则和原则,比如单一职责原则,及一个方法实现一个功能,不同的方法相互之间是不互相干预的,这样也有一定的好处,比如,在调试程序时,某个地方出了问题,可以快速找出问题存在的出处,由于每个方法相互独立,这样对于修改和完善各个方法也提高了不少效率。其次,为了更好的锻炼面向对象的编程思维,必不可少的就是不断的尝试和训练,举一些生活中的例子,比如编写一个程序,实现构造一只小狗,小狗有自己的状态,行为。或者是构造一个生产线,一个产品的产生需要一个个的流程,加工,处理,不断完善,最后形成一个可以出厂的产品。这些东西的编写都是面向对象的,有一个具体的客观事物,它有自己的行为,状态,能力,特性等等,而不同对象之间也具有一定的关系,它们相互协调,最终形成一个功能齐全,完整成熟的体系,而这个体系也具有很好的稳定性,一个健全的体系可以用来解决很多不同的需求,不同的问题。就像开一家快餐店,客户的需求是不尽相同的,但是快餐店却可以提供不同的方案以满足不同的客户需求,这就是一个完整,健全的体系,这这是面向对象设计的一个极大的优势。
除了形成一个完整的体系之外,面向对象的设计还有许多特性,如封装性,复用性等等。这里提到封装性,我简要的说明一下我的理解,举个生活中常见的例子:“包装,隐蔽”。想想看,为什么别人写出来的东西不可以直接拿来使用?为什么在网上购物时,买的物品为什么不是直接拿到手上,外面还有着一层层的包装?因为这样做是为了更好的保护内部的核心物品,同样也是为了保护隐私。编程人员编写的代码是无法直接看到的,这样也是为了保护知识产权防止不良人士的盗用和非法修改。举一个由于封装性不好导致的悲剧:由于网络游戏DNF(台服)的监管不善,导致在封装性方面存在漏洞,导致源码外泄,而许多玩家利用反编译工具和编写代码工具修改程序内部,导致了游戏外挂横飞,最终服务器不得不宣布停服。所以,有着良好的封装性也是维护软件的安全性和长久性。


3测试的理解与实践
在编写代码时,我也遇到了几个毕竟棘手的问题,如:空指针错误,数组异常等等,为了解决这些问题,我首先使用单步调试程序来进行诊断问题出处,当我找到了问题出处时,可我又不知道该如何解决问题时,我便求助老师,同学,和网络,最终解决这些问题。但还有一些问题无法用这样的方法解决,那就是算法的优化,同样一个需求,不同的算法解决问题的效率也不同,如:对求计算后n天这样一道题目来看,就有三种可选方案,一,写出一个解决求下一天的方案,然后循环执行n次,得到结果。二,求出当前日期距离某个基准日期的天数,将这个天数加上n天,得到要求的结果。三,在方案一的前提下,多进行一次筛选,当n超过年长时,先以年为单位推进时间,然后在以天为单位推进时间。对比三种方案,由于我已经求出了求下一天的方案,因此用第一种或者第三种方案比较省事。我先采用第一种方案编写程序,但得到的结果的时间超出了限制,原因是循环时间过长,为了改进算法,我采用了第三种方案,第三种方案需要在年与天的推进节点上进行衔接处理,但最终第三种方案证实是有更高的运行效率,更少的内存占用。

 

4课程收获
由于oo对于程序的封装性,协调性具有很大的优势,因此,在学习这门课程中,了解的面向对象思想是极有好处的,它方便我们在日后的进一步学习实践中有着至关重要的作用,它也帮助我们有一个更好的思想来看待问题和提出解决方案,当然,任何一样东西都不是完美的,只有多方面的看待和思考问题,才能从一个更全面的角度看待问题,学会使用不同的工具,成为一个多面手,才能有一个更系统,更周全,更成熟的解决方案。
5课程建议
我认为,想要学好这门课程,需要的是更多的实践,认真的观察,当你对某个东西有所思考,问什么这个东西是这么做,当你能够熟练的掌握面向对象的思想方法,我相信你一定是一个优秀的程序员。

版权声明:本文为mp40原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mp40/archive/2004/01/13/12624607.html