目录
- 总结本单元所实践的正向建模与开发
- 1. 需求分析
- 2. 系统架构设计
- 3. UML建模
- 4. 系统实现
- 总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系。
- 总结自己在四个单元中架构设计思维的演进
- 第一单元:表达式求导
- 第二单元:多线程电梯调度
- 第三单元:JML模型
- 第四单元:UML类图
- 总结自己在四个单元中测试思维的演进
- 总结自己的课程收获
- 能力和经验方面的收获
- 总结与反思
总结本单元所实践的正向建模与开发
在本单元中,我们通过构建一个小型图书管理系统,全面实践了正向建模与开发的各个阶段。
正向建模与开发是软件工程中一种重要的方法,通过系统地分析需求、设计系统架构、进行UML建模并最终实现系统,帮助我们高效且准确地开发出符合需求的图书馆管理系统。
目标:深入理解图书馆管理系统需要实现的功能和业务规则。
过程:
详细分析图书馆管理系统的需求,明确需要实现的功能,包括借书、还书、查询、预约、预约取书、续借和图书漂流等。
- 用户管理:处理用户的解约情况,信用分管理等。
- 图书管理:管理图书的信息,包括图书的分类、库存、借阅限制等。
- 借阅管理:处理借书、还书、续借等借阅相关的操作。
- 预约管理:处理图书的预约和预约取书。
- 系统运行管理:处理系统的开馆和闭馆整理书籍操作。
- 信誉分管理: 处理用户的积分操作。
2. 系统架构设计
根据需求分析,在草图上完成大体结构设计,进而实现数据流的交互和类的关联,尽可能做到高内聚低耦合。
3. UML建模
- 在这部分设计中,由于
StarUmL操作的不熟练和对于UML建模的知识缺乏,边学边建模,造成花费较长的时间。 - 绘制了初步的 UML 类图,设计了 Library 类并与 User、AppointmentOffice、BorrowAndReturnOffice 等类,并在相应的类中,实现需求分析中的功能函数,然后再初步完成状态图和顺序图,确认书籍的生命周期的状态变化和交互、时序顺序。
4. 系统实现
最后根据UML编写自己的代码,做到翻译的严密性和正确。
总结本单元作业的架构设计,并对比分析最终的代码设计和UML模型设计之间的追踪关系。
类图

