Unit4 总结 & OO课程总结

范兴堃-22371426 学生 2024-06-15 23:28:10

Unit4 总结 & OO课程总结

unit4总结

正向建模与开发

什么是正向建模?就是“think twice, code once”,在写代码之前先设计好架构与主要的接口,然后按照设计去实现。

然而理论和现实还是存在差距的,实践中可能写着写着发现这里不对,那里又不对,最后又得大删大改。最后写完代码再画UML......

在OO里,即使出现差错也可以很快地弥补,但是我现在参加的假期的编译大赛中,AST结点的设计一开始就出现了一些差错,导致大幅度重构,我才想起来OO的深意(

架构设计

img

架构简单而清晰,Book类和Student类其实就相当于结构体,对外提供一些访问接口,而所有的业务逻辑都放在Library里进行处理。

我的设计里,完全没有“图书漂流角”、“借还处”等等对象,这些的区分是基于Book类的字段。

如果有很多本书号相同的书,我的选择也不是new一个对象,而是有几本书就new几次,将所有的书都存到bookDb容器中。

我的架构设计的灵感源于真实业务中后端的设计——对一种资源设计一张数据表,靠其中的字段的差别来进行区分——我想,这非常符合这个单元作业的业务场景,实践中也体现出了非常强大的拓展性。

架构设计思维的演进

一句话总结,我想我在最开始时学到了抽象,但最后我悟到了权衡

U1对我的启发与影响是最大的,在现在我写编译器时就能很好地体会到:lexer与parrser就是前端的经典组件,Poly就相当于中端的ir,这里可以进行各种优化,最后转化输出时就是中端转后端,只不过这个“编译器”非常迷你。

这个单元前中后三端完全解耦的设计让我大开眼界,也体会到了OO层次化、模块化设计的魅力。

U2开始大家就有了各自的思考,在架构上更加天马行空,不拘一格,研讨课上和大家讨论发现大家的想法各不相同,可见经过第一单元后我们已经体会到OO的魅力了。

U3体验感很差,可以说没什么体验感,自我感觉也没什么进步。

U4中,看着大家天花乱坠的抽象设计,我陷入了沉思。。。在我看来这明明就是要我们模拟一个数据库操作,但是却被大家搞的如此复杂,甚至有好多UML图我都看不懂。。。

于是我思考了这两年的编程经历,我忽然发现:无论代码如何设计,最终都是给人读的,而不是编译器。一切的设计,无论简单或复杂,接地气或高大上,都是为了让大家更好理解,对需求更开放。于是,在学期的最后,我悟到了权衡——或许OO的奥义就是寻找一种平衡。

测试思维的演进

本学期我自己搭建了U1和U2的评测机,学会到了黑盒测试这种方法。

我觉得我最大的经验就是评测机数据生成规模一定可定制化,比如最简单的:指令的条数。在我自己测试时发现:可能某组数据下出bug了,但是我根本就定位不到bug所在。。。因为数据规模太大了。但是后来我先设定指令条数为10,后来15,再20.。。。。。一直加到再也测不出bug为止。

课程收获

正如上面所说,我在最开始学到了抽象,但在最后学会了权衡,我想这也是我最大的收获。

具体的知识收获还是不少的,比如U1这种小型编译器的设计经验让我现在真正的编译器设计与实现时不至于那么费劲、学会了多线程编程以及其中需要考量的问题、学会了搭建评测机、复习了图论的算法、知道了世界上还有JML这种东西(

但其实仔细回想,我又说不出我具体有什么实质性的进步,我似乎只是在不断地去github上参考学长的代码,不断地de自己的bug,为了应付测评写了很多Junit,在starUML上不断点击鼠标。。。

但是转念一想,这学期当数据结构助教时,看见学弟们敲三四百行的大作业都觉得是天大的事,我去年的情况也差不多;再看看这学期课设的几千行代码,或许这就是进步吧。

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

301

社区成员

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

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