第四单元:UML建模

一、正向建模与开发

在学习本单元之前,我只使用UML作为”画图工具“,在前三个单元的博客总结中由已经完成的代码生成UML类图。但是学习本单元之后,我发现UML可以帮助我们进行架构设计,理清类与类之间的层次关系和交互行为,在代码实现过程中让我们达到事半功倍的效果。

利用UML进行正向建模设计Java应用程序的流程主要包括以下几个步骤:

1、明确需求(甲方让我怎么做,我就怎么做)

在总体架构设计之前,我们当然要明确我们的程序需要实现哪些功能,有哪些限制。这需要我们和客户进行充分交流,并且随着项目推进,客户需求也可能发生改变,这就更需要我们提高与用户交流的频率。

2、绘制类图(感觉类图是最能体现我们作为设计者的思考)

类图是描述系统中类、接口、关系和属性的UML图表。

第四单元完成之后,我感觉类图是对我帮助最大的。在写代码之前,我们可以通过UML类图将我们的宏观设计实现可视化,标识出系统中各个类的属性、方法,定义各个类之间的关系,如继承、关联等。

3、绘制状态图(好像有限状态机的一种图。。。)

状态图主要用于描述对象在不同状态之间的切换过程。我们可以在类图的基础上创建状态图,展示不同的方法调用导致的对象状态的切换。

4、绘制顺序图

顺序图主要用于描述系统中的活动、流程。我们可以根据类图和系统工作流程绘制顺序图,展示系统类与类之间消息的传递。

5、编写代码

有了这么多铺垫,我们终于可以根据我们的设计开始编写代码。编写代码的过程中,我们也可以根据写代码时的实际情况对我们的UML图进行修改,毕竟宏观设计时很难全面地考虑到具体实现的难易程度。对照UML类图写代码真的清晰!

6、测试与维护

之后我们就需要通过数据来对我们的程序来进行测试,确定我们的程序是否满足客户需求,也就是我们熟悉的debug过程。当然,我们也要在迭代开发的过程中继续更改我们的代码和UML图。

二、作业架构设计

本单元作业的主要任务是要我们模拟一个小型图书馆管理系统,根据一定的规章制度,以满足用户的借书、还书、查询、预约、预约取书、续借等请求。

  • hw13

第13次作业的主要任务是构建图书馆的借书、预约书流程。首先我要确定需要那几个类,根据题意,书籍仅可以存在于如下四个位置:书架、预约处、借还处和用户。所以我先建立了Shelf、ReservationDesk、BorrowAndReturnOffice、Student四个类,之后还需要一个Library类站在上帝视角来描述这些类之间的交互行为即书的流通等等。因为上述四个类都可以看成是书的“容器”,所以我还需要确定容器的类型。书架和借还处需要存每个书号书籍的数量(选用HashMap); 预约处需要存待处理的预约请求(选用ArrayList),和每个用户预约的书以及预约的时间(选用HashMap); 用户只需要存持有哪些书号的书即可(选用ArrayList)。

总体架构设计基本确定,我们就可以开始写代码了。在实现的过程中,我发现预约处的书需要存储的信息比较多,除了书号还有到达预约处的时间和是否逾期,所以我将这些信息封装在了一个叫副本(Copy)的类中。除此之外,比较难处理的就是开馆和闭馆之后的整理,实际上开馆和闭馆之后整理图书的效果是一样的,因为只有开馆整理后到闭馆前才会有用户的请求,我们只需要根据题目限制按规定完成即可,我使用的是在闭馆时将借还处清空,开馆时先将预约处逾期未取的书整理到书架,再将被预约的书从书架整理袋预约处。

  • hw14

本次作业新增了续借、图书漂流;新增的限制有:图书借阅期限限制。

图书馆新增漂流角(BookDriftCorner),图书馆可以接受用户捐书,被捐的书会直接送到漂流角成为非正式书籍。漂流角的书不能被预约或续借,只能借书,借还次数大于等于2就转为正式书籍交由书架管理。

这次的迭代我们主要需要解决的就是非正式书籍的管理和借阅期限限制的问题,我新建了漂流角类(BookDriftCorner)用来存非正式书籍;Book类,用来封装书号、借阅期限、借出日期、借还次数信息。Student类中的容器存储对象也变为Book类的对象。

最后还需要解决整理时非正式书籍转正,也即借还处的书既可以整理到书架,也可以整理到漂流角。

  • hw15

本次作业引入了用户信用分系统,对用户的行为做进一步的限制。

