OO第二单元作业总结

第二阶段作业总结

前言:本次总结针对的作业相比第一阶段的难度增大许多,更综合性了。运用了更多的类的知识,除了对象的使用层次加深,在用对象的基础上还引入了继承和抽象的使用同时也引用了正则表达式,对我们编程的规范性,可复用性,单一性职责要求更大了

作业过程总结

  第一次作业是对象列表的排序及水文观测的,用到的知识点是类Collections包及对象的使用,多态,字符串分割及正则表达式还有继承的初步运用,第二次的相类似,是对第一次作业形式的延伸及加强。但从第三次作业开始则引用了抽象类。

  三次作业中封装和继承的最典型应用是图形求面积,不同的对象类型有不同的属性类型,相互间不能随便调用各自的属性,以杜绝滥用的情况,对象相关的属性调用只能对号入座,然后,就算对象间是同一类型,也必须要有区别。看的一个关于继承的比较幽默的比喻就是“儿子可以去继承父亲的财产及其他一切非private类型的属性及方法,但是却不能继承父亲曾经写的情书,如果要看也要需要经过父亲的同意”,这个同意的渠道就是通过父类gettter方法来获得父类对象的私有属性。关于多态,在第二次作业第一题有所体现,所有图案图形都继承自类Shape,Shape类里面有求面积方法,求周长方法。然后继承了Shape类的其他图形子类自身也有自己的一套求面积周长的方法,各子类只需在自己类里重写求面积周长的方法,然后new对象的时候向上转型成父类类型,然后可以将所有子类对象都保存在父类类型的变量数组里,再要用到对象的方法时调用这个数组的所有内含对象的方法,这时就会自动去选择调用相对应的子类对象的方法,比如求圆形,矩形的方法都不同,但如果是一个转为父类的圆类对象,那么调用圆的转为Shape类型的求面积方法,就会自动用求圆形的面积的方法,如果是矩形的,则用矩形的。

遇到的困难

  三次作业中遇到的最大的困难及挑战就是第一次作业中水文观测中的正则的使用了,要完全学会它可真不是一件容易的事。刚接触到正则表达式是在老师的课堂上,在那次课上,老师给我们介绍了数字和任意字符的正则的使用,在此之前我可是只知道换行和回车符的,收货老大了。然后PTA上的作业除了老师讲的那几个简单的外,还有其他更复杂的,这让我感觉无所适从,不知道怎么下手。但真正的勇士是需要勇于面对挑战的,于是我看起了菜鸟教程里的正则。通过看菜鸟教程,我学到了许多新的正则语法,用于PTA应该差不多够了,但是学归学会不会用又是另一回事了,先是写在代码中,无法判决水文记录中各种的不同,包括数字间有无空格,以及日期格式的判决和数字里有无空格,总之一开始写正则把几乎所有的都考虑进去了。于是乎正则表达式相当的长,最后检查其错误来也是相当困难。内心心态真的炸了,进也不是退也不是,这个时候,好朋友向我推荐了正则表达检验网站,有了这个工具我就可以分步对每一部分进行检验了,然后我也改变了之前的策略而改变为在代码里每个部分正则都分开来。事实证明,这样容易检验,会给debug过程带来很大方便。

  这一阶段中第一次作业花费时间比率大约为7:2:2,主要是第一题太耗时间了。再第二次作业里花费时间比率约为2:5,也几乎是正则和各种情况的检验耗费太多时间了。第三次作业偏简单,做出了第一题第二题也马上可以做出来,第三题加分题,考算法,问题不大,时间比率大概为3:2:1

  对于编程过程的认识,其实像老师讲的那样,学习Java最重要的是学会设计,学会设计Java的结构及实现方式才是Java学习的核心。每次编程时都应当尽量多的往单一职责,可复用性和开闭原则上考虑。不要把许多的功能实现都集中在一个方法里,那样不仅显得复杂而且不容易修改。这个阶段的作业完成是没有在这方面做好,今后得“三思而后行”才能把原来的习惯给改掉了。

OO设计心得

 

  在理解多态和继承上我是通过农夫过河这个问题来思考的,继承的目的其实就是把属性差不多相同的归结为一类,这一类里面必定是有相同性质的东西的(包括行为和动作),像农夫过河这个问题里面除白菜和船外,都是有生命的动物(当然人严格来说也是),是动物就有移动,进食等的动作。那么我们就可以把这些归为一类,具体的行为的差异的话我们就可以通过方法的重写和用多态的性质对对象进行向上或向下的转型统一去调度,对应对象的不同就有行为的不同。多态通俗理解就是比如说电脑上不同的快捷键在不同的软件(如wordps上)是不同的用法。

  再来说说单一职责原则,我的理解是整个程序是一个大公司,每个方法对应着公司里各个部门的员工,他们各尽所能把自己职责范围内的事情做好,从不越俎代庖,不然就算你能力再强,你同时身兼数职也会累的身心俱疲而且还处理的不怎么好的。

  关于开闭原则,就不拿公司举例了,很好的一个比喻就是一个程序是一款多种卡片游戏,每个卡片的形状(多少个角或多少条边)厚度长短都不一样然后对应着它的一个共同游戏规则(可以求出形状的面积或边长等)。假如说这个规则对于三角形四边形适用,那么再加入边数更多的卡片进来这个规则也同样适用,这就是开闭原则的基本体现。

  对于编程思维的理解,现在的理解是OO编程是一个模拟和分类的过程,什么样的人对应着做什么样的事,对象就对应着现实生活中的一个实体,类的方法属性就对应着实体的动作行为。各个方法之间相互联系。

测试的理解与收获

测试是对程序健壮性的有效保证

JUnit最初是由Erich Gamma(GoF之一)和Kent Beck(xp和refactor的先驱之一)编写的

JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器。

Junit对于XP编程和重构是非常重要的,Junit对于程序的测试非常有效

课程所获

最大的收获就是知道了三大特性,Java的大门正向我们敞开。

对课程的建议

  出大作业的时候能不能别把最难的一题放在第一题,假如第一题开始没写出来的话,对于后面题目完成的打击是很大的,第一题很难那么自然而然就会以为后面的更难,那时候的心情,呵~真是绝望呀。难的题目放在中间或稍后点是合适的。

  建议老师多像讲农夫过河和雨刮器那样的设计程序的问题,这个对我们的帮助应该会比较大。

 

posted on 2020-05-01 18:42  |雨后De晨曦"  阅读(127)  评论(0)    收藏  举报