BUAA OO 第四单元&全课程总结

陈睿正-22371213 2024-06-16 23:59:04

第四单元总结

本单元所实践的正向建模与开发

正向建模是一种用于描述和分析系统或过程的建模方法。它从系统的需求和功能出发,明确系统中各个模块及其相互关系,进行系统的设计和实现。

在本单元涉及的 UML 图中,与代码架构最贴近的是 UML 类图,大致使用流程如下:首先,对系统进行需求分析,识别出系统中的关键模块,作为 UML 类画入类图,并初步为每个类定义属性和方法,确定类之间的继承、关联等关系,最后根据 UML 类图编写代码,并对 UML 类图中的细节进行完善修正。而 UML 状态图和时序图则展现了对象在系统运行时的状态变化和行为逻辑,以及各个类之间如何相互协作共同完成对一件任务的处理,这些逻辑很难在代码层面直观展现,但却可以在 UML 状态图和时序图中简洁清晰地表示出来。

本单元作业的架构设计

  • UML 类图

img

  • UML 状态图

img

  • UML 顺序图

img


(仅画出“用户成功预定新书”和“用户成功取书”两个场景。)

本单元架构基本按照书的状态进行设计,为书可能存在的每个位置建一个类。

在编写过程中,感觉较为困难的部分是如何协调多个类共同完成一件任务,即确定任务完成的各个步骤、各个步骤分别应该放到哪个类中进行处理以及处理时消息传递的流程。如用户借阅流程中,检查书籍是否有余本在架和是否为 A 类书籍显然放到 Bookshelf 类中处理最合适,而检查是否符合借阅数量限制则放在 User 类中,并且由 BorrowAndReturnOffice 类向 User 类传递消息进行借阅数量限制的检查。编写时想到的另一种可行的方法是由 Main 类依次向 Bookshelf 类、User 类传递消息,检查书籍是否可借阅,但这样设计还需要 Main 类在不符合借阅数量限制的情况下向 BorrowAndReturnOffice 类传递一次消息,不如前文设计的消息传递流程简洁。

对于图中唯一多设计出的 WareHouse 类,本意是想将其作为 Bookshelf 类和 BookDriftCorner 类的接口,这样在一些流程(比如 query, borrow, return)中,无需繁琐地判断消息接收的类应该是 Bookshelf 类还是 BookDriftCorner 类。但写了一部分后发现由于除了 User 类之外所有类的属性和方法均设计为了静态属性和方法,难以支持接口和继承,故只好将 WareHouse 类改装为类似 Controller 的消息分发类,根据书的类别号判断应该将消息传递到哪个类中。本人认为,使用单例模式而不是将所有属性方法定义为静态应该可以避免这种问题的出现 ,但是写都写了,懒得改了

OO 课程总结

在四个单元中架构设计思维的演进

在第一单元中,我主要沿用了 OOpre 的知识,通过面向对象的编程思想进行各个类的构建,完成了表达式解析与化简这项复杂而庞大的任务。在仅用“类”这一个概念就顺利完成复杂项目的过程中,我逐渐领悟到面向对象编程思维在大型工程领域的重要意义。

在第二单元中,我首次接触了多线程设计,花费了大量时间在死锁、线程退出条件等问题上踩坑,并逐渐认识到了多线程编程中的一些关键点,如 Distributer 类的设计和及时释放不需要的锁的设计原则。另外,在这次作业中,我进一步掌握了面向对象编程的各种方法,开始在编程中熟练使用接口、继承等特性,弥补了第一次作业的不足。

在第三单元中,我首次领悟到 JML 这类形式化语言在实际生活中的作用。这次作业中涉及自行涉及架构的部分较少,仅在必要时添加辅助类即可。

在第四单元中,我首次接触了使用 UML 进行正向建模的设计方法。在架构设计上,有了先前的经验,我在潜意识中开始更多考虑架构设计的合理性,而不是仅追求功能上的实现,使迭代时几乎无需改动先前原有的方法,增量开发即可。

在四个单元中测试思维的演进

在四个单元中,我基本都尝试了手动构造极端数据和评测机大规模数据测试两种测试方法。手动构造数据主要观察程序在极端情况下的稳定性和性能,如第三单元中测试程序在全是时间复杂度较高的指令时是否超时,这是评测机的随机生成所做不到的;而评测机随机生成的数据可以弥补手动构造数据时考虑不周产生的漏洞,与手动测试相辅相成。在第三单元中,我还特别学习了如何根据 JML 的约束条件构造样例以及检查结果的正确性,收获颇丰。

课程收获

回顾整个课程,我认为收获最多的部分来自第二单元的多线程内容,其中很大一部分原因来自我之前并未深入接触过多线程编程,即使曾经在程序中创建过多个线程,也只是各个线程各司其职,做着相对独立的工作,而在多线程中,各个线程间的数据共享和协作其实才是要点所在。其次是第三单元的 JML 规格和第四单元的 UML 建模,这两个单元的内容虽然不会直接影响架构设计与代码编写,但都是面向对象设计过程中的强有力工具。前者可以让我们精准无误地理解他人编写的方法,而后者可以使我们自己的设计思路直观形象地表示出来。最后就是对上学期 OOpre 知识的强化与拓展。无论如何,本学期的 OO 经历都将转化为过硬的知识储备和编程素养,成为今后人生中一笔宝贵的财富。

...全文
56 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

301

社区成员

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

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