一学期的java课程学习已经接近尾声了,从这个课程中我学到许多,我从一开始的面向过程的思想慢慢转变成面向对象的思想,现在我看来,实现不需要重复或修改的功能时用面向过程的思想很好,但一旦涉及到修改,添加新的功能时还是要用面向对象的思想,这不仅可以解决许多看起来十分复杂的问题,还能让这些问题的脉络看起来清晰,而不会像面向过程的思想那样写完只有自己看得懂,甚至几天后自己也忘了怎么写的。
第七次题目集主要知识点是对类的继承、多态性使用方法以及接口的应用,两道题目都在考查这些知识点,并且第二题就是在第一题的基础上进行修改,多实现一个把相同的类发在同一个组里的功能,题量少,但是要想的东西挺多的,总体来说难度并不高,唯一让我觉得有问题的地方就是在sort分类时,我明明写的和老师课上演示的按面积排序的圆代码差不多,我却错了,直到现在我也没搞清楚,后来我直接换成了其他类中的排序方法,才终于写完了这一次题目集。
第八次题目集主要知识点对多个类之间的联系,比如继承,聚合,组合,依赖等,我之前对这几种类之间的关系理解的不是很到位。直到写这一次题目集,我才正视这个问题。我通过自己写一些测试代码和查阅网上的聚合,组合的实例代码,慢慢搞清楚了依赖其实就是在一个类的方法中引用另一个类,甚至不用在自己的属性里加上这么一个类,它们的关联仅仅就是这个方法;聚合其实就是在一个类中要把一个其他类作为他的属性,并且这个类可以说是它的一部分,但没有说没有谁另一个就会不存在;而组合可以说在一个类在另一个中是不可或缺的,它们彼此互相依赖,会互相影响,比如人和心脏;搞清楚这些之后,我写这道题目就十分迅速了,基本没有卡住的地方。
第九次题目集主要知识点是对上一次题目的修改,让它的功能更加丰富,比如可以借贷,可以跨行取钱了,我一开始想的十分简单,后面才发现,这题目里的坑还真不少。总体来说,难度不高,但是十分繁琐,这让我意识到第八次题目集我的代码还是存在不少问题的,比如明明就是加一个功能和修改一个功能,我却修改了太多代码。
①题目集7(7-1)、(7-2)两道题目的递进式设计分析总结
7-1 图形卡片排序游戏掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书
1 3 4 2 1 3 4 2 1 3 0
Wrong Format
。图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n
,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;Sum of area:总面积值
。设计的类图
7-2 图形卡片分组游戏
掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。
输入格式:
在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:1 3 4 2 1 3 4 2 1 3 0
根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。
输出格式:
如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出Wrong Format
。
如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
排序前的各图形类型及面积,格式为[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ]
,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前;
输出分组后的图形类型及面积,格式为[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积]
,各组内格式为图形名称:面积值
。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出;
各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
各组中面积之和的最大值输出,格式为The max area:面积值
。
设计的类图
分析:
这两题几乎是一样的,唯一的不同之处就是第二题要分组排序,这样我们就可以吧第一题看做分组排序中的一种,就是最简单的一组分组排序,在第一题中,我们就定义了一个数组,多组的话就定义多个数组,先把同一组的图形归类到同一个分组里,再对那个组里的图形根据面积大小进行排序。解决了这点后,这两题基本就是一样的了。总体来说难度并不高,唯一让我觉得有问题的地方就是在sort分类时,我明明写的和老师课上演示的按面积排序的圆代码差不多,我却错了,直到现在我也没搞清楚,后来我直接换成了其他类中的排序方法,才终于写完了这一次题目集。
②题目集8和题目集9两道ATM机仿真题目的设计思路分析总结
7-3 ATM机类结构设计(一)设计ATM仿真系统,具体要求参见作业说明。
输入格式:
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
存款、取款功能输入数据格式: 卡号 密码 ATM机编号 金额
(由一个或多个空格分隔), 其中,当金额大于0时,代表取款,否则代表存款。
查询余额功能输入数据格式: 卡号
输出格式:
①输入错误处理
如果输入卡号不存在,则输出Sorry,this card does not exist.
。
如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.
。
如果输入银行卡密码错误,则输出Sorry,your password is wrong.
。
如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.
。
如果检测为跨行存取款,则输出Sorry,cross-bank withdrawal is not supported.
。
②取款业务输出
输出共两行,格式分别为:
[用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
③存款业务输出
输出共两行,格式分别为:
[用户姓名]在[银行名称]的[ATM编号]上存款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
④查询余额业务输出
¥[金额]
金额保留两位小数。
设计的类图
7-1 ATM机类结构设计(二)
设计ATM仿真系统,具体要求参见作业说明。
输入格式:
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
取款功能输入数据格式: 卡号 密码 ATM机编号 金额
(由一个或多个空格分隔)
查询余额功能输入数据格式: 卡号
输出格式:
①输入错误处理
如果输入卡号不存在,则输出Sorry,this card does not exist.
。
如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.
。
如果输入银行卡密码错误,则输出Sorry,your password is wrong.
。
如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.
。
②取款业务输出
输出共两行,格式分别为:
业务:取款 [用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
③查询余额业务输出
业务:查询余额 ¥[金额]
金额保留两位小数。
设计的类图
分析:
第一题考查对多个类之间的联系,比如继承,聚合,组合,依赖等,我之前对这几种类之间的关系理解的不是很到位。直到写这题,我才正视这个问题。我通过自己写一些测试代码和查阅网上的聚合,组合的实例代码,慢慢搞清楚了依赖其实就是在一个类的方法中引用另一个类,甚至不用在自己的属性里加上这么一个类,它们的关联仅仅就是这个方法;聚合其实就是在一个类中要把一个其他类作为他的属性,并且这个类可以说是它的一部分,但没有说没有谁另一个就会不存在;而组合可以说在一个类在另一个中是不可或缺的,它们彼此互相依赖,会互相影响,比如人和心脏;搞清楚这些之后,我写这道题目就十分迅速了,基本没有卡住的地方。第二题是对上一次题目的修改,让它的功能更加丰富,比如可以借贷,可以跨行取钱了,我一开始想的十分简单,后面才发现,这题目里的坑还真不少。总体来说,难度不高,但是十分繁琐,这让我意识到第一题我的代码还是存在不少问题的,比如明明就是加一个功能和修改一个功能,我却修改了太多代码。
这几次题目集让我认识到了我存在的许多问题,比如代码的可重复性不高,有时耦合性又太高,导致修改起来时又十分复杂,我也学到了许多的新知识,知道了类之间的关联到底是咋样的,java的学习差不多告一段落了,接下来要的就是不断更新对其中的概念的理解,争取做到会写代码也可以清晰的理清代码深层的联系,并不断改进和完善代码中各个类之间的关系。
通过最后一个阶段的联系,我更加加深了对依赖,聚合,组合的理解,并能用代码实现这些关联,运用了更多之前没用过的类和许多方法,对数组的使用上也更加熟练了。
这个学期的java课程已经结束了,这门课程也没有想象中的困难,在以后的学习中,也要多写java代码,争取把这门语言真正掌握,并且希望我以后运用java的时候可以得心应手。我认为老师教的方式挺好,可以边学边写。