OO第二单元(5-8周)作业总结
0.前言
本次博客针对第二阶段作业情况做一个总结,主要是对面向对象的封装性、继承性与多态性的运用以及正则表达式的使用。
1.作业过程总结
第四次作业总结
就第四次作业而言,我们开始接触到了正则表达式的概念,这第四次正是对正则表达式的使用。第一道题是水文数据校验及处理,这道题把许多同学都难住了,由于里面的判断较多,表达式也很容易就弄错了,而且也是刚学习那会,可能对这个理解不太到位,所以觉得十分难处理;第二题是蒙特卡罗方法求圆周率,此题相对比较简单,题目要求设计多个类对题目解答,需要注意的是,这道题目的精确值需要正确,数据处理必须要用double类型,用int类型会报错,还是不算难的;第三题是图形继承,此题最好拿分,上课时基本都讲了,考虑你是否将继承的概念学习较好,并且部分地方需要保留小数格式,使用String.format保留。
第五次作业总结
就第五次作业而言,主要是对类的继承与多态的运用以及正则表达式的的深入理解与使用。第一题是类的继承与多态,对Circle、Rectangle及Triangle的类的创建,需要掌握类的继承、多态性及其使用方法,本次作业我们采用的是抽象类定义、实体类构建的方式,即 Shape 为抽象类,Circle、Rectangle 及 Triangle为实体类,相对简单,是继承与多态的基本运用,并且还有进行排序;而第二题则是继承、多态与正则表达式的综合使用,难度提升较大,算法也需要思考,由于开始没啥思路,所以花费时间较长,这里就可以看出算法的重要性了。
第六次作业总结
就第六次作业而言,将知识过渡到了接口的应用,并且将其与类的继承、多态性使用方法一起使用。第一题是图形卡片排序游戏,要求对卡片排序时使用 Comparable 接口,即 Card 类需要实现 Comparable 接口的CompareTo()方法且此题还需要使用排序算法,需要与第五次作业的排序算法进行对比;第二题则是图形卡片分组游戏,本次作业要求对卡片排序时使用Comparable 接口或 Comparator 接口,需要在第一题的基础上进行修改完善,总的来说难度还是加强了一些。
①知识迭代:
这三次作业主要都是关于类的继承、多态,后面的作业加入了接口的概念,知识不断深入,在类的设计过程中,需要对知识不断更新,每次作业都是对上次作业的一个加强理解或者说是运用,除去正则表达式外,其余几道题都是对类设计的不断完善,知识要不断学习。
②通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性:
Ⅰ 对象的封装性
我认为对象的封装性就是将对象的成员隐藏起来,不让其直接在类的外部访问,要通过一定的方法对封装起来的成员进行访问控制,面向对象的封装特性并不是不让成员被访问,而是要对其进行访问控制。至于为什么要对对象进行封装,我认为正是为了结构清晰,方便扩展也较容易找出程序中的错误。这个特性在每次作业中均要使用,正如Circle、Rectangle及Triangle的类的创建那道题,封装性就完美的体现出来了,对其使用较简单。
Ⅱ 对象的继承性
我认为,。当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接调用罢了。这道题中的circle,rectangle等类就是继承的体现,作业中理解较简单,但是还得深入了解其意义,掌握这一性质。

Ⅲ 对象的多态
我认为所谓的“多态”,简单的理解就是对象在不同情况下的不同表现,具体体现在定义和功能两个方面,、总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构建、接口定义实现类构建和抽象类定义实体类构建,而两个方法分别是方法重载和方法重写。正如第五次作业第一题我们采用的是抽象类定义、实体类构建的方式。即 Shape 为抽象类,Circle、Rectangle 及 Triangle为实体类。

