双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

2024BUAA-OO-UNIT4总结

袁嘉22230606 袁嘉22230606 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

正向建模与开发
正如荣文戈老师所说,一个熟练的或者说优秀的程序员,写出来的自然就是好程序,面对未来潜在的需求具有扩展性。然而像我这样的同学,虽然在这几次作业中都尽量按照课程组推荐的“先设计再实现”的方式完成作业,但是事实证明并不具有那样一开始就能够设计出完美程序的水平。甚至往往第一版的设计在实现过程中发现都无法完成本次作业的要求。
在这几次作业的迭代中,我先前的一些考虑以及设计都有些不过合理。让我们依照hw13的类图来解释说明:

img

不符合迭代的设计有:

  1. 构造的MessageList类,
    本意是让每个message对应一种书籍的移动,使用MessageList应对多线程的场景,在第一次作业中其实并没有使用MessageList,之后也没有用到,直接删除了。 而Message中其实也只使用到了两个MessageTag。在hw14中将Message添加了 pass 方法,用于方便的构建新的Message用于传递。这个方法理应存在,这也体现到了hw13中架构的不完全。
  2. 额外构建了自己的一些异常类,
    然而事实上并没有什么应用。底层throw出来的异常最终都会被ignore掉,而事实上正常的输入并不会触发这些异常,也对debug没有帮助。
  3. 对书籍的管理,构造了BookList类并采用单例模式。
    这样设计的考虑在于当同一本书的数量很多的时候,如果全部用book类存储,将会占用很大的一部分内存空间。于是只在booklist中存储一份书籍,并且对不同的书籍管理者直接赋予一份数组用于表示书的数量。对于如何在booklsit中快速查询书籍的数量也有一些设计。但是后边的迭代会加入新书籍,这部分的优化就变得繁琐,最后回归了直接查找。单例模式booklist的最大问题在于可能具有“多个书架”。如后续迭代中的漂流角设计。漂流角对正常书籍的借还没有影响,但是理应和正式书籍共用一个借还处。这使得借还处无法继承使用Booklist存储的BookContainter类,最后重构了借还处设计,使用Message的List存储借还需求。

不过,还是有些设计最后发现有其可取之处。例如Message的构造使得hw14的一些重构过程变得十分方便。虽然有占用过多空间的嫌疑,不过最初的Message设计除了保存官方包request的所有信息以外,还会存储时间、book在流程中位置的枚举信息。并且能够方便的完成续借需求。student和studentList的抽象也十分成功。

总之本单元的作业最终还是相当于先实现再绘制图表。因为第一次图的设计基本上全部被推翻修改。最后在实现完成之后再次修改绘制图表。

架构设计思维的演进

最开始,对于面向对象课程最大的疑惑就是为何只讲思维、架构,而不讲具体的实现方法、算法。后面才发现面向对象有很多种不同的设计实现方式,都是正确的。具体选择哪种是不同程序员的区别。
第二单元的多线程,是以后做程序工作的主要内容。主要学习了同步互斥的概念,也是第一次接触多线程程序的设计。
第三单元jml主要在于对高要求程序设计的工作流程学习,主要考虑在“读懂”jml,感知上似乎并没有太多的操作空间。
最后是uml,也就是注重设计能力。对于图评测也就是避免同学们仅仅画图应付工作。
经过几个单元的学习,架构设计思维会从原先设计几种对象,然后从面向过程的考虑来写代码。流程中多个文件和类的代码互相交错书写,最终直到完成整个目标。渐渐也熟悉了面向对象的工作流程,编写代码也是先把一个文件一个类的代码全部写完,一个类一个类的编写,有不妥的地方再修改,是更加符合面向对象思维的编写模式,其实也浅浅暗含“先设计再实现”的方法。

测试思维的演进

最开始,我个人是比较推崇构造数据测试的(这种测试做的好的话肯定是可靠的,比如课程组不就是这样评分吗)。之后接触了junit单元测试,我认为这种测试在重构中用处较大,而比较难以从覆盖率什么的判断出代码的错误。不过jml的学习让我对junit测试有了额外的认识:junit除了一个一个方法的类测试,也可以单纯从另外的角度构造整体测试,而且检测的范围比黑箱测试更大更灵活。不过,在书写和使用了一些自动生成数据的评测机、junit方法之后,对于自动生成数据的可靠性有了理解。这种生成数据的测试,也需要细心的设计数据范围,才能达到比较好的效果。不然单纯靠压力测试,即使找到了bug也很难定位bug的位置并及时修复。

课程学习的收获

虽然经常吐槽java平时作业的压力大,吐槽java纯靠自学。不过在自学中也确实收获了很多。可以说课程组的设置还是比较聪明合理的。通过这门课可以说真正能够入门面向对象程序设计,熟悉整个开发的流程,并且不忘记代码规范,并且自行写出一些具有一定规模的程序。最后,荣老师的java课上也让我学习到了很多C语言的知识,面向对象真的是海纳百川呢。

...全文

相关推荐

无刷直流电机模糊神经网络PID-模糊PID-传统PID三种控制对比Simulink仿真

内容概要:本文系统研究了无刷直流电机(BLDCM)在Simulink环境下的三种控制策略:传统PID控制、模糊PID控制以及模糊神经网络PID控制。研究基于三相桥式星型全控电路结构,构建了转速电流双闭环控制系统,并通过Matlab/Simulink搭建仿真模型,全面对比分析了三种算法在动态响应速度、稳态精度、抗干扰能力及系统鲁棒性等方面的性能差异。文章深入阐述了各控制方法的设计原理与实现机制,重点突出了模糊逻辑与神经网络在自适应调节PID参数方面的优势,验证了智能控制算法在提升电机控制品质上的显著效果。同时,文档提供了详实的仿真资源、参考文献和技术说明,有助于读者复现实验并深化对先进控制策略的理解与应用。 适合人群:具备自动控制理论基础和MATLAB/Simulink仿真能力的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员,特别适用于从事电机驱动系统设计、智能控制算法开发等领域的专业人士。 使用场景及目标:①用于教学与科研中对比分析传统PID、模糊PID与模糊神经网络PID在无刷直流电机调速系统中的控制性能差异;②为高性能电机控制器的设计与优化提供仿真验证平台,支持参数整定与控制策略选型;③辅助完成毕业设计、科研项目或工业应用中的控制算法评估与改进。 阅读建议:建议读者结合所提供的Simulink模型与参考文献,逐步复现仿真过程,重点关注不同控制器的参数整定方法、响应曲线特征及其在负载扰动下的表现。可进一步拓展研究方向,如引入无位置传感器控制、滑模观测器或模型预测控制等先进控制技术,以深化对现代电机智能控制体系的理解与创新能力。

欢多天天写代码

分省份-城投债信用利差跟踪(私募债)20260206.xlsx

分省份-城投债信用利差跟踪(私募债)20260206.xlsx

温柔-的-女汉子

高校技术转移办公室人员如何高效管理技术成果全生命周期?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

傲梅备份软件-windows系统

文件增量、全量定时备份

丁先生5788

科技中介服务机构如何提升技术供需对接的智能化水平?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论
收藏 已收藏
分享
返回顶部