0.前言

本次博客撰写是针对于前三次的作业的一次总结性的内容。

1.作业过程总结

①第二阶段第一次作业7-1是水文数据校验及处理问题,这题目是现阶段遇到最复杂的题目没有之一,这主要是一个正则表达式的问题,虽然单这个方面不是很难,但放到这个题目当中来,显得很复杂。7-2蒙特卡罗方法求圆周率问题,这是一个很新颖的问题,第一次见到这个方法,这一题主要是搞清楚类与类之间的关系。7-3图形继承问题,这是学习继承以后的第一次使用继承以及多态来解决问题,也发现他的好处。

第二次作业7-1图形继承与多态问题,这一次的继承问题与上次的差不多,但是他多了前面的选择,通过if或者switch可以实现,又多了sort方法的使用,虽然自己是用的事最简单的冒泡。7-2一元多项式求导问题,这题我知道他又是一个正则表达式的问题,但是自己不会动手,直到现在都不知道这题咋写。

第三次作业7-1图形卡片排序游戏问题,这个题目也是与上次继承的题目类似,但这个题目更复杂,他其中多了很多类,有card去装形状,还有第一次去接触compary to排序方法。7-2图形卡片分组游戏这题与上一题很类似,就是输出的时候不一样,其他的方法都挺类似的。7-3求素数的个数,这题是个加分题,看谁的代码更优质,这个题我一开始想用输出装int类所有的素数但是最后没有成功,只用了一般的方法。

②封装性:这是java一个很棒的的东西了,他有时候会帮你将一个类自动转化为另一个类,很方便,就比如写那个图形卡片问题,他有一个shape类,然后circle,rectangle,triangle等类继承他,然后有时候我们想用到形状求面积,但是我们也不知道他什么形状,我们可以直接调用shape来实现所有的子类,他会自动封装成你想要的子类,这方法就是自己多写了几个题目体会到了其中的奥秘。

继承类:这个方法并不难,但是里面有一些细节,比如一个长方体继承长方形,他比他多了高,在构造函数是,长方体没有private长宽,我们需要super(width,length)调用他的父类构造函数然后再加上自己的高构造函数来解决这个问题。以及一个类只能继承一个类,单根继承。

多态性:我觉得这个与封装有点类似,就是通过父类来完成他的子类的引用。

③一开始第一次作业第一题我就不会写,对于那种类之间关系较复杂并且类的方法很多的题目没有啥思路去解决他,但是自慢慢的去问同学,去琢磨,慢慢的完成了一步步然后解决。第二题,就是一开始丢豆子的坐标有点没懂,一开始以为一个很大的坐标面里面有个单位圆和一个2x2的小矩形,不知道怎么下手,后面知道了,坐标面为2x2的矩形将豆子全部放在这上面,然后将圆中的豆子除于总豆子数,用rondom去实现矩形的坐标。第三题,继承的问题,构造函数一开始不知道会会默认调用父类的无参构造函数,然后自己想一想上课的super构造有啥用就想通了。

第二次作业第一题,一开始没有主函数没有啥思路,因为前几次写作业都有主函数,然后将里面的类解决就好了,这次没有给主函数有点不适应,然后自己慢慢摸索也还是解决了。第二题的话,那个正则表达式在CSDN搜到了但是自己没有什么思路去写这个题,所以谈不上遇到什么问题,就是自己混了点无效输入得了点分。

第三次作业第一题,首先遇到了第一次实现comporable接口问题,不知道他其中的降序问题怎么解决,然后为什么sort用collection.sort方法,然后自己去查CSDN发现,comporable这个接口是collection的一个一个方法,解决了,还有自动封装问题吧自己想复杂了,但通过这个题目自己也理解了这个问题还有最后那个输入遇到前面加上Main。第二题就是加入这个符号的问题[],不知道怎么将他们分类,后面自己是重写tostring方法,然后equals去比较shape的tostring解决,一个个的去认证分类。第三题就是求素数的问题,一开始看到这是个优化的问题,想到将所有素数放到一个数组当中去,然后发现实现不了,内存不够,只能按照一般的的方法去解决他。

④第一次作业后两题比较简单,一两个小时就解决了,然后第一题写了好几天再加上问同学才解决这个问题。

第二次作业第一题花了一个多小时解决,然后第二题写了一天还是不会就放弃了。

第三次作业的话,自己花了半天去看视频看CSDN找方法,然后再用半天的时间去写代码,总体还是不错的,不过看视频花了很久时间。

⑤编程过程中的逻辑一直很严谨,自从自己学习C语言开始就发现编程这东西,还是一定要去动手,虽然他比较难,但是自己只要肯花时间去写去想去改去查,一般的作业是难不倒我们的,认识就是写代码就是要静下心来,不能浮躁,自己不会先在纸上写写看或者自己去找视频看看理解一下思路,然后自己一步步的来解决他,教训就是自己一定要多写代码别去无中生有凭空想象,那样会让自己更无法入手导致自己不敢写,还是自己要多动手吧。

2,OO设计心得

①封装:把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

继承:继承使得你可以定义一个通用的类(父类),之后扩展该类为一个更加特定的类(即子类0)。可以基于已经存在的类构造一个新类。继承已经存在的类就可以复用这些类的方法和域。在此基础上,可以添加新的方法和域,从而扩充了类的功能。关键字extends表明新类派生于一个已经存在的类。已存在的类称为父类或基类,新类称为子类或派生类。
多态:多态意味着父类的变量可以指向子类对象。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

②单一职责原则:这个非常好的实现了修改代码的机会,因为这样如果一个地方错了也不会导致全部错误,只需要修改一个地方,这是一种良好的写码习惯让自己以后会更好在工作当中解决错误。

开-闭原则:允许将子类类型的指针赋值给父类类型的指针,更好地实现不同的接口。

③OO这主函数不是很重要,主要是要搞懂他们类与类之间的联系,然后解决他们的方法,就可以将一个个的问题解决,主要是看UML图,然后理解他就好了。

④写类的时候一定要主要他们之间的联系,这是最重要的一点,只要解决了他们之间得联系你就可以很简单的解决问题,看又UML图吧。

3.测试的理解和实践

①测试:每次自己写pta都会是先到eclipse去写去运行,因为pta他不能运行代码,然后不会很好的知道自己的问题,然后每次使用eclipse时,输入样例自己就可以发现自己的问题,对症下药,简单的解决问题,这是很重要的,这个好习惯吧,然后多输入几个样例来解决问题。

②多使用CSDN吧,这个还是对于新手入门很有用,知识点又多又全。

4.课程收获

(1)学会了封装,继承,多态等方法。

(2)学会了collection类以及他的list和set的子类还有他们的子类方法等

(3)学会了正则表达式的运用。

教训

(1)要有良好的编码习惯。

(2)写面向对象时最好main函数主要全部靠类来解决,不然会很复杂。

5.对课程的建议

①希望题目可以简单点吧,前几次的几个大作业太难了,有时候不知道怎么去入手,或者题目可以跟我讲一讲思路,题量的话还行,毕竟题目也难花时间也不少在上面。

②希望上课可以多来点源码,以及可以讲讲难题,有时候pta过了就是过了啥也不会,很懵逼。