2024 BUAA OO第四单元总结

刘一鸣-19373454 2024-06-17 17:34:26

目录

本单元所实践的正向建模

总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系

总结自己在四个单元中架构设计思维的演进

第一单元

第二单元

第三单元

第四单元

总结自己在四个单元中测试思维的演进

总结自己的课程收获


本单元所实践的正向建模

正向建模(Forward Modeling)是一种建模方法,用于描述系统的输入和输出之间的关系。在正向建模中,我们首先确定系统的输入变量,并基于已知的物理规律、统计模型或实验数据来构建一个模型。然后,通过该模型来预测系统的输出结果。正向建模通常用于理解和解释系统的行为,并用于预测未知条件下的输出。它是一种从因果关系的角度来建立模型的方法,通过对输入变量的控制和调整,可以预测系统的响应。

在本单元的三次作业设计过程中,我的建模方法是正向的。首先,我根据数据来定义类,然后确定类与类之间的交互关系。有了这个基础,我开始编写代码,并在此过程中逐步完善类图。在接下来的两次迭代中,我在现有类图的基础上进行了扩展和完善,最终完成了代码实现。代码功能测试通过之后,我根据课程组的要求,制作了状态图和顺序图,以完整地展示程序的行为和交互流程。

总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系

本单元的类图架构为下图所示:

最终代码实现的类包括:

  • BorrowAndReturnOffice 类:处理图书借阅和归还请求。
  • AppointmentOffice 类:处理图书预约请求。
  • ArrangeOffice类:在开馆和闭馆后整理图书。
  • DriftCorner 类:实现图书漂流功能。
  • Student 类:记录用户的基本信息和借阅历史。
  • Library 类:存储请求指令,管理各项请求。
  • Bookshelf 类:存放各类图书。
  • Book 类:记录各类图书的信息。
  • Mainclass 类:处理请求的输入。

最终代码实现与UML模型中定义的结构和行为是一致的,并且所有在UML模型中定义的元素都已在代码中实现。

 

总结自己在四个单元中架构设计思维的演进

第一单元

第一单元主要是表达式因子分解,采用递归下降的思维,把表达式分解为项,项再分解为变量、数字、幂次等各因子,各因子看似全不相关,但又可以在行为级上抽象,从而提取出因子这一接口。这一单元主要训练了我们自顶向下的层次化设计思维,深层次的迭代、互相包含也是编程、debug的重难点。

第二单元

第二单元以操纵电梯为背景,需要我们考虑多线程在时序上的交互、多线程随机执行顺序的干扰。这一单元主要训练了我们多线程并发的设计思维,多线程对临界资源的访问是设计和编码的重难点,synchronized同步锁的合理使用极为重要。

第三单元

第三单元的任务是JML规格的理解,本次单元不需要去设计架构,只需要将课程组提供的JML规格写成代码即可。从一开始对繁杂的JML规格的不理解,到逐渐体会到这种准确、统一的规格描述的优势,这一单元培养了我们JML规格设计思维。同时,这一单元涉及图的算法,我接触到图的精妙数据结构和算法。

第四单元

在本单元中,以图书馆系统为背景,我们在具体编程前,先分析需求和设计文档,通过UML进行建模,在编程前先对整体架构有了很好的把握,编程时就能行云流水。这一单元主要锻炼了我们利用UML进行正向建模的设计思维,很好地磨练了我们的整体架构设计思维。

总结自己在四个单元中测试思维的演进

对于程序的测试,我也在oo课程的帮助下得到了进步:

  • 在第一单元中开始用与程序架构的类似的递归下降的语法树做数据生成器。
  • 在第二单元初步的理解对于输出数据的规约进行评测的评测机原理。
  • 在第三单元更是系统的了解了整个软件开发过程中的测试体系,在自己的程序中编写junit单元测试。

总结自己的课程收获

在经历了一个学期的面向对象编程课程后,我获得了三个主要的收获:面向对象的思维方式编码能力自我测试能力

面向对象的思维方式是我在这门课程中面临的最大挑战,也是核心的学习目标。过去,我习惯于面向过程的编程方法,但这一学期的学习让我开始用面向对象的方式来分析问题和设计解决方案。这种思维方式不仅更符合人类的自然思考模式,而且在开发大型软件时尤为有效,因为它有助于减少错误并简化问题定位和解决过程。

编码能力的提升是我通过这门课程获得的另一个重要成果。尽管作业的时间紧迫,但面向对象编程的实践使我能够在有限的时间内快速且准确地完成编码任务,这对我的编程实践是一个巨大的飞跃。

最后,自我测试能力的增强也是我值得骄傲的进步。我不再仅仅依赖课程系统的反馈,而是开始进行更全面的测试,包括边界测试、压力测试和功能覆盖性测试,并且掌握了自动化和单元测试技巧。这些技能的提高,使我能够更有效地检验我的代码,确保其质量。

总之,面向对象编程课程虽然充满挑战,但也带来了成长和快乐。这段经历将在我未来的编程生涯中留下深刻的印记。

 

...全文
127 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

302

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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