302
社区成员
1. 正向建模的含义
询问chatGPT什么是正向建模,它给出了这样的答案:
正向建模是一种用于描述和分析系统或过程的建模方法。它基于系统的目标和行为,以及各个组成部分之间的相互作用关系,从而生成系统的模型。
在正向建模中,建模过程从系统的高层目标出发,逐步细化到具体的组成部分和其行为。它着重于描述系统的结构和功能,以及各个组件之间的交互关系。这种建模方法通常用于系统设计、工程分析和软件开发等领域。
正向建模的一般步骤包括:
- 确定系统的高层目标:明确系统要达到的目标和期望的结果。
- 识别系统组成部分:将系统划分为各个组成部分或模块,并确定它们之间的关系。
- 描述组成部分的功能和行为:对每个组成部分进行详细描述,包括其功能、输入和输出。
- 定义组件之间的交互关系:确定各个组件之间的通信和数据流动方式,以及它们在系统中的相互作用。
- 构建系统模型:使用适当的建模工具或技术,将系统的结构、功能和交互关系表示为模型。
- 分析和验证模型:对建立的模型进行分析和验证,以确保其符合系统需求和目标。
正向建模方法可以帮助开发人员和系统设计者更好地理解系统的行为和交互,从而促进系统的设计、开发和优化。它在系统工程、软件工程和业务流程建模等领域中得到广泛应用。
2. 本单元的实践
了解了正向建模的含义之后,我认为我们在本单元中根据指导书所写的需求画出UML图就是一个完整的正向建模过程。将上面列出的正向建模具体步骤对应到本单元的作业中,应该就是第1步对应阅读、理解指导书;第2、3步对应构建UML类图;第4步对应构建UML状态图和顺序图;第5步对应使用StarUML画出图;第6步对所画出的图进行验证。
以本单元第一次作业为例,我先通读了一遍指导书,明白了本单元需要我们实现一个图书馆模拟系统,其中具体需要实现借书、还书等功能。
我认为每个名词代表一个类,而每种行为对应一个函数。模拟的本质在于对不同情况交给不同的部分处理,通过分支遍历所有的情况即可。
2. 主干架构
对于主体业务逻辑我是构建了一个 图书馆类 来进行处理,几位管理员以及自助机器均可以看作是图书馆的 工作人员,故在图书馆中实现各一个实例即可。同时我还在图书馆中构建了 书架类,用于模拟真实图书馆的馆藏,允许借阅的书籍均保存在书架类中,书架类在图书馆类中进行实例化,需要访问书架的工作人员(比如自助机器、图书管理处、整理管理员等)将书架的引用通过构造方法传入类中作为一个属性。各种输入请求由图书馆类来进行综合分析,之后调用这些工作人员类的中方法来进行处理
3.代码设计和UML模型设计之间的追踪关系
代码设计与UML类图间的追踪关系——非常紧密
从本单元第一次作业开始就要求了类图的绘制,在架构设计之初也遵循了正向建模的模式,在开发过程中也注意了类图与代码的对应。
第一单元是我真正意义上第一次采用面向对象的思想去解决问题],将复杂的表达式层层解析为一个个对象,使用递归下降的方法对其进行解析和处理,最终迎刃而解。
第二单元主要学习多线程编程以及设计模式的应用,学习到生产者消费者模型和流水线模型,通过在作业中设计这两种模型也加深了对面向对象编程的理解,将调度器、托盘、需求、电梯等设计为对象,分别思考他们的功能,最终作为一个个模块组合为项目,这也让我体会到面向对象编程“分治”的特点。
第三单元的核心是学习JML规格化语言,没有太多需要自己设计架构的地方。此外也借此复习了图论的相关算法,并了解到各个基础算法的优化方式。
在第一次作业中就模仿实际图书馆把所有工作人员类都放在一个图书馆类中,这样就让第二次作业的迭代比较容易。整体采用了面向对象的思想,让整体的架构高内聚低耦合。
主要使用一些在各种群里流传强测试点或者自己手动构造一些测试点和同学进行对拍,之后又开始使用别人编写好的评测机。
在本学期课程之前,自己的程序或许谈不上测试,一直都是做题通过评测即万事大吉的思想。而经过一学期的锻炼,自己能清晰地认识到测试以及搭建自动评测机地必要性。
首先本学期OO课程带来的最大收获就是学习到面向对象的思想,不光是在作业上,包括后面几次的评测机编写,其实都或多或少体会到面向对象的优势。另外也学到很多知识,包括git的使用,单例、生产者消费者等设计模式,markdown的使用,jml语言和uml图等。
另外,一次次作业的迭代开发也让我意识到设计和架构的重要性,一个好的架构能够帮助程序员更加方便和顺利地维护项目、拓展功能,尽量减少各个模块之间的耦合度,防止修改或增加一个功能,会导致其他模块的功能受到影响,最终导致迭代难度过高而重构。