总体来说难度不是很大,需要我们多维护Student类的一个creditScore信用分属性,我们需要再借书、预约、捐献、书籍转正等等这些地方注意维护信用分即可。有一个需要注意的小地方就是信用分有上限无下限,所以有的情况下,用户先减分再加分和先加分再减分的结果不同。

三、架构设计思维的演进

  • 第一单元的主题是“表达式展开”,可以说虽然上了oo的先导课但是第一单元的压力还是蛮大的。第一单元主要是想让我们接触并建立面向对象的思想,实现从面向过程编程到面向对象编程的过渡。“一切皆是对象”,第一单元中我着实的体会到了层次化设计的意义,表达式是一个对象,表达式又是由一个个项由“+”号连接起来的;项是一个对象,项又是由一个个因子由“*”号连接起来的;因子是一个对象,又可以分为表达式因子、常数因子、幂函数因子等等。在完成第一单元作业的过程中,我写代码之前主要还是去“猜”我需要哪些类,都完成之后,我才发现了如何从问题中抽象出一系列对象,如何根据这些对象之间的关系建立一个层次化、模块化的结构,来把一个用面向过程思想解决的过程转化为面向对象解决,极大地降低了问题的复杂度。

  • 第二单元的主题是“电梯调度”,对我来说是强度最大的一个单元了。因为设计不同线程对同一个容器、数据等的读写,所以我们需要考虑线程安全问题。这期间,我学会了如何分析和解决多线程问题,判断那些对象之间的交互存在线程安全问题,如何合理的加锁避免死锁同时避免忙等提高效率。这期间我也学习到了常见的设计模式:生产者-消费者模式、工厂模式、观察者模式等。我还学会了更高效的数据结构和算法,比如电梯调度的策略如影子电梯等。这个单元提升了我系统在大规模高并发环境下的设计和实现能力。

  • 第三单元的主题是”JML规格“,这个单元中我主要领略到了契约式编程的魅力——高可靠性、高复用性、便于测试。我也是见识到了不需要用自然语言描述题目,我们只要读懂规格就可以直接进行代码实现。完成的过程中,我也是学习到了许多算法,来提高效率,比如并查集、双向bfs等。我还复习了数据结构图论中的dfs,bfs,dijkstra等算法。这个单元还让我写评测机的能力得到了提升,因为需要通过玄学的junit测试。

  • 第四单元的主题是“UML建模”,在这个单元我们可以借助UML图来实现我们的系统设计可视化,以此方便我们进行代码实现和开发。这个单元锻炼了我在写代码之前先进行宏观设计的能力,不再像第一单元一样去“猜”我需要哪些类,或者是代码写到一半突然发现需要新的一个类,而是考虑要求和限制,预先设计好。状态图和顺序图帮助我们理清了对象状态的转变和类与类之间的交互行为。这个单元使我们进一步感受到UML的"面向对象"本质,进一步加深对面向对象思想的理解。

四、测试思维的演进

学习面向对象课程后,我的测试思维经历了一系列的演进:

第一单元 单元测试意识的加强:

第一单元强调单元测试的重要性。学习后,我更加注重编写可靠、独立和可重复执行的单元测试。我学习了如何使用测试框架和断言库来编写有效的单元测试,并将其作为开发过程中的重要环节。

第二单元 集成测试和系统测试的考虑:

除了单元测试外,学习第二单元引导我关注集成测试和系统测试。我学习了如何编写集成测试来测试多个组件之间的交互,并使用系统测试来验证整个系统的功能和性能。这种全面的测试思维将帮助我更全面地保证系统的质量和稳定性。

第三单元 对于单个方法的测试:

学习第三单元后,我了解到了如何利用规格对单独的方法进行测试,并且独立编写评测机,掌握了随机数据生成的方法。

第四单元 自动化测试和持续集成的实践:

学习第四单元后,我了解到了自动化测试和持续集成的实践。我学习了如何使用自动化测试工具和框架来自动运行测试,并将测试过程集成到持续集成和持续交付流程中。这种实践能够提高测试效率和代码质量。

五、课程收获

  • 首先是掌握了Java语言基本的语法,但更重要的是建立了面向对象的思想。除此之外,我还掌握了很多设计模式,扩充了自己解决问题的手段。

  • 掌握了很多测试方法,并且学会编写简易的评测机。

  • 第四单元过后,我养成了看到问题之后先充分进行架构设计之后再代码实现的习惯,而不是像第一单元那样“外行”地直接写代码。

  • 新认识了许多算法,并且回顾到了一些学过的数据结构和算法,更加熟练掌握,提升了自己的代码效率。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值