270
社区成员
发帖
与我相关
我的任务
分享

上图为我的最终代码架构
MainClass类:读入指令并进行分割
Guild类:进行指令执行和创建ArrayList储存Adventurer序列
Factory类:创建Item对象
Lexer, Parser类:递归下降所需的词法器和语法器
Adventurer类:冒险者类
Item类:物品类,下含Bottle Equipment类
Bottle类:药水类,下含四个Bottle子类
Spell类:咒语类,下含两个子类
Usable接口:可用物品
Employer类:雇主接口,用于实现雇佣关系
Employee类:雇员接口,用于实现雇佣关系
hw2只有MainClass、Guild、Adventurer、Equipment和Bottle,MainClass负责读入分割和解析指令,Guild负责实现各种指令和管理Adventurer序列(其实现在回看,应该把实现指令和管理Adventurer序列分开,因为本人对java语言不熟悉不敢重构以及自身懒惰导致后面缝缝补补、屡次修改该类)。
hw3是迭代量比较大的一次,我改用软件包分层,把MainClass的解析指令部分都交给Guild来做,entity包含所有实例类,Item包含所有物品,实现了Bottle的子类、Spell及其子类,实现了Usable接口负责判断Item是否可用。
hw5中,我实现了Factory类负责创建Item类对象以实现购买功能,以及在Guild中添加fight功能。
hw6中,我按照要求把Equipment类进行扩充,实现了两个新接口Employer和Employee负责雇员雇主相关功能。
hw7个人认为是压力最小的一次,Lexer已经给出,我只需要实现Parser及其子类即可,其他类除了在Guild中加指令外都不用修改。
写测试代码是不小的工作量()。。
个人认为Junit是个可以从头到脚帮我们debug的工具,好好设计测试代码后运行一下哪里出错一目了然,节省了大量的找bug的时间!(也算是没白花时间写这么多测试代码
以及assertEqual等断言方法很好用,可以不再靠输出debug法了。
跟前两学期学的面向过程的C语言比,我认为最明显的区别是解决问题的思维变了,面向对象更倾向于封装各种对象和方法、相互调用,面向过程显然是大家都挤在一起用函数来解决。面向过程可能会写一个200行的代码解决问题,面向对象大概会写10个40行的代码解决问题。最直观的就是代码量变大了,不想敲代码是一方面,以及我前期一直难以适应这种思维还用面向过程的思维解决问题,直接导致了我的Guild类屡次超行数以及debug困难。(因为如果工程再复杂一些,很显然一个2000行的代码和20个200行的代码,显然还是后者更好debug,我都不敢想如果是用C语言迭代最后会是多大一坨屎山)。
这次课程也让我认识到了架构的重要性,一个好的架构能从写代码、debug、写测试代码全方位轻松。一定要把工具类\控制类分离出来,不要跟实例耦合在一起。否则就会因为两个不对等的层级捏在一起而一直在写代码的时候脑袋转不过弯。
以及我也认识到了重构的重要性,能提早解决的问题一定不要拖到后面,否则工程量激增!!!警钟长鸣
1. 建议增加git相关的讲解和利用(最好是拿一个工程做例子录一个视频)。我现在还采用最原始的把上次作业复制到新作业的仓库里,用IDEA进行推送。主要是因为这学期课业压力有点大以及懒没有时间系统的学git。可以尝试强制用git交作业,这样可能被迫会学?(当然我猜可能会变成仅仅是学怎么交别的也不学)
2. 建议提升中测测试强度。我有一次首次提交就AC了,当时感觉自己是图灵转世(),结果强测50分直接傻眼,最后发现是一个比较明显的小错误,中测愣是没测到这个,导致强测错了一堆点。
感谢老师在课上的讲解,感谢温柔细心半夜帮我debug的助教大人,感谢深夜在IDEA里奋斗的自己,期待在OO正课上收获更多!(也希望平安度过)