OO第四单元总结

OO第四单元总结

1 本单元的正向建模与开发

本单元作业依托于图书馆管理系统,着重培养我们的正向建模能力,其强调从需求出发,通过创建和设计uml模型来指导后续的开发工作。简单来说,就是在动手写代码之前,先对于创建什么类,类有什么属性、方法有一个宏观的认识,然后在后续开发迭代中就会减少重构等方面的工作量。对于我来说,我很难在看完作业需求后事无巨细地规划好我所要写的全部代码,往往是在简单设计好各个类、类的属性方法后在具体实践中发现自己之前设计不足,最后完成一个较为完善的设计。

2 本单元作业的架构设计

本单元的作业实现难度不大,重要的是让我们学习uml建模相关的知识并运用到实践当中。下面是我的最终的uml类图,我简要介绍一下我的架构设计。
第四单元uml类图

根据作业需求,我设置了Library(图书馆)、Bookshelf(书架)、BrOffice(借还处)、AppointmentOffice(预约处)、BookDriftCorner(漂流角)、Person(用户)这几个类。通过每个类的属性和方法不难看出各个类的功能,例如Library类从宏观上组织起其他各个类,需求都是通过Library类完成,查询、借书、还书等操作都较为简单,在充分理解作业需求并设计好uml的基础上实现并不复杂,但往往bug出现在一些没有考虑到的情况上。每个类都各司其职,完成与其相关的操作,在三次作业迭代中并没有进行大的重构,大致符合高内聚低耦合思想。在本单元的最后,我发现Bookshelf(书架)、BrOffice(借还处)、AppointmentOffice(预约处)等类都有共同的特征,例如有属性books,代表其维护的书籍列表,有方法transBookIn,代表将书籍移入,如果再设计一个类拥有这些特征来作为它们的父类,那么设计和实现或许会更有层次、更加清晰。最终的代码设计的类与uml模型一致,但最后还是在uml模型中补充了一些细节方法的属性和方法。

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

3.1 第一单元:鲁棒性设计和层次化设计

第一单元通过表达式解析与计算向我们展现了面向对象课程的初貌,通过合理的设置类以及类之间的层次关系才能较好地完成这单元的作业。在本单元,我学习了递归下降的具体方法,通过递归下降,将表达式、项、因子等层次分离开,各自完成其操作,这让我对层次化设计的抽象方法有了更具体的体会。

3.2 第二单元:层次化设计和线程安全设计

第二单元引入了多线程,使得程序理解、实现和debug的难度上升了一个层次。在这一单元,要充分考虑多线程下可能出现的互斥问题,往往一个理解不到位的疏忽就能带来数小时的debug时间。故经过这单元的洗礼,我充分的认识到了在多线程设计与开发中对于同步块的运用要足够谨慎。在本单元,我也学习到了生产者消费者模型,对面向对象的理解更加深刻了。

3.3 第三单元:层次化设计和规格化设计

第三单元引入JML语言,在学习之中难免有些痛苦,但在学习之后也有所收获。例如,根据JML的要求来实现,因为JML语言的抽象层次和严谨程度要高于自然语言,故在理解JML需求时不会有理解偏差(如果没有看错的话);根据JML来进行更加完善的JUnit测试。在本单元我还学习了与图有关的各种算法和实现时降低复杂度的小技巧。

3.4 第四单元:层次化设计和模型化设计

第四单元引入UML模型,着重培养我们先通过uml建模、再根据建模实现具体代码的能力。在本单元我认识到设计的重要性,通过提前设计可以减少在后续实现中的工作量。

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

在整个OO课程中,测试都是十分重要的。我的测试思维大致如下,1、手造典型数据点。2、黑盒生成大量随机数据点。3、根据JML语言设计JUnit测试。在这些测试过程中,可以根据输入结构、线程并发、程序架构、规格契约等方面有针对地构造数据点。

5 课程收获

通过本学期OO课程,我学习到很多知识、实践能力也有很大提高。在本课程中,我不仅收获了代码编写能力的提升,还有了思维层次的飞跃。回想大一程序设计和数据结构课程上我所编写的代码,现在的代码不仅风格更好,拓展性和层次结构也比那时有了显著改善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值