OOPTA作业的总结

前言

该文主要是记录本人开始学习java面向对象设计课程所做的所有PTA作业的总结。

1.作业过程总结

第一阶段作业

从作业内容上来看,三次作业层次分明,第一次作业侧重于考查java基本语法以及对流程控制三大结构的考查,第二次作业在第一次的基础上引入了类和方法这些概念,通过具体题目中同一对象不同方法的方式逐渐加深知识,而在第三次作业中正式要求运用类这一概念开始面对象编程,具体体现在前两次作业所有方法都包含在public class里而没有其他的class,而在第三次作业中就要求运用class以及读懂设计类图并根据其内容来编程。

 

从思想上看,第一二次作业和上学期的面向过程设计的C语言作业相差不大,主要还是运用面向过程思想,具体就是运用一些简单的算法来完成题目的要求,而在第三次作业引入了类的概念之后,要求也不仅仅是指定的输入输出,而是增加了要求创建具体的类,通过类来实现程序所要达到的目的,类和对象,这便是面向对象设计最大的特色。

 

而在我看来,从面向过程到面向对象,最大的瓶颈就是如何消化类和对象这些概念,并将之熟练运用到编程中去,从时间上看,第一次作业在我理解了java基本语法后,全部完成只花了大概两个小时,但由于考虑不周,第四题和第五题测试点都没有完全通过,第二次作业后三道题目涉及到的解决方法略微有些复杂,加上调试的时间,总共花了大概六个小时,

 

而第三次作业,也就是被我视为瓶颈的一次,除了第一题花了不到一个小时,剩下三道题目合计用时超过了20小时,这还是在有计算日期类题目的经验基础上的用时,大部分时间是用于不同类之间的调用上,没有好好理解类的相关知识,导致耗时太久,这也是我称它为瓶颈的原因。

 

在第一次作业中,第一个遇到的问题是如何按照格式输入数据,由于受到C语言输入方式的影响,不明白Scanner的详细用法,在网上查阅相关资料后才得以了解,之后的解题过程就轻松了许多。在第二次作业中,主要的问题还是计算日期的算法设计,在第二题判断星期几的环节,我选择用输入日期的年份与0001 1 1相差的年份n*365或366(根据是否闰年判断)再加上该日是该年的第几天m得出相差的总天数,之后就是完善代码以及查找漏洞,在确定自己的思路没有错后几次输入都得不到预期结果,于是通过debug追踪值的变化检查哪个环节出了问题,三四题如法炮制成功解决。第三次作业最大的问题还是各个类之间的方法调用和数据传递,例如在写第三题时getter方法没有运用好导致输出格式有误,由预期的年-月-日变成了月-年-日,然后发现是类的方法误用了。之后还有各种小错误,通过深入了解类的相关知识得以解决。

第二阶段作业

这一阶段的三次作业同样是层次分明,知识逐渐深入,第一次的三道题目难度递减,第三题是继承的简单运用,只需要了解继承的概念和基本用法,第二题则是要求除了继承的基本知识外还要有能够读懂类图和题目,了解蒙特卡罗方法求圆周率的具体实现方式,而第一题又在第二题的基础上增加了对正则表达式的考查。第二次第一题在继承的基础上增加了对多态性的考查,第二题则是深化对正则表达式的理解。第三次作业的前两题都是在继承和多态的基础上增加了接口.知识层次逐渐上升.加分题则是考查算法优化。

第三阶段作业

这一阶段的作业虽然每次都只有一题,但每题的难度都比较大,第一次的雨刷器扩展设计已经算是简单的工程应用,第二次和第三次更难,第二次我没有完成,第三次在网上浏览了很多相关的代码以及借鉴了室友的才勉强完成。

②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性

封装,是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过getter和setter方法封装起来,这一特性从学习了类的知识之后的题目中就开始体现,但在第一阶段体现得不够明显,而在这一阶段中就有了充分体现,例如第一次作业的图形类,将每个图形独立为类封装起来,在主方法中调用每个类中的属性和方法达到程序的目标。

继承,是子类共享其父类数据和方法的机制。它由类的派生功能体现。一个类直接继承其他类的全部描述,同时可修改和扩充。面向对象的继承性,简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用,这就是继承的基本思想。在本阶段第一次作业第三题图形继承就开始应用继承机制,每个图形都是Shape的子类,且都重写了Shape的getArea方法,我的理解是:继承就是父类有子类的共性且子类有自己的特性。

在面向对象设计中,多态性主要体现在向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为,也就是说,每个对象可以用自己的方式去响应共同的消息。而通过第二次作业可以发现,多态的实现并不依赖具体类,而是依赖抽象类和下一次作业中用到的接口,在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个或者几个抽象方法,而不给出实现的具体过程,通过子类继承父类并重写抽象方法来实现,

③作业过程中遇到的问题及解决方法

 第一次作业的中,有一个正常测试的测试点一直没有通过,第三次首先是对题目一筹莫展,没有思路,老师讲了之后,又在网上搜索栈的用法,再结合老师所讲以及请教同学,终于得以解决。

④每次作业花费的时间比例。

第一次作业用了近一整天,主要是为了将各个类联系起来,第二次作业迫于没有思路而放弃,第三次花了近三天,

2.OO设计心得

③OO编程思维的理解

我的理解是,面向过程设计最重要的就是模块化设计,在面向对象设计中,程序的重点集中在主体对象上,即程序=对象+对象+......+对象,而每个对象都封装了其数据结构和算法,每个对象彼此互不干扰,其数据结构和算法也就不会因为程序的规模变大而更加复杂,同时由于继承性和多态性,使得对象的功能可以扩展,便于维护和更新。

④类设计心得

设计类首先要分析类所具有的属性,适用什么方法,哪些东西可以划为一类,在程序设计之初就应该有个大致规划,设计好类图,然后按照类图去编码。

3.测试的理解与实践

①测试对于编码质量的重要性

测试对于编码质量的重要性毋庸置疑,无论是程序是否达到了预期要求,程序是否满足用户需求,还是代码的简化,优化,提高编码质量,都离不开测试。程序员在编码的过程中可以通过测试来验证代码是否正确,正确之后则考虑是否有更优方案使代码更简洁质量更高,这些都是在不断测试的基础上完成的。

②查阅资料,假设使用Junit进行程序的测试是否可行

经网上查阅资料,Junit进行程序测试可行。其基本流程是新建项目->导入Junit包->生成测试框架->运行测试代码。

4.课程收获

最大的收获是自己的面向对象意识更加明确了,熟悉了面向对象设计中一些基本的思维方式和相关概念。

 

posted @ 2020-06-10 21:53  越鸟  阅读(134)  评论(0)    收藏  举报