Blog 03
面向对象程序设计第三次博客
Blog 03
一、前言
题目集7~9知识点总结
现在应该是本学期的最后一次博客作业了,虽然本学期的学习没有上个学期的轻松,而且进度也跟得不是很紧,但我还是收获了很多东西,也看到了自己和别人的差距,找到自己的弱点,就要尽力去将其弥补,以下是本次博客题目集分析。
题目集7:
本次题目集分为2道题,难度中等偏上,主要是对继承,多态,接口等知识点的回顾。这次的题目集的两道题其实难度并不大,只是代码量比前几次题目集稍多一点,但还是属于对继承的回顾,也有对新知识接口的应用,整体上还是在自己的能力范围内。
本次题目集共2题,个人认为难度中等偏上。
题目集8:
本次题目集是一次难度级别较高的综合性题目集,难度在于如何将账户和卡号进行存储,并且通过迭代器来查找卡号和ATM机号,也要判断是否跨行取款等,这些都是之前的题目几乎没有涉及过的,所以算是初次上手,再加上我的基础本就不算很好,因此本次题目集做起来还是十分吃力的。而且对于业务的切换如取款、存款和查询余额等要从输入的数据来进行判断的这类题目,我就没有十足的把我能够按时做完,因此这次题目集对基础本就不是很好的我来说难度是非一般的大。
本次题目集共1题,个人认为难度偏大。
题目集9:
本次题目集主要是对上一次ATM机的题目集的进一步拓展和延申,增加了贷记账户和4个新的用户,也增加了新的银行,并且允许跨行存款,并且根据不同银行设立了不同的手续费。此外,本次题目集还需要用到上次题目集所没用到的继承,所以,就这次题目集而言,难度比上一次还要更大,这也意味着之后的功能还会更加完善,难度也会直线上升。通过这次题目集的练习,我也发现了自己还有许多地方的不足之处。
本次题目集共1题,个人认为难度偏大。
二、设计与分析
(1)题目集7
题1:
这道题主要是考察对接口的使用,难度并不算太大,代码量也相对适中,不算太多,其中有抽象方法Shape方法对toString()方法进行了重写操作,通过show()方法来将输出结果展示出来,总体并无太大不足。
类图如下:

复杂度如下:

源码如下:

题2:这道题相比上一道题难度略有增加,因为需要在上一次代码的基础上将输出结果进行重构,也要将输出的格式进行改变,同一类型形状的放在同一个“[ ]”中,其他的输出结果数值不变,但整体上代码较上一次并未改变多少,因此此次题目难度也算适中。
类图如下:

源码如下:

(2)题目集8
题1:本题我没能完成,我个人认为主要原因还是没有对题目需求和类的设计进行深究,但对于类的分类与类中的属性放置我都能达到面向对象程序设计的要求,但在功能的实现上还是欠缺火候,尤其是碰到与逻辑有关的一系列判断时。这次的类设计指导书中已经非常明确的给明了要求,Card类中不能有关于钱的属性,应该将该属性放在Account账户类中,而Card类中则放置CardNO卡号属性,其他的几个类的设计也都大同小异。对于main函数,从输出中换行输出到判断输入的内容从而判断进行的是什么业务,如换行输入“#”时,程序停止,输入一个卡号时加上“#”是查询余额,其他的是进行取款存款操作。
其次我个人认为最困难的点在于迭代器找卡号和ATM号和账户的操作,因为在这之前几乎没有接触过Iterator的用法,对于不同的类应该按什么顺序来进行迭代这确实给我造成了较大的困扰,再其次就是没有搞清楚迭代器的初始化方法,对于其子方法hasNext()和next()等的用法和含义并不清楚,在这一功能上我就已经耗费了大多时间。
再然后就是将结果显示出来,在ATM机号和卡号这一块卡住了,也没有迅速地找到解决办法,如何根据银行类型来确定ATM机号和相对的卡号这是一个难题。
类图如下:

源码如下:



(3)题目集9
题1:本题是题目集8的功能进一步扩展,增加了新的账户类型和--“贷记账户”,通过该账户是可以透支取款的,透支取款额为50000元,另外也允许了跨行取款操作,每次根据不同的银行类型也要收取不同比例的手续费,用户名单新增四人,银行类型新增“中国农业银行”。以下是本次实验大致数据与要求:


