2023 BUAA OOPre 课程总结

本文讲述了作者在课程中学习的架构设计,包括类图和迭代优化,以及JUnit在复杂代码测试中的作用。OOPre课程让作者理解了面向对象编程的核心概念,并分享了实际项目中的设计模式和编程技巧。同时,提出了课程改进的建议,关注于现实逻辑和异常数据处理。

一、架构设计

        1.1 架构类图

        

        1.2 迭代调整与考虑

                        整个迭代过程中代码的整体内聚度增加,耦合度降低,重复率下降

                1.2.1 第二次作业

                        创建Main、Adventurer、Bottle、Equipment类,用HashMap容器维护冒险者所有物

                1.2.2 第三次作业

                        创建Bag、Food、Instruction类,引入携带机制,用TreeMap容器维护bag携带的Bottle、Food的id有序性,将输入解析功能从Main移到instruction中

                1.2.3 第四次作业

                       创建FightLog类,引入战斗机制,运用正则表达式匹配字符串进行输入解析,用HashMap集中管理冒险者名字和战斗日志记录输出。Instruction类重构为Manager类,以整行字符串为单位进行输入解析

                1.2.4 第六次作业

                        创建Commodity接口,分别以BottleEquipment为父类继承添加RegularBottle、RecoverBottle、ReinforcedBottleCritEquipment、RegularEquipment、EpicEquipment子类,引入价值属性和雇佣关系并递归计算总价值和最大价值。Manager以指令类型为基础分离方法,增添解析层

                1.2.5 第七次作业

                        创建Store类,实现单例模式的商店系统;冒险者增添Money属性和观察者告知关系

二、JUnit使用心得

        当代码复杂性增加时,JUnit可以迅速地排查定位到出现Bug的类/方法中,适当的单元测试利于解构复杂代码,方便debug

三、OOPre学习心得

        通过本课程的学习,我了解到面向对象编程的特点是封装、继承、多态,便于直接对现实问题建模,适合开发维护扩展庞大的工程项目。循序渐进的课程设计和迭代开发也让我初步接触了实际软件工程开发中的一些行业规范和设计模式,学会了运用层次化设计解构复杂现实问题的方法。

四、课程建议

        4.1

                一些问题场景如空瓶子的处理、价值的重复计算、观察者金钱援助等有违现实逻辑,或许可以设计更合理的应用场景。

        4.2

                增加对异常数据(0,负数等)的处理考察

                

### 关于北京航空航天大学2023年数据结构课程的相关资料 #### 一、讲义资源 北航的数据结构课程通常会提供详细的讲义,这些讲义涵盖了数据结构的核心概念以及实际应用案例。根据以往的教学经验[^3],讲义内容可能包括但不限于数组、链表、栈、队列、树、图等基本数据结构及其算法实现。建议学生关注学校官方发布的最新版本讲义。 #### 二、作业练习 为了帮助学生巩固理论知识并提升实践能力,北航的数据结构课程一般会有配套的编程作业。这类作业往往涉及复杂度分析、算法优化等内容,并通过具体问题引导学生深入理解各种数据结构的特点和适用场景。例如,可能会要求完成基于Python或其他语言的项目开发任务[^2]。 #### 三、考试大纲 针对即将参加期末或者研究生入学考试的学生而言,熟悉考试大纲至关重要。考试大纲明确了考核范围与重点难点,有助于考生合理规划复习计划。按照惯例,北航的考试大纲会紧密围绕全国硕士研究生招生考试计算机学科专业基础综合考试的要求来设定[^5],因此可以参照此类标准进行准备。 ```python # 示例:简单的链表反转操作作为潜在的家庭作业题目之一 class Node: def __init__(self, data=None): self.data = data self.next = None def reverse_linked_list(head): prev_node = None current_node = head while current_node is not None: next_node = current_node.next current_node.next = prev_node prev_node = current_node current_node = next_node return prev_node ``` 以上代码片段展示了一个典型的关于链表的操作例子,这可能是课堂讲解或家庭作业的一部分。 #### 四、其他辅助材料 除了上述提到的内容外,还可以参考历年真题及优秀毕业生的经验分享以进一步提高应试技巧[^4]。同时注意利用好图书馆电子数据库中的学术论文和技术文档,它们能够为你提供更多元化的视角去看待同一个主题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值