BUAA OO Unit4总结

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

  • 根据程序逻辑划分要实现的类

  • 根据流程为各个类设计方法

  • 根据上述类和方法绘制UML图,并进一步分析关联、依赖等关系

  • 撰写代码,在代码中实现、完善功能和UML图

本单元作业的架构设计

  • UML类图(部分关联关系用隐式表示)

hw15_uml

  根据代码逻辑,设计了诸多类,例如各类管理员、书本、图书馆以及为了实现特定功能而改进的日期类等等。

  这么做能让各个类各司其职,降低耦合度,实现高内聚低耦合。

  但我的设计依旧有不足之处,比如并未为每本书创造一个对象,导致书被损坏的状态只能由Student存储,有悖于现实中的实际情况。

  • 最终的代码设计和UML模型设计之间

      基本相同,但是我起初在UML中打算在Main中实现校际功能,但是实际撰写代码时发现,这会使得逻辑混乱,所以创建了新的CrossLibrary类用于处理校际请求。

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

  • 第一单元:表达式解析。这一单元主要是分析表达式结构,结合梯度下降算法设计ParserLexer,合理设计表达式的不同部分。

  • 第二单元:多线程电梯调度设计。这一单元不同于其他单元在于,由于多线程的要求,需要充分考虑不同类之间的协同,同时为了防止并发读写可能导致的问题,还要充分考虑不同线程之间的同步关系。

  • 第三单元:JML。这一单元主要是规格设计和实现分离,阅读规格、严谨实现,同时在必要的地方,不影响规格地降低复杂度。这一单元中,我充分地明白了规格设计的重要性,充分考虑前置条件和结果。

  • 第四单元:UML。这一单元主要是从长篇由自然语言描述的需求文档中提取程序核心内容,使用UML严谨地、结构化地设计程序逻辑,再撰写代码并进行细节处理。

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

  • 第一单元:由于程序逻辑并不复杂,这一单元我主要是依据代码逻辑中较为复杂的点手动编写数据。

  • 第二单元:由于多线程可能导致的并发、同步问题,我主要通过手动创造和编写数据生成器,构造可能会出现同步问题的代码(例如同一时间输入大批量请求、同一楼层输入大批量请求等等,同时通过自己撰写的判断器代码判断输出是否与输入相对应。

  • 第三单元:由于这一单元主要是依据规格实现代码,所以我主要是对各个方法逐一单独测试,特别是优化了复杂度的方法,同时也撰写了随机生成代码进行大量数据测试。

  • 第四单元:这一单元我主要是针对逻辑较复杂的操作(例如预定时可能会取消之前的预订等等)编写代码进行数据生成,同时也撰写了随机生成代码进行大量数据测试。

  • 当然,这四个单元我也借鉴、使用了不少大佬的评测机用于测试代码,也让我对每次作业有了更深的理解。

课程收获

  这一学期的面向对象学习,虽然有诸多次熬到大半夜赶作业的时候,有离谱的每半小时就交一次评测机随机生成数据的互测房友,有电梯多线程改难以复现的bug的时光,但终究学到了许多。我明白了程序设计中先模型设计、规格设计,再撰写代码的重要性;我明白了低耦合高内聚、SOLID原则、清晰的代码结构的重要性。

  当然,我还存在很多不足。例如遇到复杂程序逻辑时测试不全面、缺少对设计原则与设计模式的充分理解和应用、迭代时过于以来之前的架构懒于优化等等,这都需要我在今后的学习生活中不断学习、不断改进,保持这一学期面向对象学习教会我的自学能力和意志力

谨此。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值