面向对象第一单元总结
前言
这三次作业中,前两次作业由于有开学的一些事宜耽误了很多时间,第三次作业由于非常缺少前面两次作业积累的经验和结构上的思路,在进行了三天的挣扎后并没有产生任何结果,只是初步实现了求导转化的一些结构,在输入处理上,正则表达式的实现方法用的非常不熟练,有限状态机实现起来会花费巨量时间,没有前两次作业的积累,最终导致了这三次宝贵机会的流失。这篇博客主要描绘一下我对于这门课的初步认识,以及对于java面向对象的一些不成熟看法,也许通过之后的作业和实验,我会对于java面向对象有一个全新的理解,非常期待。
正文
我这两天研究了一下gitlab平台上面上传的比较优秀的同学的代码,相应的建立了相关的类图,基本理解了优秀的面向对象程序对于具体问题的实现方法。以下主要写一下我对于该优秀作业的一些基本认识吧。
第二次作业设计思路
第二次作业较第一次作业多了三角函数因子,并且支持对乘法的求导。核心思路是将输入的符号串按照符号进行分项,提取到每一项的系数和类型,之后进行求导转换,进行合并优化,最后输出字符串。在进行分项前进行语法检查,在将空格和制表符替换为空之后,匹配正则表达式也替换为空串,这样如果最终得到的串是空串,那么格式就是符合的,否则错误。之后再进行符号化简,首字符‘+’号清空(为了最短的字符串)。字符串分项,转化为单个项,并且通过‘*’号将项内部进行划分,提取其单个因子,获取其中的系数并存储进stock(其中对三角函数进行了转化,以方法进行区分),之后只需要引入求导模块将系数部分进行转化,判别不同的因子进行不同的求导操作。这部分花费了我大部分时间去查找封装的方法,正是由于不了解这些方法,限制了我实现相应的功能。之后进行字符串合并并且简化(合并同类项,0项清空)输出就可以了。
类图
可以看出来其实类与类之间有很多关系,而且比较复杂,但是却是很完备的程序流程,而且各个阶段细化,方便后续功能的添加和代码的维护,这很符合面向对象的思想。
心得体会
通过查看优秀同学的代码,我能够初步了解到java编程中会遇到的各种问题,包括对于分类的把握,对于整体调度的把控,以及对类内部数据的保护。虽然前几次作业面向对象的思想还不是很到位,但是通过接下来的实验和课下作业一定会加深相关的印象。我个人在学习java语言的过程中也渐渐体会到Java与之前学习的C语言之间的区分,通过对对象的封装可以起到维护的作用,并且在调用的过程中只需要记住对象属性和方法就可以,相较于面向过程式编码会非常方便,只不过需要在单独的类中花功夫控制好相应的元素属性和方法。愿接下来的实验一帆风顺。