北航OO第四单元总结

文章描述了在开发图书管理系统的过程中,运用面向对象思想进行建模,包括使用UML图降低耦合性,定义BookStatus枚举管理书的状态,以及通过类和类之间的关系设计。作者还提到了从单个单元的学习中,如多线程、JML规格和测试思维的演进,尤其是理解继承、设计模式和复杂业务逻辑的处理。
摘要由CSDN通过智能技术生成

建模与开发

       根据题意来抽象出各个类, 一同构成图书管理系统,并且指导书贴心地把关键的机构用黑体加粗。而且本单元其实比之前的单元更加面向对象,机构划分清晰,各机构的职责也清晰,比如还书时B书去借还管理员,C书去自助机器,根据要求在具体的类中实现具体的需求即可。

        并且学习UML图了解类和类之间的关系后,为了降低耦合性,在本次作业中我有意减少了关联关系,只实现了学生对图书馆的关联,图书馆和机构的关联,而不是直接将学生和各个机构关联。

架构设计

         比较特殊的类是enum类型的BookStatus,规定了书的不同状态,所以在实现中,书从来没有真正的被放到哪个管理员手中,仅仅只是标记书的借阅状态。当然,由于实际实现的复杂性,书不仅仅只有借出一种状态,还有可取,损坏,丢失,运输中等状态。对于管理员的借书还书操作,学生的损坏丢失操作,只需要改变书的对象的状态即可,比较清晰也比较容易维护。

        比较常规的操作是开发图书馆类,书类和书架类,按照指导书的需求逐步实现即可。

架构设计思维演进

第一单元

        初步接触面向对象思想。本来认为表达式本身是一个整体,但慢慢了解到,表达式,因子可以作为独立的对象存在,甚至可以存在表达式因子,不断由顶向下,一步一步划分。

        第一单元中主要学习了继承关系,因为因子有很多类型,所以实现因子接口,再逐渐实现各个因子类。

第二单元

        多线程单元的核心点在于锁的设计,通过synchronized关键字,可以设置临界区资源,这个思想在操作系统课程中也有体验。可以将整个函数用synchronized修饰,也可以只修饰一个对象。并且了解到实际工作中很少将整个函数都用synchronized修饰,因为会导致效率的降低。

        接触到成熟的设计模式,本单元主要应用生产者消费者模式,只需要思考consumer,channel等角色分别对应作业中的哪个部件即可,进一步使用成熟的模式编程。在这一单元,我明白成熟的设计模式是前人多次实践总结出来的智慧结晶,不容易出bug,并且条理清晰,易于理解,在可以套用模式的情况下,是较好的选择。

        学习LOOK算法,了解电梯的设计算法,积累相关算法知识。

第三单元

        接触JML规格,学习根据程序写JML,以及根据JML写程序。前者主要是上机实验课的内容,后者主要是课下作业的内容。但JML存在明显的缺点,过于琐碎,可读性差。并且JML往往代表最基本的算法,并不能满足课程组对于时间复杂度和空间复杂度的要求,需要自己思考如何减少循环的层数,降低复杂度,并不能完全的依赖JML。

第四单元

        业务逻辑很复杂,设计七个左右的机构,彼此具有一定的关系,需要耐心理清其中的关系。从流程出发,借ABC书分别找什么机构,还ABC书分别找什么机构,A书可不可借,损坏了还书时BC书分别找什么机构,丢失了找哪个机构交罚款。

        每一点都不复杂,但是每一点都需要实现很复杂。我觉得这个单元工作量真的非常大,我努力完成但是实在赶不上进度。

测试思维的演进

        学会使用黑盒测试,采用生成随机数据 + 评测机的形式进行大量测试, 在数据有保障是的前提下可以在大量的测试中发现错误并纠正,可以进行大量测试, 覆盖率较高,这一点在电梯单元尤为体现,因为多线程并不能保证每次测试都可以复现bug,所以需要大量测试。

        同时明白白盒测试也很有必要,以方法为最小单位,精确定位bug出现的位置。

课程收获

        收获了面向对象的思维模式,了解了抽象的思维方法,在面向过程编程的基础上,进一步拓展了编程的可能性。

        了解UML和JML,学会根据规格实现代码,甚至在规格的基础上进一步优化代码。

        学会类的继承关系,关联关系等等关系,进一步了解实现需求时的架构设计方法。

        学会先设计,再实现,对问题建立清晰的认识后,逐步完整细节。

        学会复杂需求的编程,而不局限于大一程设时和大二计组P0-P2的单一功能的实现,提高处理完整且复杂问题的能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值