第二阶段的总结
前言
本次博文是针对第四、五、六三次次面向对象程序设计作业的总结
作业包含Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算,实现图形类的继承,并定义相应类对象并进行测试,类的继承、多态性及其使用方法以及接口的应用。
1作业过程总结
①总结三次作业之间的迭代关系
第四次到第六次作业,难度逐渐下降。
第四次作业:主要考察的是Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算,主要是正则表达式的使用,数据的多层次处理等,再额外考察了简单的图形继承;
第五次作业:主要考察的是类的继承、多态性及其使用方法,主要是图片的继承和多项式的求导,进一步熟悉类的使用意义,从而体现出面向对象的特质;
第六次作业:主要考察的是面类的继承、多态性使用方法以及接口的应用,通过对第二次作业的逐步迭代,逐步抽象,用面向对象的思想逐步重构第二次作业。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
在第五和第六次作业中,从面向过程的图形定义迭代到第三次作业面向对象的图形类的继承和多态,没有封装的图形定义在思考和编写代码时较为简单,但具有很大的耦合性,代码中各部分关联较大,且只能顺序完成单一功能,一旦出现需求更改,几乎难以修改代码。而封装好的继承对象将各特性抽离出来成为类与方法,使其解耦,通过对象之间继承和多态行的操作完成所需功能,复用性好,扩展性强。
③作业过程中遇到的问题及解决方法
主要问题
第四次作业中的第一题,在正则表达式的运用上出现了很大的问题。主要在于数据的拆解处理和数据的校验处理。
解决方法:在网络上查找日期的正则表达式,但是在闰年二月的校验上无法过关,而后利用正则表达式把数据二次拆分才得以过测试点。
第五次作业中的第二题,同样是正则表达是的运用上出现了问题,但是与此同时无法把拆分好的数据成功合并又找不到bug在哪导致程序出错思路紊乱。
解决方法:未解决。
④每次作业花费的时间比例
三次作业所花时间比列接近5:5:2,在对象的封装性、继承性与多态性三大技术特性上几乎很快领悟。
⑤对编程过程的逻辑严谨性的认识及教训
主要还是对于第五次作业的第二题的教,编程过程中,如果不注意思路的顺畅,程序逻辑一旦复杂,则耦合性会出现很大的问题,会导致码段过长,定位困难的事故。所以在思路设计时要十分注意上下连接。
2 OO设计心得
①对面向对象三大技术特性之间关系的理解
1. 封装——对类里面的成员变量通过使用private修饰符进行隐藏,通过使用public 修饰符来编写它们对应的方法来进行访问和修改。将不同的职责抽离出来封装到不同的类中.可以实现对代码的解耦;
2. 继承——如果子类继承于父类,子类继承父类非private的属性和功能,子类具有自己的属性和功能,即父类没有的属性和功能;第三,子类还可以以自己的方式修改父类的功能;
3. 多态——多态表示不同的对象可以执行相同的方法,但是不同的对象对于方法的实现不同,操作就可以不同。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
1. 单一功能原则:
单一职责就是一个的类只干一件事。每个类只负责一个职责,如水文校验中,CheckData类只负责检查数据,水文信息类只负责保存信息。在实际运用中,类的单一职责不一定很容易实现,可以退而求其次,使用方法的单一职责原则;
2. 开闭原则:
在设计的过程中,应该逐步抽象出更高级的抽象,在新功能或者调整出现时,只需要扩展和很小的修改,尽可能的减少修改。
③OO编程思维的理解
面向对象是对世界的抽象,它将存在的事务抽象为一个类,这个类具有属性和可以完成的功能。如人类:有身高性别年龄名字等等等属性,可以完成送外卖送快递搬砖写代码等功能,但是类不能帮你完成事务,需要一个实例才能。比如某一个人可以送外卖,但人类本身不能去送外卖,需要实例一个外卖员,才能完成功能。类只是个定义,干活的是对象。
④类设计心得
在类设计时,如果类是通用的,可以设计一个接口或者抽象类定义规范,实现代码的复用和接口的规范,在存在依赖关系时,尽量依赖接口和抽象类,具体逻辑只负责实现。
3 测试的理解与实践
①测试对于编码质量的重要性
往往在编码完成后,由于设计和编码过程中的不完善和问题,会在一些情况下出现无法得到正确结果的情况,有时候错误隐藏的较深,没办法直接看出来。要保证程序的健壮性和正确性,就需要测试,将可能存在的错误找出来。
②查阅资料,假设使用Junit进行程序的测试是否可行
可行, JUnit 是一个 Java 语言的单元测试框架。对于所要测试的类创建测试类,在该类中输入数据即可进行测试。
4 课程收获
在写了很多次关于图形的作业后很快吸收了继承和多态的意义,从这个角度出发,让我领会了面向对象的意义。同时我也学会了正则表达式的使用,这让我知道了知识的萃取不能光依赖老师的讲解,我们需要及时在网络上查阅相关资料来获得知识。总之我的代码水平在这三次作业中得到了很大的提高,解决问题的独立性也因此增强。
5.对课程的建议
①第三阶段作业难度、题量的建议
难度不要偏重于单一的部分,不要像第四次作业的第一题水文校验一样,大部分时间都用在了对数据格式的验证上,实际上实现功能并不难,但是大部分时间花在了编写正则表达式上。题量两三题即可,代码的完整性还是很重要的。
②课程内容讲解方面的建议
老师讲的很好,希望在代码和类的设计理念上能有不同角度的讲解。