BUAA_OO第四单元总结与反思

fumcr 学生 2024-06-12 18:02:39

目录

 

本单元所实践的正向建模与开发

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

架构分析

追踪关系

在四个单元中架构设计思维的演进

在四个单元中测试思维的演进

课程收获


本单元所实践的正向建模与开发

"正向建模与开发"是一个涉及软件工程和系统设计的概念。它通常指的是在软件开发过程中,从需求分析到设计和实现阶段,采用一种自顶向下的方法,即先定义整体架构和设计,然后逐步实现细节。这种方法有助于提高软件的可维护性和可扩展性。

在本次迭代作业中,要求我们画各种图,并且“希望”我们先作图,再写代码。当我们做出所有图像,大体框架也就建成了。

而在具体实现中,实际上很难先把图完全做好再写代码,毕竟我们提前预想的框架在实现中可能会有各个小的问题,或者新增部分,比如新增一个方法作为辅助,策略类比想象的要多,封装起来,等等,这不影响大体的自顶而下,但是需要编程人员在代码和图之间来回周转,不断修改(这当然是很烦人的),完全的自顶向下感觉更适合于已经完全掌握这份任务的情况,比如早已写过一遍类似的任务,心中对于细节已经很清楚,画完图后,基本不用再改动图了。

而如果是在编写代码过程中反复去修改UML的话,会有个问题,由于我们大部分都不太习惯这种修改方式,一旦在哪里有一个不太影响架构的小点忘记在UML中修改,就会让我们的评测出错,写代码时候,时刻关注这些小细节,可能会加大负担。而这些小细节其实不影响我们理解整体架构。

在尝试中也相对倾向于,先画草图,构建好框架,再写代码的大体框架,这也是种自顶而下。starUML对于建模中各部分修改当然很好,但是先有一个草图,可以更符合对于打草稿等方式,练习过那么久的我们来构建大体框架思路,毕竟草图是不受条条框框约束的,每个人的草图可能很不一样,但是这个图一定很适合自己,而且草图的小错误是没事的,再根据starUML将框架表述出来。(而且,打草稿真的很快,方便抓住快速流转的思路)。或者根据草图直接写代码。

这些也都是正向建模与开发的方式,总之,从方便他人看懂的情况下,统一规范的UML建模当然更好,但是仅从为了代码的架构更完善角度来看,可以适当选用适合自己的方式。

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

架构分析

Main类负责输入接受,传给Center类,Center作为处理中心,处理各个指令,同时,下设各个部分,比如BookShelf,DriftCorner,OrderPlace等等,对于隐含信息较多的,比如预约书,封装了一个OrderBook类,整体就是Center类作为处理中心,向上链接Main的输入,向下链接各个小部门。

架构相对正常,当然如果架构在后续迭代中变得极为庞大,也可以给Center向下细分为两个小处理部门,分别处理开关门操作和开馆期间的操作。

追踪关系

本单元架构相对正常,易处理,基本不会有重构的情况出现,所以都是增量开发,都是在UML模型和代码之间互相增量,来更好的完成任务。代码编写中按照框架设计进行,并根据具体细节,提出新的要求,然后在UML中添加这个要求,再回到代码进行。

在四个单元中架构设计思维的演进

在北航OO整个课程中,其实对学生要求是极高的,花费的时间也是非常多。这也对我们的代码量有着不小的要求,在这种难度下,学生也会逐渐增加架构设计的能力,毕竟当我们对于那么麻烦的任务都能设计好,而不重构,本身就说明架构设计能力的不错。

在第一单元中,层次化设计思维的加入,对于未曾接触过的自己,压力当然很大,在这种情况下,想做出很好的架构设计,其实很难,第一次接触中,相对不熟悉,所以第一单元也是我唯一一次进行过重构的单元,也在这次联系中,对于架构设计有了一定的认识。

在第二单元里,虽然已经有了一定的架构设计思维,但是多线程的难度确实很大,虽然在设计的过程中,我个人认为自己的代码,在线程安全方面,设计的还可以,但在后期,也难免变得臃肿,好在已经不需要重构了。

第三单元中,规格化的设计让我对于框架的重要性有了更好的理解,由于主体架构已经给出,可以将时间更多的放在理解他人的架构,感受他人与自己架构方面的不同。

第四单元,正向建模。经历了不知多少个小时的摧残,我们对于架构设计已经有了不错的认识,在这份不是那么困难的作业中,已经不像第一第二单元那么艰难地行走,虽然想完全俯视作业,仍不是那么轻松,但我们已经能在一定程度上从上往下来看,这对于设计良好的架构是至关重要的。泥泞中行走的我们,应对作业都很困难的情况下,很难做到设计非常好的架构。这一单元,我们有着更多时间,来完善我们的设计,可以在面对这份相对容易的作业中,把我们的架构设计能力发挥出来,充分体会架构设计的重要。

在四个单元中测试思维的演进

从前期的代码静态检查,手动构造数据等方式。到后期,也可以尝试自动生成一些数据来进行测试,当然,也可以借助他人搭建的测评机。最后,回归手动捏造(随机的数据很难对性能造成极大的压力,大家对于互测刀性能以及第三单元的强测数据点对于性能,都非常有热情(x))

相对对我的收获就是,加深了我对测试的认识,单一,或者两三种测试,基本是不太可能做到全覆盖的,个人能力的提高,代码的编写能力和静态检查能力,可以帮助我们写出相对强健的代码,但是想要做出很强健的代码,多样的测试能力是必要的,

课程收获

对于四个单元的“特色”都有了一定的印象深刻的体验,编程能力也有一定的提升。抗压能力也上升了不少(x),虽然我相对来说,这几个单元里,找bug,改bug都比较快,并没有花费很多时间在bug修改上,但是每次作业发布时候,新增的任务经常会给我打懵,顶住这份压力去设计架构,编写代码,还是很重要的。尤其是第一第二单元的时候,第一次作业都是灭顶之灾(x),不过好在,当初都觉得这单元是否会在第一次作业就完不成的自己,现在每次作业也都出色的完成了。总之,轻舟已过万重山。

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

301

社区成员

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

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