301
社区成员
发帖
与我相关
我的任务
分享在本单元中,通过学习UML通过建模语言,在作业中实现了正向建模与开发。在进行编码开发之前先根据需求设计UML图,能够提前发现自己的设计中所存在的问题,从而避免在开发中进行重新设计和架构的重构。
UML具有极强的表达能力,为系统中不同场景及粒度下的建模提供了相应的图表语言。在本单元主要应用了类图、顺序图和状态图进行正向建模与开发。类图是定义其他图的基础,显示了系统中的类、接口以及它们之间的静态结构和关系,提供了系统清晰的结构视图。状态图用于描述对象的状态和状态之间的转换,能够确保我们在开发中更好的理解需求。顺序图展现了对象之间消息传递顺序,以及消息传递的时序关系。通过顺序图设计每个类的生命周期,能够验证整体设计是否存在问题。
本单元通过UML进行正向建模和开发主要进行了如下步骤。首先要明确需求,确定编写的java程序要实现的功能。然后通过需求进行设计,完成UML建模,绘制设计的程序所对应的类图、状态图和顺序图。在完成UML建模后,以UML图表作为参考进行代码的编写。根据类图的类和方法,首先创建Java类和接口,然后实现每个类的属性和方法,最后根据类图定义的关系,实现类之间的继承和关联等关系。最后在完成代码编写后,根据类图、状态图和顺序图中所涉及的交互流程编写对应的测试用例并对程序进行测试和调试。在测试中出现的问题也要遵循正向开发的模式进行修改,即先修改UML建模中的设计,然后再修改对应的代码。最后在测试功能全部实现后,开发完成,并根据后续的作业需求增加进行二次开发和维护。通过以上步骤进行UML正向建模和开发,能够明确需求,在清晰的指导下,开发效率和代码质量都有显著提高。
本单元中最终的架构 的UML类图如下图所示:

Main类:程序入口,进行Library类的初始化。
Library类:图书馆管理类,是主要的功能类。在该类中进行其余所有类的初始化,存储相关数据并实现所有对书籍和学生的操作。
BookShelf、BookDriftCorner、BorrowReturnOffice和AppointmentOffice类:图书馆的四处书籍存在的部门,即书架、图书漂流角、借还处和预约处。这些类保存着自己部门的书籍及相关信息。
Student类:针对每个学生设计的类,保存每个学生的相关信息,如信用分、持有的书籍等。
因为存在着官方包的输入输出解析,所以没有设计单独的类进行解析,提升了架构的清晰度并减小了设计难度。同时架构设计中遵循着单一职责原则,每个类只负责一种功能,确保了类的高内聚和低耦合性。
根据UML类图实现了类结构一致性和方法和属性的一致性,每个类及其属性、方法的设置直接对应类图中类、属性、方法的设置。同时,各个类之间的关系也依照类图设计的关系。根据UML顺序图实现了交互关系一致性,代码中的重要的方法调用和方法执行顺序都能直接对应到顺序图中对象之间的消息传递和调用顺序。根据UML状态图实现了状态转换的一致性,代码中不同状态之间的转换均能在状态图中找到相对应的内容。
第一单元我的架构设计主要聚焦与从面向过程到面向对象的设计思维的转变。利用面向对象的独有特征进行层次化架构设计,从而实现OO风格设计思维的转变。
第二单元主要进行多线程部分的编码,在本单元的设计中主要学习了几种设计模式如工厂模式、单例模型等来优化架构,提高架构的合理性。同时在多线程架构设计中也要考虑同步和互斥,以及多电梯的调度策略等问题来提高系统性能。在本单元的架构设计过程中通过不断的修改、重构与学习,使设计思维得到了很大进步。
第三单元中由于JML的设计,不需要自己对架构进行设计。主要着重于对已有架构选择合适的算法和数据结构来降低时间复杂度,提高运行速度。同时通过阅读JML规格化设计语言,明显感觉到其具有较高的可靠性和清晰的架构,吸收学习后对今后的架构设计也有所帮助。
第四单元通过UML进行了正向的建模和开发,由于是自行设计架构,我在前期通过UML进行架构设计中更多考虑的是可靠性和可扩展性,对时间复杂度设计考虑较少。最后整体代码功能实现较好,架构较清晰,但有些地方实现算法时间复杂度较高,在今后的架构设计中需要进一步优化思维,有进步空间。
通过四个单元的作业练习,我的架构设计思维是在逐渐走向成熟的。一开始只是向面向对象思维的转变,实现基础的功能,而之后在架构设计中我的思维也向综合性、可扩展性转变,学习并应用设计模式,考虑架构的性能和可扩展性。相信这种思维的演进也能帮助我在今后设计出更高质量的软件系统。
在经过多次作业的测试后,我的测试思维可以说是经历了很大提升。一开始的测试我只是简单使用样例加手搓一些简单的数据进行测试,更多地依赖公测中提供的数据,导致测试效果较差,作业提交次数也较多。而在几次强测和互测的不断学习后,经过讨论区同学的分享,我开始搭建评测机,并构建一些边界数据。特别是在第二单元多线程电梯的测试数据构建需要考虑情况较多,调试评测机也需要耗费较多时间,但调好后的数据覆盖率相对于之前手搓数据有很大提升,也对数据构造方法有了更深的理解。
在第三单元的学习中更是学习了多种测试模式,如单元测试、集成测试和系统测试等。而课程组要求的Junit测试能够更加便捷的编写和运行测试用例,使用起来灵活度较高,结果清晰更容易发现bug,增加了测试效率和可靠性。第四单元我则是仿照Junit测试尝试了自动化测试来提高测试效率,并开始关注覆盖率来进一步提高测试的全面性。
经过通过四个单元的作业测试,我的测试思维也从一开始简单的功能测试逐渐向覆盖率高、效率高的测试转变,这种思维的演进能够有助我构建更加稳定可靠的软件系统。
经过面向对象课程的学习,我掌握了java语言,编程能力有了很大进步。同时经过学习JML、UML以及一些工具,让我在架构设计方面也有了很大提升。通过学习Junit测试以及许多的测试类型和方法,让我在测试思维方面也有很大进步。最后则是每周的作业让我对项目管理,也就是时间安排有了很大进步,能够对难度不同的作业进行相同的压线提交。总体来说收获颇丰,十分感谢课程组、老师和助教的辛勤付出。