③作业过程中遇到的问题及解决方法
我认为这几次作业关于正则表达式的题目都比其它题目难度更大一些,就拿那个水文数据校验处理来说,正则表达式的学习十分重要,如果没将其较熟练地掌握,写起题目来就十分费劲,当老师讲过后,自己仍然需要主动上网去学习有关正则表达式的用法。然后就说说排序算法,第五次作业与第六次作业都需要使用排序算法对面积进行排序,所以排序算法需要较熟练地掌握。最后就说说数据方面的问题,该用double就不能用int,这样pta的测试点一定过不去,到头来在eclipse上运行可能正确,但是在pta上提交可能就是错误了,有些测试点就过不去,还得自己去找找。
这些问题自己必须去处理,学习不够深入就上网多看看视频讲解或者教程,平常的学习需要自己去细心,多多编程,多熟悉,难的知识也会变得很简单。
④每次作业花费的时间比例
第四次作业开始加入了正则表达式,难度较大,思考较长时间,花费时间很多,第五次作业是正则表达式与类的继承、多态综合使用,当然也有较大地难度,相对于第一次而言还是简单了一些,因为有了前面一次的正则表达式学习,第六次作业相对比较简单,是对类的继承、多态的使用,加入了接口的概念,所以时间比例为3:2:1。
⑤对编程过程的严谨性的认识及教训
在这几次作业中,有些地方需要使用double类型的数据,而我在却用了int类型处理数据,所以pta上一直过不了测试点,因此也要吸取其中的教训吧,阅读题目一定得认真细心,不然最后解题时很容易就犯低等错误,拿不到高分,又浪费时间去查错。
2.面对对象设计心得
①对面向对象三大技术特性之间关系的理解
我认为封装性就是将对象的成员隐藏起来,不让其直接在类的外部访问,要通过一定的,方法对封装起来的成员进行访问控制;而继承性则是设计子类与父类,当子类继承父类以后,父类中声明的属性、方法,子类就可以获取到父类中的;而多态性则是,用简单的话来说就是对象在不同情况下的不同表现,体现在定义与功能上面。这三大技术特性都是相互联系十分紧密的,需要我们综合运用它们。
②面向对象设计的基本原则理解
这几次作业主要是对单一职责原则与开闭原则的理解与运用,我认为单一职责原则正是一个类只能包含一种功能,不能随意加入其他功能进入,这样就是破坏该规则,上次作业总结也总结了。而这次的开闭原则定义为可以增加新的类来完善,但是不能对原有的类进行修改,也就是可以增加新的功能,不能对原来的功能进行修改。在对一些新的类开放的同时,又对原有的类进行关闭,不可修改。
③面对对象编程思维的理解
学习Java两个阶段了,对类的理解需要透彻了,设计类可以很多很多种,对对象的类需要将其分解解决问题,从一个到另外一个,不像面对过程一样,面对对象由于具有由于继承、封装、多态的特性质性,使其具有易扩展的特性,所以需要深入理解面对对象。
④类设计心得
解决一个问题时,需要将类正确设计,且符合单一职责与开闭职责,用面对对象思维将其解答,对类的设计的正确是解决问题的根本所在,没有设计好类,问题很难解决。
3.测试的理解与实践
①测试对于编码质量的重要性
代码的测试点十分重要,在pta上给出的测试点正是一个一个的提示,每个测试点都对应了一个分数,所以代码的测试就十分重要了,没将代码测试做好,可能就需要自己去猜测,不断修改,到头来可能还是错误的,前面所花费的时间也就完全浪费了,做了许多不必要的功夫。因此,代码的测试对于代码的质量十分重要。
②假设使用Junit进行程序的测试是否可行
是可行的,JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。使用JUnit能够在一般情况下大大提高自己写代码的效率。
4.课程收获
在这第二阶段的学习中,我认为已经将Java的基本语法学习了,开始逐渐走进面向对象的设计过程中,逐渐理解了类的三大特性:继承性、多态性、封装性,这些性质能够快速帮助自己思考问题并且将其解决,相比前一阶段,自己的能力又提高了不少,解决问题的能力也提高了,对类的认识也更加深入了,程序的操作也熟练了许多,希望自己在以后的Java学习中更加认真吧,学到更多的知识。
5.对课程的建议
①第三阶段作业难度、题量的建议
我认为难度还行吧,只希望难度大的题目量不要太多,这样可能改错误花费时间过大,难易结合,这样我认为还可以。
②课程内容讲解方面的建议
我认为老师可以多多讲解例子,让同学们更加深入理解Java的一些重要的对象的概念,因为这有些比较抽象难懂。

浙公网安备 33010602011771号