301
社区成员
发帖
与我相关
我的任务
分享正向建模与开发是从需求分析到系统实现的一种开发方法,强调从问题的角度出发,通过建立模型来描述系统的结构、行为和关系,并将这些模型转化为可执行的代码。
在课程中使用了三种UML图表进行建模,分别是类图,状态图和顺序图。

Library:图书馆实体,定义了对不同请求的处理方法,其属性包含了各个部门类的实例BorrowManage:借还处,管理借还请求ShelfManage: 书架,管理馆内图书DriftManage: 漂流角,管理漂流角的图书MoveManage:用于图书的移动OrderManage: 预约处,管理预约取书请求OrderRecord: 用来记录预约的信息Student:学生实体,包含了信誉值,预约图书,持有图书等属性在代码的编写过程中,整体架构与类的属性方法命名等都遵循UML模型。同时代码中也会根据需要添加新的方法,同时需要根据这些变化调整UML模型。通过建立代码和UML模型之间的追踪关系,可以更好地理解代码的设计意图,在代码开发和维护过程中更好地与UML模型保持一致。在同步更新中,确保两者之间的一致性和准确性。
第一单元的任务是解析表达式。通过将表达式拆解成因子,项和表达式的形式,对整个表达式进行解析和化简。本次作业的架构设计中我以此为基础,将这些元素封装成类,添加解析类来统筹解析和化简操作。由于没有什么架构设计经验,许多设计比较冗余,例如将表达式因子单独设计成一个类,而非让表达式类继承因子类,这些设计也导致在整体性能上的表现没有那么好。虽然有一些问题,但在第一单元作业的完成过程中我还是领会到了一些面向对象设计的思想。
在第二单元的电梯作业中第一次接触到多线程编程,对于互斥的理解以及代码编写中同步块和锁的选择都花费了很长时间。在架构设计上,我将任务分为请求的分配和请求的处理两部分。在请求的分配上,生产者-消费者这一经典设计模式可以很好地适配电梯调度的问题。在请求的处理上通过look算法可以达到一个不错的性能。同时加入量子电梯操作进一步优化性能。这两个任务相互独立,只需分别设计好再组合到一起,有效地降低了代码编写的难度。
第三单元是JML,整体架构已经给出,更加注重的是内部的实现和优化。针对查询操作,尽可能地使用维护变量的方式保存信息而不是每次调用时遍历查询,这样可能会导致超时。同时,学习并使用经典的图论算法以更好地保证性能满足要求。
第四单元中注重通过构建UML模型正向建模,对程序的整体架构有个清晰的认识,再根据模型完成代码,我认为这一点是个较大的提升。我将图书馆各个职能部门封装成类作为图书馆类的属性,这种架构保证了在后续迭代过程中只需要根据新的需求添加功能即可,具有比较好的可迭代性。
在最初,写完代码后只通过样例和少量手动构造的数据进行测试,在强测经历了一次挫折后我开始注重测试以及测试的一些思维和方法:
U3中addPersonToTag中tag大小超过1111的情况。此外还要考虑一些特殊情况下数据溢出的情况。通过这一学期的OO课程,我收获了许多:
首先是架构设计的能力提高。在U1中,我只能先写代码,再根据代码反向建模。到了U4能够使用面向对象的思想分析需求并设计出具有较好的可迭代性的架构。
其次是代码能力的提高。经过12次的代码编写作业,通过规范的格式以及阅读JML对方法的约束,我根据预期功能编写代码的速度和正确性有了很大的提高。在后续的debug过程中节省了不少时间。同时,我也学习到一些编程的技巧和改善时间复杂度的方法。
最后,得益于互测我掌握了一些数据构造的技巧,这对于我以后测试自己的程序也具有很大的帮助。