• 全部
...

北京航空航天大学2024年秋季学期《面向对象编程先导》课程总结与反思

李元星-23371057 2024-10-31 19:53:18

北京航空航天大学2024年秋季学期《面向对象编程先导》课程总结与反思

前言

经过了九个星期的《面向对象编程先导》的学习,我学习到了许多大一时的《程序设计基础》和《数据结构与算法》中不曾了解到的知识,更重要的是学习到了以为所不关注的一些编程的思想与实践经验。尽管学习的过程不算轻松,花费大量时间在迭代作业上,但整体来说,还是获益匪浅。

架构设计

迭代作业共有4次:2、3、4、6,每次添加一些新的功能。

总体来说,我的架构变化不大,并且在后续复杂迭代作业中均没有在强测中掉过测试点,我个人还是挺满意的。

  • MAIN.java 提供程序入口

    • AdventurerManager.java 管理冒险者列表

      • Adventurer.java 有关冒险者的所有指令的具体实现

        • ItemManager.java 物品管理类,物品栏、背包的实现方式

          • Item.java 物品接口

            • Bottle.java 各种药水瓶

              • HpBottle.java

              • AtkBottle.java

              • DefBottle.java

            • Equipment.java 各种武器

              • Axe.java

              • Blade.java

              • Sword.java

        • FragmentManager.java 碎片管理类

          • Fragment.java

        • AdventureGame.java 冒险游戏类

          • Guard.java

        • Treasure.java

    • Input.java 接受标准输入

    • AnalyzeAndAct.java 解析标准输入,并执行指令

基本思路就是,每次新增一类对象,便设置一个对象管理类来进行管理,层层递进。

Junit使用心得

这门课中对Junit的使用其实和《计算机组成原理》中编写Verilog程序的testbench仿真调试时差不多,大概就是在一个测试的程序中调用需要测试的类和方法,利用断言机制进行debug。

在《面向对象编程先导》课中,我对于Junit的使用有着明显缺陷,我是直接调用AnalyzeAndAct.java类来测试全局的,大部分时候都不是逐个类,逐个方法测试。但是在某几次debug中还是利用了Junit进行逐个方法的试错,对我的迭代作业有一定的帮助。

使用Junit过程中的还是总结了一些经验:

  • 对于小类含有的小方法,可以只用一个测试方法一并测试。

  • 对于大类的复杂方法,既要分开测试方法测试,也要有一个更大的测试方法测试复杂方法之间的互相影响。

  • 对于接口和继承类,需要重点测试,防止在使用过程中乱套。

  • 进行分块测试后最好也要进行更高层级的大块测试,但不能忽视小块测试的重要性。

  • 重视断言的同时也可以考虑使用重定向标准输入输出进行自动化测评(当然课程中无法使用)。

课程学习心得

  • 对程序入口的重新理解

    在初次接触作业时,我还是基于《程序设计基础》课程的思路来面向过程编程。把主类尽量简化,并分离出:输入、管理、解析执行几个模块,是我学到的第一份面向对象思想。

  • 树状的数据结构

    对于我一个初学者来说,学到的一个有用的技巧是,合理的设置对象管理类来进行管理,这样可以减少繁多的各种容器以及对容器的复杂管理,可以使得对象管理更加直观

  • 方法的细分

    如果一个方法的内容可以分为几个明显的部分,或者某一部分可以复用某一个方法,那么更直观的是把他们细分为多个方法,不仅仅是为了通过代码风格设计,更是方便以后添加新功能,或者给旧功能添加新分支时,更方便迭代。

  • 继承与接口

    对于持有面向过程思想的我,使用继承和接口是十分难以理解的,但是经过学习后,我逐渐理解并愿意使用这两个重要的面向对象概念了。

  • 容器选择和从容器中获取

    java语言为使用者提供了众多的功能强大的容器,重要收获就是理解了各种场景需要什么容器。遍历容器获取对象也是非常重要的,如果某一个对象同时具有使用id获取和使用name获取的需求,那么如何优雅地设置映射关系就十分关键了。

  • public类和没有public的类

    在最后一次迭代作业中,我注意到一些小类,比如冒险游戏中的守卫、宝物、宝物工厂这些小类都只在冒险游戏这一个类中被使用,于是没有必要全部分开不同的类文件,在同一文件下即可。

 

对课程的建议

  • 对于java语言的基本性质介绍不够清楚。第一节课主要介绍了面向对象思想的基本思路,但刚开始完全不会java时很不解。建议第一节课可以着重讲讲java为了实现面向对象性质,和C语言有什么区别。

  • 课程工具链:git、Junit、checkstyle的自学过程比较痛苦,希望课程组可以统合一些好用的博客附在教程里,节省自己上网找资源的困苦。

...全文
给本帖投票
93 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

272

社区成员

发帖
与我相关
我的任务
社区描述
2025年北航面向对象设计与构造
学习 高校
社区管理员
  • Alkaid_Zhong
加入社区
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部