第8~9次PTA课程作业总结Blog

  1. 前言
    题目总结:
    第八次题目旨在考查类的设计、重点考核面向对象设计原则中的单一职责原则、里氏代换原则、开闭原则以及合成复用原则,以及基本使用类图构建的能力;题目有三道,第一道是点线面的重构题,第二道是雨刷问题的重构,第三题是对航空运输问题的迭代题目,难度适中属于可以在努力和学习下基本完成的难度。

第九次题目旨在考查对更全面的抽象类、接口类以及具象化的容器类和不同的类的设计与运用,继承了题目集八中对面向对象设计原则的保持,同样考察了构建类图的基本能力;题目依旧是三道,第一题是构建魔方类的设计,第二题是对点线面的再重构,第三题是对航空运输问题的再次迭代,难度适中属于可以在努力和学习下基本完成的难度。

2.设计与分析
第八次与第九次题目中的前俩道题目类图较清晰结构也较明确,遵循课程老师设计的类图分析并思考轻松的解决了题目的问题,于此不加过多描述与分析,主要在于后面最后题目的分析。
关键在于题目集后面的俩题的分析与设计,在此附上相应的SourceMontor的生成报表和PowerDesigner的相应类图并作基本的分析与解释和心得体会
(1)八题目集最后一题:




分析设计出来的类图有Order、FlightOrder、Client、Cargo、Flight、Calculable、Transportable七个类其中有俩个接口,我在设计的时候将接口Calculabe接上Cargo,将Transportable接上FlightOrder用于计算货物的运费和航运订单的是否可运性,基本有了对于该题目的基本脉络,然后依据所掌握的规则设计并开始写作代码,设计了相应类中拥有的属性的get,set方法,特别的还有CalculatePrice transport等方法
看得出来的这个时候的设计还比较混乱和复杂感觉耦合性还是相当的高,在设计方面上还是犹豫了很久,不知道航空订单怎么接上相应的板块和内容,如果接上航空订单类的话那么必须实例化对象才能够使用并具象化方法,一再纠结下决定将货物中的计算运费方法都分开放在了货物类和航空订单类中,复写方法,尽量清晰的分开了问题,根据输入输出的文件内容来设计的类,一圈输出输入做了一个类,最终得到了最后的类方法结果,航空订单依赖订单类,客户类,货物类,航班类,形成基本的两层类关系
(2)九题最后一题:
第九题是第八题的一个扩展和提升,同样给出了基本的图和分析解释




分析设计出来的类图Order依靠Cargo、Flight、Transform、Client同时设计了Rateable、Discountable、Pay接口接上了货物类,和客户类、订单类,删去了很多八次题目中的不清晰不明了过多冗杂的类并将其修改简化了。同时应题目要求将Cargo扩展了普通货物、危险货物、加急货物三种,支付方式扩展了支付宝支付、微信支付、现金支付,而用户中有私人客户,企业客户,拓展分化了该项目中的代码基本的代码业务没有改变,拓展了支付计算方法和支付方式
本次代码基本得到了优化与区分,在原有的基础上做了拓展与精化让原本复杂功能较少的程序功能多样化结构清晰化,在设计确认完成后更加得心应手的实现了代码检查了代码的输入输出后发现其实更加契合了第九次有了第八次的设计基础后更加轻松

以上便是俩次最关键题目的设计分析而以下是本人的一些踩坑心得

3.踩坑心得
(1)对于题目集八

在代码提交过程中最开始发现了编译错误,是编程的习惯问题,直接将Idea中的代码照搬而我Idea中的是Test类运行,到了PTA上是Main方法需要运行做了第一步修改,然后修改了基本问题以后,出现了多种错误,有答案错误和格式错误,我先解决了格式错误,是在订单后冒号的问题,最开始冒号用的是英文输入法的冒号,然后改成中文输入法并且发现了有些数据后的单位没有打上被漏掉,并且没有换行符的使用修改了这些问题以后就没有出现格式错误然后是答案错误。答案错误的时候发现和运行样例的答案是一样的所以就陷入了一个死循环觉得自己没错啊怎么错了,在我的长时间抗争下我决定放弃了,还有三四天的时间就没打算做了,在俩天过后以后我用断点再测试我的算法发现出现了严重的算法错误,计算体积是(abc)/6000而我写成了加号!然后欣喜之下修改了这一错误,最终通过了测试得到答案心里非常高兴,因为本人之前5~7的题目集一直是慢着一步的第一次长时间的迭代代码被自己解决了,非常有成就感,至此就有了写代码的兴趣,也很喜欢做这些题目,发现解决问题很有成就感。(让我对本课程的学习更有信心动力和期待,期中的考试也是在意外的开考时间被耽误后还是提前完成了代码)
(2)对于题目集九

在前面打下的信心和项目基础下做迭代相当的轻松发现只需要改个别地方并扩展一定的功能整体的结构清晰做起来相当顺手我就,没花多少时间改好代码交上去有了上次出错的经验本次代码的迭代非常顺利。最后提交的时候发现还是出现了问题,我怀疑是代码的输出体积有问题,我用的是实际体积,实际上程序需要一个计算后的计算体积,我一下意识到了并尝试更改,最后得到了正确答案,迭代至此结束,很兴奋也很有成就感
总体来说有了前一次的基础以后,第二次迭代的工程量和思维误区变得更少了,目标十分清晰知道自己要干什么,得心应手,心里也有大致的模板,最终解决了俩次的问题,发现收获了很多经验技巧和心态
4.改进建议
在代码的类中我觉得还可以简化订单类,我觉得没有分开订单项与总订单,但是又不知道分开是什么样的,如果继续迭代我想我会在这上面下功夫,精进我的Order类使其更精简
5.总结
本次阶段两次题目及让我学到了对于类的基本设计,还有复杂类的使用和并联,用更多的类用抽象类用接口去抽象一个问题,让问题让问题关系问问题中问题之间的关系更清晰明了,更模块化更化体现了对于面向对象设计原则的运用,对于类设计的掌握,对于分外化解决问题的实现对于结构的理解,同时在纠错和改正过程中发现自己存在的语法和细节错误,然后更更能够意识到自己应该在什么时候注意什么点同时也知道了一些关于PDA的一些小小的窍门,知道了某种错误对应的某种问题,学会了用更更精确的更明确的目光去审视一个问题出现的问题,然后本人自己对于Java程序编写的兴趣更浓,对于对于代码书写更有信心,对于关于课程相关的问题更有动力,这是成就感带来的好处,本人在于代码经济和类设计上面还有待提高,在课程相关的一些技术和和具体,具体细节上有待提升,存在一些漏洞,还会在后续的自学中补足,是一个心路的变化和锻炼提升,是自己编程能力提高的体现,上次博客没能做完在本人的努力下逐渐跟上了课程的脚步,理解了课程的目的,学会更快更高效的解决问题,得到了编程思维的锻炼。

posted @ 2025-05-22 20:24  Asunaa  阅读(20)  评论(0)    收藏  举报