2024 OOUnit4总结

杜瑞-22230613 学生 2024-06-17 19:21:22

一.正向建模与开发

本单元主要学习的是uml类图,旨在教导大家先通过uml图来构造基本的思路再完成对应的具体代码。一方面,UML类图提供了一种可视化的方式来描述系统的结构。通过类、属性和方法的定义以及它们之间的关系,这使得我可以更清晰地理解系统的组成部分和彼此之间的联系,从而进行更好的结构化设计;另一方面,使用UML类图进行正向建模,使得我能够更好地组织和管理代码。通过清晰地定义类的职责和功能,以及类之间的关系,可以使代码更易于理解、修改和扩展,也有利于我在后续的迭代中不断升级自己的架构。

二.架构设计与UML设计

1.代码的架构设计

对于本单元的作业,我主要是通过根据需求,在图书馆中建立了借阅处(BorrowingDesk),存放书籍的书架(BookShelf),预留书籍的预约处(Reservation),以及管理学生的类(Student),并根据后续作业的需求新增了用于存放漂流书籍的漂流角(Corner)等。其中在图书馆中有着存放所有学生的HashMap数组(通过学号可寻找到对应的学生)。

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

  • 设计一致性:UML模型设计提供了对系统结构和行为的可视化描述,有助于在设计阶段更好地理解系统需求、功能和结构。这些设计思想可以直接转化为代码设计,从而保持设计一致性,避免设计与实现之间的偏差。
  • 指导实现:UML模型设计可以为代码设计提供指导。例如,类图可以直接映射到代码中的类和其成员,时序图可以帮助指导代码中的交互顺序,状态图可以指导状态机的设计等等。因此,UML模型设计为代码设计提供了直接的指导和启发。

三.架构设计思维的演进

第一单元的主题是对于多项式的识别与对应的运算。这个单元的作业我自己主要是根据第一次实验中课程组给出的基础代码进行了一定程度的个性化改装而完成的,我个人认为本单元学到的最重要的知识就是递归下降及其应用,这一思想直接解决了多项式-项-因子(可能也是新的多项式)的问题,从而使得我完成了最为重要的第一次作业的基本架构实现及其后续的新增功能。

第二单元的主题是多线程的应用。这个单元应该是我接触到的四个单元中最抽象的一个了。由于我的能力有限(光是能够保证电梯能够正确运行对我来说就已经是很不容易了),所以我基本没有像很多大神一样采取影子电梯等高水平的操作,而是采取了相对普通的分配方式,只能说我的水平还是不太够了,但多线程的思想对于我日后的代码构造一定有着很重要的意义。

第三单元的主题是jml语言。这个单元似乎在讲述一门很新的语言(新到我刚开始一脸懵的那种)。其实我最开始并不能理解为什么课程组要刻意将本来可以三言两语就讲明白的需求描述的如此复杂,但通过后续老师的讲课及助教编写的辅导资料,我深刻地理解了jml语言本身的重要意义。而对于本次作业的代码,由于本单元的主题是将jml语言翻译成Java代码,所以在起初实现功能上并没有什么问题,但是后来随着测试样例数据规模的提升,我起初的简单构造显得逐渐吃力(即运行时间超过十秒),所以我在其他同学的帮助下对我的代码引入了并查集、维护等新的思路,最终也是相对平稳地完成了任务。

第四单元的主题是uml类图。这个单元要求我们先通过类图来初步设计自己的架构,主要考验的是实现类图与实际代码的一致性。

四.测试思维的演进

由于课程难度比较大(其实是我个人太菜了),我参加互测的次数并不多(主要还是集中在了第三单元)。而在第三单元的几次互测中,我主要是根据自己犯过的问题来设计对应的测试样例(比如删除关系时对于Tag的恰当处理、如果对方也是像我一样出于性能考虑采用的是维护数据,那我就通过一些细微的变化来编写对应的样例什么的),虽然我被刀了十几个样例点的样子很狼狈,但我每次成功时都有一种诡计得逞了快感(

五.课程收获

通过一个学期的学习(其实算上先导课是一年了),我学到了递归下降,多线程的设计、jml语言、uml类图等多方面的知识,对于Java语言和面向对象的编程思维有了进一步的理解。

...全文
313 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)【采用BPSK或GMSK的Turbo码】MSK、GMS内容概要:本文主要介绍了采用BPSK或GMSK调制方式的Turbo码相关技术研究,重点涵盖GMSK调制下的二比特差分解调方法、Turbo码与BPSK/GMSK调制相结合的系统性能分析,并提供了完整的Matlab代码实现方案。研究内容包括调制解调原理、编码结构设计、误码率仿真及系统优化等关键环节,旨在通过仿真手段验证所提出方案的有效性和可靠性,帮助研究人员深入理解现代数字通信系统中的关键技术和其实现方法。; 适合人群:具备一定通信原理和Matlab编程基础,从事无线通信、信号处理、编码理论等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握GMSK调制与Turbo码结合的系统设计与仿真方法;②学习二比特差分解调算法在实际通信系统中的应用;③通过Matlab代码实现提升对数字调制解调和信道编码技术的理解与实践能力;④为相关课题研究、毕业设计或工程项目提供参考和技术支持。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,对照通信系统基本原理深入理解各环节功能,重点关注调制解调过程与Turbo译码的协同工作机制,并尝试修改参数以观察系统性能变化,从而达到理论与实践相结合的学习效果。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种类,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 在当前文档中,我们将详细研究在C#开发平台中借助BouncyCastle.Crypto库1.8.10版本达成中国的国家标准密码学方案,涵盖SM2、SM3以及SM4这几项技术。这些密码学方案在中国网络安全保障与数据维护领域具有核心地位,为本地化安全解决方案提供了坚实的技术支撑。 让我们首先掌握这三个国家密码算法的基本原理: 1. **SM2算法**:SM2是一种基于椭圆曲线密码体系(ECC)的公钥加密方案,主要用于数字签名和加密操作。它提供了一种高效且安全的身份确认和数据防护机制。 2. **SM3算法**:SM3是一种密码学哈希函数,与SHA-256类似,能够将任意长度的输入信息压缩为固定长度的摘要,常用于数据完整性的检验和确认。 3. **SM4算法**:SM4是一种分组密码方案,采用128位的分组大小和128位的密钥,适用于对称加密,广泛用于无线网络传输和存储数据的加密处理。 接下来,我们将逐步解析如何运用BouncyCastle.Crypto库在C#环境下实现这些密码学方案: **1. 引入库与配置开发环境** 在C#应用程序中,需要通过NuGet包管理工具或手动方式添加BouncyCastle库的引用。务必确保安装的是1.8.10版本。 ```csharp using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; ``` **2. 实施SM2的加签与解签** SM2的签名过程和验证操作涉及椭圆曲线运算。必须创建一个私...

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