2024-BUAA-OO Unit 4 单元总结

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

正向建模是一种用于描述和分析系统或过程的建模方法。它基于系统的目标和行为,以及各个组成部分之间的相互作用关系,从而生成系统的模型。

那么什么是这个单元的正向建模呢?

其实就是把重点放在系统的设计阶段,就是说,首先有一个程序的架构,然后把这个架构转化成具体的代码。这个架构可以不是最终的架构,只要列出需求、可能要拓展的功能,哪个类实现哪些功能就可以了。比如本单元的第一次作业,我们只需要大致确定图书馆的部门数量(一个部门一个类),用户需要存储哪些信息,一些比较重要的信息需要怎么样的数据结构就可以了。

然后我们可以绘制出一个比较简单的类图,在这个类图基础上,对着属性、方法进行代码编写,同时完善这个并不很完整的类图。

本单元作业的架构设计、最终的代码设计和UML模型设计之间的追踪关系

类图

在这里插入图片描述

状态图

在这里插入图片描述

架构设计

本单元主要有三个比较重要的部分:图书馆、书籍、人,在图书馆部分,我采取的是以功能为界限,划分出了预约处、书架、借还处等几个类,并建立了一个大的图书馆类,统一进行情况的判断和请求的处理;对人的部分,我建立了用户类进行管理,我认为用户应该管理已经拥有的书籍,并记录借阅书籍的时间(用户得知道自己逾期)。

因为我们只有一个图书馆,所以我在代码中对预约处、书架、借还处等部门都使用了单例模式,用static进行修饰,这样使代码结构更加简单、安全。

public class AppointmentOffice {
    private static final AppointmentOffice ao = new AppointmentOffice();

    public AppointmentOffice() {
        //......
    }

    public static AppointmentOffice getAppointmentOffice() {
        return ao;
    }
}
最终的代码设计和UML模型设计之间的追踪关系

由于采用了正向建模,在相互对照下,UML模型设计和最终的代码设计基本一致,在设计过程中也能够很好地相互补充,使设计更加完整。

OO课程架构设计思维

OO第一单元:层次化设计的思想的应用和工程实现——递归下降解析表达式

第一单元给我最大的印象是抽象,从OOpre的实际场景走出的我们,似乎面对着一个比较抽象的需求,这事实上是从模拟型的程序到一个工具型程序的转变,我们不能够结合实际去一步步模拟程序的运行(不能在脑子跟着递归下降一直模拟吧),而是必须深刻理解递归下降的思想,充分利用封装、继承来解决问题。

OO第二单元:多线程的设计方法——模拟多线程实时电梯系统

第二单元不能不说是一个刺激的单元,多线程设计要注意线程之间的同步互斥,注意死锁问题,注意程序如何结束的问题(实际上也是死锁问题的一种)。同时也需要注意电梯的调度问题,复杂的调度策略往往意味着线程不安全,需要在复杂度和性能做出适当的取舍。

OO第三单元:JML规格理解与代码实现——实现简单社交关系的模拟和查询

学习了一些规格化的思想。

OO第四单元:正项建模与开发——使用UML设计图书馆系统

学习了UML类图、状态图、顺序图的画法,同时感受了正向建模的设计方式。

OO课程测试思维

白箱测试

主要是对照指导书,对代码应该实现的功能,应当完成的约束,进行逐个检查,确保能够完成所需要的各个功能,能够应对一些功能混合的需求。在互测阶段,阅读他人代码来进行bug分析。这里由于时间原因,我几乎都是只对代码中比较易错的部分进行检查。

黑箱测试

手搓一些比较极端的数据。比如一个两百个节点的完全图,一万条add relation和一万条modify relation,可以很好地测试出并查集以及重建并查集的性能消耗。

完成了一部分的评测机,一部分的数据生成器。在很多时候都是借用的其他同学的评测机(感谢dpo),搭建测评机的过程中会发现很多不曾考虑的情况,可以说在这个过程中也能够帮助自己完善一下设计。

结语

首先最主要的是设计思想,比如第一单元的递归下降,我相信在以后的编译原理中肯定也会有所作用,再比如第二单元的多线程程序设计,对于传统单线程编程的顽固思维有很好的帮助,也使我更好地理解了什么是资源、什么是信息传递;其次也是抗压能力(或者说投入的专注度),第二单元的第二次作业让我度过了一个比较难忘的清明假期;最后也补充我的一些编程知识,学习了一些java和python语法。

祝OO越来越好!

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值