301
社区成员
发帖
与我相关
我的任务
分享本单元鼓励采用正向建模的设计方式,主要体现为分析需求后制作初步的UML图,并根据图来编写代码,在开发的过程中不断优化架构并完善UML图,最终完成设计和开发。
本单元的需求为开发一个图书管理系统,功能要求逐次增加。通过这种“先设计,后开发”的的方式,实现了对本单元代码的良好规划。
第一次的作业中需求较少,主要对象只有学生、书、书架、预约处和借还处。经过对类图复杂程度和代码架构的综合分析,我决定将所有的功能都写在Library这一个类中,并将学生也视作Library的“顾客”属性。
值得关注的是,最终的类图中并不需要指出什么类之间的关系,因此我的类图也是十分的简洁,一度让我以为画错了。

第二次作业增加了图书捐赠和图书漂流的需求,主要对象中新增加了图书漂流角,经过分析后,我还是选择让Library类来实现图书漂流角的功能。
一样简洁的图。

第三次作业增加了信用分系统,为了实现“借书逾期就在当天闭馆瞬间扣分”的需求,加入了Deadline类作为记录被借书籍、结束人和还书截止日期的日志消息,并存储在Library类中。
最终的图依旧比较清晰易读。

在最初的UML图设计中,我定下了以Library类为功能中枢的策略,并以此画出了初步的UML图,并在编写代码时将图书馆功能都写在了代码里。
在编写代码的过程中,我认识到需要创建一些辅助类来帮助Library类实现功能,同时填补了Library类的预设框架,在每个增添新内容的阶段之后,就更新UML图,使其与实际代码相符。
第一单元中,我第一次感受到了优秀架构的重要。一个好的架构,在可扩展性、鲁棒性等方面都会有出色的表现。第一单元的关键之处是递归下降法,实现了解析字符串的高效。
第二单元的电梯调度问题是课程最大的难点,需要我们理解并熟练掌握线程安全和各种锁的使用。本单元的架构设计尤其重要,如果架构混乱会导致最后的代码纠缠不清,严重影响对代码逻辑的分析。
第三单元要求我们根据明确的需求实现代码,但是明确中隐藏着变数,不同的算法和数据结构会带来完全不同的效果,鼓励我们积极探索更加高效的代码架构和设计。
第四单元需要我们进行正向建模和设计,以UML图来指引代码编写,并在开发中逐渐完善UML图。我十分喜欢这个单元,因为它对程序的具体实现持有极其开放的态度,可以有无数种实现的方法和架构,鼓励学生们灵活运用自己的创意,创建令自己满意的架构。
本单元中,代码具有很多分离的方法,适合进行单元测试来保证方法的正确性。
主要通过评测机对拍的方式进行评测。此外,本单元很适合打断点进行调试,可以清晰地看出每一步中多项式的具体值。
本单元十分考验定位bug根源的能力。对于两次测试得到同样的输出,可能是因为完全不同的bug,而且同样的输入数据可能会得到完全不同的结果,评测难度最大。
我通过在关键步骤前后进行特定输出的方式,定位到了程序运行的最终步骤,并分析出了具体的bug。
本单元需要进行多种测试,如黑箱测试、白箱测试等,覆盖所有的可能情况,实现充分测试,尽可能地测出bug。
本单元适合进行单元测试,可以测试每个功能方法的正确性。同时,可以使用逐步调试的方法,观察每一步指令之后的图书数据和学生数据,来确认是否正确地实现了输出所描述的目的。
我从OO这门课程中最直观的收获,就是锻炼出了可以随手写出几百行代码的能力,克服了写码恐惧症,对于我这个6系学生而言可以说是至关重要。
面向对象设计与构造,对我而言已经不再是一个陌生而模糊的概念,而是一种内化于心的能力,推动我走上成为一名真正的开发者的道路,帮助我用代码追寻梦想。