OO第二作业周期总结
0.前言
本次作业周期共有三次作业,第一次作业包括水文数据校验及处理、蒙特卡罗方法求圆周率、图形继承。第二次作业包括图形继承与多态、一元多项式求导。第三次作业包括图形卡片排序游戏、图形卡片分组游戏、求素数。
1.作业总结过程
①总结三次作业之间知识的知识迭代关系;
第一次作业的知识点主要有正则表达式的运用和对继承的初步理解,第二次作业进一步强化对正则表达式和继承的理解及运用并引入了抽象类和多态的概念,第三次作业则综合了类的继承多态、抽象类和接口等概念,进一步深化了对面向对象编程的思想的理解。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;
第一次作业的水文数据校验及处理将所有数据封装在一个类中,方便数据的存储与使用;第二次作业图形继承与多态中的CIrcle类、Rectangle类和、Triangle类都继承自Shape类,避免了代码的重复书写,对于输入的不同创建的对象不同也体现了面向对象的多态这一特点;第三次作业则进一步体现了这些特点。
③作业过程中遇到的问题及解决方法;
第一次作业的水文数据校验及处理中我对于正则表达式的理解不清楚,不知道每个符号的含义,后来花了很长的时间反复查阅才有了一点点认识,能够运用一些正则表达式解决问题;对于这一题的如何输入我也产生了一些问题,不知道是单个数据输入还是输入一整行数据,也没有理解如何使用数据类。
第二次作业图形继承与多态中我不知道如何就对象的某个属性进行排序,后来查阅资料得知有两种方法:重写Comparable接口或使用Comparator类。一元多项式求导这个题目中,我一开始对于每个类的作用和类之间的关系不是很清楚,后来通过老师的讲解有了一定的认识。
第三次作业图形卡片分组游戏问题中如何分组纠结了一会,后来采用每个图形类创建一个ArrayList数组解决了这个问题,此问题中只输入0的测试点一直无法通过,后来得知结果要输出“Wrong Format”。求素数问题中采用两个循环无法在规定时间内运行出结果,后来网上借鉴了一个方法,创建一个boolean数组,全部设置为false,把2、3、5等的倍数设置为true,计算boolean数组中false个数就可以知道有多少个素数了。
④每次作业花费的时间比例;
第一次作业没有全部完成,在第一题上面花费了很多时间,然而还是没有解决,第二题和第三题花了几个小时解决;
第二次作业也没能完成,两题均没有得到满分;
第三次作业一天做一点大概两天完成;
⑤对编程过程严谨性的认识及教训;
编程之前一定要明白每个类的作用和他们之间的联系,理解清楚题目的含义,对题目需求有一个大体的认识,编程过程中一定要边编写边测试,遇到程序出错要多调试,我在编写程序时经常会出现空指针和数组越界的问题,往往要花上很长的时间改正这些错误。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
封装是在问题中抽象出类,将数据及对数据的操作封装在一个类中,内部的隐藏属性无法被外界直接访问。继承是在已有的类的基础上派生出一个新的类,这个类中不仅包含自身定义的属性和方法,还包含了父类的所有属性和方法,提高了代码的复用性。多态则表现了对于同一个类,不同的实例执行的操作不同,根据输入的数值不同,父类可以创造出不同的子类对象执行不同的操作,大大提升了程序的灵活性。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一职责是指一个类只有一个功能,只能有一个引起其变化的原因,如果每个类都有多种职责,那么一个职责的变化可能会影响这个类完成其他职责;“开-闭”原则是指面对扩展开放,面对修改关闭,这样对于代码的维护工作带来很大的便捷。
③OO编程思维的理解;
我们会发现有些时候解决一些问题采用面向过程比面向对象要简单,但问题在于一旦题目或者说需求稍有变更,这时候面向对象设计的优点就体现了出来。面向对象的基本单元是对象,而面向过程的基本单元是函数,一旦需求变更,函数往往无法继续使用,需要重新编写,而主体对象不会改变,只需稍作调整,向不同的对象发送命令即可,这大大减少了程序员的工作量,提升了编程效率。
④类设计心得
类的设计要符合面向对象设计的五大基本原则,每个类的设计都要做到单一职责、独立、能够复用,对于同一个题目可以思考不同的类设计方案,比对每一个方案的优缺点,可以综合设计出一个最优的方案进行编程。PTA作业中老师也会给出类图,可以自己先考虑类的设计方案再看看老师给出的方案,分析两者的区别,优缺点,再进行设计方案的改进,最后编写程序。
3.测试的理解与实践
①测试对于代码质量的重要性;
程序的“好坏”看其是否能够通过测试即可得出,一个完整的、好的程序很难一次就编写完成,要通过不断的测试,找出代码的问题加以改进,程序不仅仅要对正确的输入给出相应的输出,还要判断不合法的输入给出提示,测试时提升代码质量的一个非常重要的手段。
②查阅资料,假设使用Junit进行程序的测试是否可行;
可行。
4.课程收获
本次作业周期接触了面向对象的继承、多态、抽象类、接口等概念,通过老师上课的讲解及对PTA作业的思考,我对面向对象思想有了更深一步的认识,并且能够运用面向对象思想解决一些问题。
5.对课程的建议
①第三阶段作业难度、题量的建议
考虑到只有一周的时间,并且还有其他的课程和作业,作业难度和题量可以适当增加,但幅度不宜过大。
②课程内容讲解方面的建议
老师在发布PTA作业前可以适当讲解一下PTA作业中一些没有学过的知识点,如之前作业中的正则表达式及Comparable接口等,如果完全自己查阅资料会花费比较多的时间,对于这些概念的理解也会比较模糊。
浙公网安备 33010602011771号