BUAA-OO-UNIT4 UML+课程总结

本文是关于BUAA课程中UML建模的学习总结,包括类图、状态图和顺序图的使用,以及代码设计与UML模型之间的追踪关系。作者讨论了不同单元中接触到的Java面向对象、多线程、JML规格语言和测试思维的演进,强调了架构设计和测试在软件开发中的重要性。
摘要由CSDN通过智能技术生成

BUAA-OO-UNIT4 UML

正向建模与开发

本单元围绕UML建模展开,要求我们在三次作业完成UML类图、状态图和顺序图,以表达各个类的关联关系,图书的状态变化以及借书的流程顺序。在构思好UML类图后,根据类图进行代码开发。

  • 类图中,我把题目中涉及到的所有对象都建立了类,并确定了每个类的属性和方法,为各个类建立了关联关系。
  • 状态图中,我为书建立了两种状态,在学生操作书的过程中对书的状态进行切换。
  • 顺序图中,我根据学生借阅需要购买的新书流程,将信息进行划分,实现各个lifeline的交互。

架构设计

整体架构

我将所有题目中涉及到的对象,如self-service machine:自助机器、borrowing and returning librarian:借还管理员、arranging librarian:整理管理员、ordering librarian:预定管理员、logistics division:后勤处、purchasing department:图书管理处等都建立了一个类,他们都属于library类里,并且我建立了book类和bookshelf类,用于上述对象存储书籍信息。所有流程我也均完全仿照题目中的要求,让每个对象执行他该做的事,实现信息交互,这样有助于理解和迭代。

类图

在这里插入图片描述

状态图

在这里插入图片描述

顺序图

在这里插入图片描述

代码设计和UML模型设计之间的追踪关系

我在设计时,首先画出大致的UML类图,描述清楚类与类之间的关系,不急着往里加属性和方法(因为写代码的过程中可能由于自身考虑不周,增添新的方法);然后设计代码,将属性和方法补充完整,并进行测试;基本测试完后,再完善UML图。因此基本能够保证最终代码和UML的同步。

课程总结

架构设计思维的演进

Unit1

初步接触了Java面向对象,并且在重构和迭代中了解并掌握了递归下降算法。递归下降算法非常巧妙,理解起来有一定难度,在迭代中我逐渐加强了对lexer和parser的理解。

此外,在表达式解析时要注意对类之间关系的设计,比如因子就有多种类型,需要对继承关系有很好的掌握。

Unit2

电梯调度单元,接触了多线程的设计思想,这个单元是我认为面向对象课程设计的最好的一个单元,学到的东西很多,如生产者-消费者模型,线程概念,电梯调度的LOOK算法,信号量等等。线程相关的知识还与操作系统的课程相通,让我能够实现课程间知识的融会贯通。

优化电梯调度算法也需要足够的毅力和创新性,并且随着迭代,电梯的调度也需要进行修改,开始的随机调度在后面的作业中就不太适用。这个部分也是这一单元的一个亮点。

Unit 3

JML单元主要给我们推荐了一种规格语言JML。说实话,对JML的印象并不太好,它确实可以正确的表达出设计要求,但这个语言确实有点繁琐,可读性并不强。这一单元的设计也都由课程组规定好了,类与类的关系不需要我们自己实现,我们只需要将JML语言给出的设计要求用自己的方法进行实现即可。

我一开始对JML语言的理解有误,以为只需要按照JML所提供的代码原封不动的翻译成Java即可,事实上我们需要运用算法知识降低时间复杂度,让程序的性能尽可能好。我也因此丢失了不少分数。

除此之外,我认为这个单元并没有体现出太多面向对象课程的思想,最终大家都去为了运行时间卷算法,这应该不是这一单元设计的初衷。

Unit 4

UML单元主要介绍了UML的三种图:类图、状态图、顺序图。我也学到了一些设计思维和架构,并且明白了一个好的工程的工作开展模式。但由于这一单元的作业强度难度太大,大部分同学都是舍本逐末,目的是完成编程任务,而不是研究三种图如何画出,这也是这一单元的一大漏洞。

测试思维的演进

在四个单元中,由于时间原因,我本人并没有写过评测机。我测试使用最多的方法还是手动构造基本数据、大规模数据和特殊情况数据,对程序进行测试,将期望输出和实际输出做对比来确定程序的正确性。此外,我也使用了别人的评测机进行测试,还会和同学进行数据对拍,这些都能够有效地帮助我进行测试

我还学到了很多类型的测试,如黑箱测试、白箱测试、单元测试、集成测试等等。在自己进行测试的过程中,我也用到了一些测试方法。

课程收获

对于OO课程,我投入了很多精力,也学到了很多新知识,对面向对象的编程思想有了深刻的了解,自己的编程能力也得到了充分的提高。虽然也体验到了通宵写代码的经历,但一个学期的努力下来,也算收获颇丰。希望OO课程能越来越好。
刻的了解,自己的编程能力也得到了充分的提高。虽然也体验到了通宵写代码的经历,但一个学期的努力下来,也算收获颇丰。希望OO课程能越来越好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值