本次题目的功能看似只增加了这么一些,但代码的行数却大大增加,这些功能的实现也有一定的难度,至少以我的基础和能力是没有那么快就能解决的。首先的问题是贷记账户应该怎么加进类里,怎么起到它应发挥的作用,怎么实现自身的职责,在这次的实验中,我并没有直接给定一个特定的贷记账户,而是通过某一特定的方法来实现贷记所具有的功能:

也就是要进行一系列的判断然后实现相应功能,因为收取手续费,透支,跨行取款等这几个功能是绑在一起的,或者说是紧密关联在一起的,这也给题目间接性地增加了难度,因此对于跨行取款等操作要另外创建一个类,专门用来实现相对应的取款和手续费缴费操作。
对于透支与否的判断以及透支收取费用方法的实现是放在同一个类下,因为在这次的实验中我没有将类划分为信用卡类和借记卡类,所以这样的判断可能还会存在一定的瑕疵,但对于贷记账户的判断应该是没有太大问题的。
相对于上一次的题目集,这次的题目集增加了一些小的细节方面的东西,其中最明显的一个地方就是对跨行取款的操作和透支取款的操作,这对我逻辑方面的要求以及保持代码的完整性的要求都是比较高的。
其实本次实验也可以通过定义一个抽象类,其他的功能实现类再继承该抽象类,这样就不至于将两种类型的卡相混淆,就如:


而我自己是像这样通过接口的方式来实现的:

只是向我这样可能会增加许多潜在的麻烦,以后如果继续用类似的方法去写代码的话可能会增加代码的工程量,导致赶工进度延后,因此,多借鉴他人的代码是一个值得学习的方法。
类图如下:

源代码如下:


三、采坑心得
1、在这几次题目集中,我都犯过一些同样的错误,比如输出的结果少了空格或字体不一,就比如题目集8、9中输出结果中的符号“¥”,在输出的代码里我写的却是“¥”,这就导致输出的结果全错。
2、在这几次题目集中,我也踩了不少坑,但归根结底还是自己不够细心,对知识的熟悉度还不够,犯了容易犯的小错误,但也正是这些踩过的坑让我了解到自己的不足之处,这几次的题目集包括上几次的题目集都是质量很高的题目集,都是老师们经过讨论所创作的原创题,所以说通过采坑来进步,这也不失为一种好的方法。
四、改进建议
这几次题目集的难度都有,不会那么轻松就能做出来,所以我认为这几次题目集对难度的控制十分合适,而且每次题目集开放的时间也是根据难度而有调整,但我希望之后的题目集可以多增加几个输入输出示例以及相应的测试点,这样可以让同学们在根据输入示例更方便地知道自己的代码问题出在那个测试点上,这样可以减少调试代码的时间,也可以培养学生的自己尝试调试的能力。
其次也可以考虑给学生一定的自由度和想象力,将代码按自己的想法去设计,去运行,比如对于题目集9,可以尝试将卡进行注销操作、对账户中的钱进行转账操作等,然后再根据代码情况去给分。
五、总结
总的来说,通过这几次题目集,我能够发现自己的不足之处,也促进自己不断地去跟着学习进度,尽量不让自己掉队,搞不懂的地方也可以去问同学,上网查资料,学习他们的精华之处,并且分析这与自己的想法有什么不同,有什么优点,我也发现自己掌握的并不多,还需要不断地去学习,去赶超,要有忧患意识,要努力补齐自己的短板所在。
这几次题目集的代码量有肉眼可见的提升,难度也相较上几次有较大的提升,这是对自己综合能力的进一步考验,可能可以写出来,但花费的时间却比别人多得多,这也是自己需要去突破的地方,而不是觉得写完了代码就可以松一口气了,重要的是要从中吸收自己的不足,转换成后解几次题目的能力,为什么同样的代码,同样的知识掌握量,为什么自己做的进度却比别人慢得多。在今后的过程里要怎么进行自我突破等,这都是需要我自己去考虑、去思考的地方,只有反复地从中吸取经验才能让自己进步。

浙公网安备 33010602011771号