总结自己在四个单元中架构设计思维的演进
主要内容:
- 面向对象编程:重点在于学习封装、继承和多态。
- 架构设计:由于表达式的复杂性,采用递归下降法来解析和求导。
- 重构:在架构设计过程中,三次作业每次都进行了重构,逐步优化设计。
- 数据存储和多态:利用顶级父类来管理各种表达式子项,通过多态实现各子项的求导功能。
学习成果:
深入理解面向对象编程的核心概念(封装、继承和多态)。
通过不断的重构和优化,增强了对架构设计的理解。
学会使用递归下降法进行表达式解析和求导。
抽象和模块化思维:将复杂系统分解为独立模块,通过清晰的接口连接,提升系统的可扩展性、可维护性和复用性。
面向接口编程:定义清晰接口,使用接口进行交互,提升系统的松耦合性和可测试性。
第二单元:多线程电梯调度
主要内容:
- 多线程编程:了解Java多线程原理,学习对象间的交互。
- 生产者-消费者模型:用于电梯调度系统的核心交互模型。
- 线程安全和效率:解决线程同步问题,提升电梯运行效率。
学习成果:
- 掌握了多线程编程的基本原理和方法。
- 学会使用生产者-消费者模型进行对象间的交互。
- 提升了对同步互斥算法的理解,增强了对面向对象编程的理解。
- 设计模式:应用常见设计模式(生产者-消费者模式、工厂模式、观察者模式等)解决特定设计问题。
- 性能和可伸缩性:注重系统的性能和可伸缩性,通过高效的数据结构和算法设计,提升系统的并发性和扩展性。
第三单元:JML模型
主要内容:
- JML(Java Modeling Language):理解和使用JML模型进行社交网络模拟。
- 数据结构和算法:使用并查集、堆优化迪杰斯特拉算法等高效算法。
学习成果:
- 理解JML模型的语法和使用方法。
- 通过高效的数据结构和算法的应用,提升程序性能,防止CTLE(计算超时)。
- 设计原则:应用设计原则(单一职责原则、开闭原则、依赖倒置原则等),提升系统的高内聚、低耦合、可扩展和可维护性。
第四单元:UML类图
主要内容:
- 层次化设计:对UML模型中的不同元素进行层次化划分。
- 顶层设计和自顶向下实现:先设计大致框架,再逐步实现具体功能。
学习成果:
- 掌握了层次化设计的思想,增强了对复杂系统的理解和处理能力。
- 通过顶层设计和自顶向下实现的方法,提高了系统设计和实现的效率和质量。
- 软件架构:理解常见的软件架构模式(分层架构、中心控制式、分级代理式等),并选择合适的架构模式应用于实际系统设计中。
总结自己在四个单元中测试思维的演进
初步测试方法:从边界数据测试和手动测试开始,逐步积累测试经验。
性能和工具使用:引入JProfiler等工具,解决多线程和性能问题。
自动化测试:开始使用JUnit进行自动化测试,提高测试效率和覆盖率。
静态分析和复杂样例:结合静态代码检查和复杂样例测试,进一步提高程序的稳定性和可靠性。
测试思维提升:
从手动测试逐步过渡到自动化测试和性能分析,提升了测试效率和准确性。
学会使用多种工具和方法,全面测试程序的功能和性能。
通过与同学对拍和合作,学会多角度思考和发现问题,增强了测试的全面性和严谨性。
最后特别感谢DPO,没有你我怎么活呀~
总结自己的课程收获
能力和经验方面的收获
- 抗压能力:
- 面对每周的高强度作业,通过持续的高压环境,提升了自己的抗压能力。
- 学会在高压下有效地管理时间和精力,保证任务按时完成。
- 项目经验:
- 通过模拟实际项目的开发过程(需求分析、架构设计、功能迭代和测试),积累了处理较大规模项目的经验。
- 认识到架构设计的重要性,好的架构设计可以极大地简化后续的迭代和维护工作。
- 测试的重要性:
- 在每个单元中,通过构造边界数据、JUnit测试框架和静态代码检查等多种方法,体会到测试在保证程序正确性和稳定性方面的重要性。
- 通过多次迭代和重构,理解了单元测试、集成测试和系统测试的区别和重要性。
- 心态调整:
- 从最初的焦虑和急迫,到后来能够冷静应对每周的作业,心态上有了显著提升。
- 学会了如何合理分配时间和任务,逐步建立起对自己能力的信心和正确的期望管理。
- 代码风格和规范:
- 通过持续的实践和改进,逐渐养成了良好的代码风格和规范意识。
- 了解了代码格式化的重要性,并在每次提交前确保代码符合规范,提升了代码的可读性和维护性。
总结与反思
- 全面的知识积累:通过这一学期的学习,掌握了大量之前不了解或不会的知识和技能,提升了编程和问题解决能力。
- 应对大型项目的信心:尽管面临不少挑战,但通过不断的学习和实践,积累了处理大型项目的经验,并增强了在高压环境下的抗压能力和自信心。
- 程序设计和测试的重要性:深刻认识到架构设计和全面测试对程序开发的关键作用,通过实际操作,理解了如何设计和测试一个高质量的程序。
- 持续改进和反思:虽然有些遗憾,如在性能优化方面未尽全力,但总体上,通过不断的实践和反思,自己的编程能力和思维方式得到了显著提升。
这一学期的OO课程让我收获颇丰。尽管过程充满挑战和压力,但最终的收获和成长使这一切都变得值得。感谢课程中的每一个挑战和每一次帮助,期待未来能够继续在编程和项目开发中不断成长。