2024 BUAA OO UNIT4

林舒雅-22371132 学生 2024-06-11 23:54:48

目录

  • HW16-BLOG
  • 一、正向建模与开发
  • 二、架构设计
  • 三、设计思维的演进
  • 四、测试思维的演进
  • 五、课程收获

HW16-BLOG

一、正向建模与开发

本次单元的重点在于事先设计图书馆系统的业务逻辑,根据UML图正向开展代码编写。

  • 类图:在类图中,我们需要明确类的数量和类之间的关系,而这需要我们明确类的职责,进而促成了高内聚低耦合与设计架构的融合。
  • 状态图:本单元中,我们需要绘制图书状态转移的示意图。在注明Guard,即转移条件的过程中,图书馆的业务逻辑显然更加清晰,也更加远离自然语言的繁琐性,更加形式化。
  • 顺序图:顺序图是对整个图书馆系统业务逻辑的直接的清晰的刻画。

在以上所述的正向建模之后,能够对业务逻辑有更加深刻的理解,对代码有更加清晰的规划。

二、架构设计

HW13:

img

HW14:

img

HW15:

img

最终代码设计和UML模型设计之间是互相追踪的关系。

首先进行初步的UML建模,这只是一个想象中的空中楼阁。在着手进行代码开发的时候,总会遇到各种各样的问题,需要对设计进行细节上的微调,甚至推翻重来。所以代码设计和UML模型设计应该是互相追寻的关系。一面进行设计以有较好的设计导向,一面结合实际开发调整落地。

三、设计思维的演进

在四个单元中,我的架构设计思维经历了从基础到复杂、从具体到抽象的演进过程。

  1. 基础与细节关注(第一个单元:表达式的计算和化简)
    • 这个单元主要关注的是表达式的具体结构和计算逻辑。
    • 架构思维体现在如何设计类和对象来代表不同的表达式因子和计算步骤。
    • 随着表达式的复杂性和计算方式的多样化,我开始思考如何抽象出通用的计算接口和化简策略。
    • 这个阶段培养了对问题细节的敏感性和对基础架构的初步设计能力。
  2. 并发与资源管理(第二个单元:多电梯模拟)
    • 进入这个单元后,我开始面对多线程和并发编程的挑战。
    • 架构思维从简单的对象设计扩展到如何管理线程间的通信和同步。
    • 学会了使用锁、条件变量等机制来预防死锁和确保线程安全。
    • 开始考虑性能优化,设计节能策略以减少电梯用电量。
    • 这个阶段培养了在并发环境下的架构设计和性能调优能力。
  3. 形式化与规范(第三个单元:根据JML进行编程)
    • 在这个单元中,我体验了高度形式化的编程规范,即Java建模语言(JML)。
    • 架构思维进一步抽象,我开始关注如何根据规范构建满足特定约束的系统。
    • 学会了使用JML描述接口和行为规范,并通过测试确保代码的合规性。
    • 这个单元考验了算法基础和数学逻辑能力,同时也培养了在规范约束下进行架构设计的能力。
  4. 正向建模与抽象设计(第四个单元:训练正向建模和开发)
    • 在这个单元中,我学会了使用UML图进行正向建模和系统设计。
    • 架构思维达到了一个新的高度,我开始从全局和抽象的角度思考问题。
    • 能够使用UML图来描述系统的各个部分及其之间的关系,包括类、接口、交互等。
    • 这个单元培养了系统分析能力和抽象设计能力,使我能够根据业务需求构建出清晰、可扩展的系统架构。

总体来说,在四个单元中的架构设计思维经历了从关注细节到关注全局、从简单到复杂、从具体到抽象的演进过程。每个单元都为我提供了不同的挑战和机会,使我能够不断提升自己的架构设计能力和系统分析能力。

四、测试思维的演进

在四个单元中,我的测试思维也经历了显著的演进。

  1. 第一个单元:表达式的计算和化简
    • 初始测试思维:在这个单元中,我开始意识到测试的重要性,并尝试编写一些基本的测试用例来验证表达式计算和化简逻辑的正确性。
    • 边界测试:随着表达式的因子和计算方式变得多样化,开始注重边界情况的测试,例如测试特殊字符、非法输入和极端数值等。
    • 回归测试:在修改和优化代码后,我学会了进行回归测试以确保没有引入新的错误。
  2. 第二个单元:多电梯模拟
    • 并发测试:在这个多线程模拟的单元中,开始关注并发环境下的测试,包括线程间的通信、同步和竞态条件等。
    • 死锁检测:由于死锁预防和避免是一个重要的问题,学会了编写测试用例来检测是否存在死锁,并相应地调整同步策略。
    • 性能测试:为了设计出尽可能好的电梯运行策略以减少用电量,开始关注性能测试,通过模拟不同的电梯运行场景来评估你的策略的有效性。
  3. 第三个单元:根据JML进行编程
    • 形式化验证:在这个单元中,我体验到了高度形式化的编程规范JML。学会了根据JML规范编写测试用例,并使用这些测试用例来验证代码是否满足规范要求。
    • 算法测试:由于这个单元考察了大量算法相关的知识,开始注重算法的正确性和效率。你编写了大量的测试用例来测试不同算法在不同场景下的表现。
    • 等价类划分和边界值分析:在测试算法时,学会了使用等价类划分和边界值分析等技术来确保测试的全面性和有效性。
  4. 第四个单元:训练正向建模和开发
    • 模型验证:在这个单元中,需要先画出UML图,然后根据图进行代码开发。学会了在开发之前使用UML图来验证设计的合理性和正确性。
    • 集成测试:随着系统复杂性的增加,开始关注模块之间的交互和通信。你编写集成测试用例来测试不同模块之间的接口和协作是否正常。
    • 系统测试:在完成整个系统的开发后,你进行了系统测试来验证整个系统是否满足指导书的要求。

总的来说,在四个单元中,测试思维从简单的正确性测试逐渐发展到关注并发、性能、鲁棒性、算法等多方面的测试。我学会了使用不同的测试技术和方法来确保你的代码的正确性和效率。这种测试思维的演进不仅提高了代码质量,也增强了问题解决能力和团队协作能力。

五、课程收获

在面向对象设计课程的这段学习旅程中,我收获颇丰。这四个单元的学习不仅让我对面向对象编程有了更深入的理解,也锻炼了我的问题解决能力和团队协作能力。

首先,在第一个单元中,我接触到了表达式的计算和化简。开始时,面对越来越复杂的表达式和多样化的计算方式,我感到有些吃力。但随着时间的推移,我逐渐学会了将问题抽象成类和对象,通过设计合理的类结构和对象关系来解决问题。这个过程中,我深刻体会到了面向对象设计思维的魅力。

进入第二个单元,我面对的是多电梯模拟的挑战。多线程编程的不确定性让我感到有些困惑,但正是这些挑战促使我更加深入地研究线程间的通信和同步机制。我学习了如何预防死锁、如何设计节能策略以减少电梯用电量。这个过程不仅锻炼了我的编程能力,也让我对并发编程有了更深入的认识。

第三个单元中,我体验了根据JML进行编程的严谨性。JML规范让我意识到,编写代码不仅仅是实现功能,更要确保代码的正确性和可维护性。我学习了如何根据规范编写测试用例,并使用这些测试用例来验证我的代码是否满足要求。这个过程让我对形式化编程有了更深刻的认识,也提高了我的编程质量和效率。

在最后一个单元中,我训练了正向建模和开发的能力。我学习了如何使用UML图进行系统设计,并根据设计图进行代码开发。这个过程让我更加明确系统设计的流程和步骤,也让我对系统设计的重要性和复杂性有了更深入的了解。通过绘制UML图和编写代码,我能够更清晰地表达我的设计思路,并与团队成员更好地沟通和协作。

除了技术上的收获,这门课程还锻炼了我的团队协作和沟通能力。在研讨课中,通过分工协作、共同讨论和解决问题,我们不仅提高了各自的编程能力,也增进了彼此之间的了解和友谊。在这个过程中,我学会了如何与他人有效沟通、如何倾听他人的意见和建议、如何与他人共同完成任务。

总的来说,面向对象设计课程的学习让我收获颇丰。我不仅掌握了面向对象编程的核心概念和技能,还学会了如何分析问题、如何设计系统、如何编写高质量的代码。同时,我也锻炼了自己的团队协作和沟通能力,为未来的工作和学习打下了坚实的基础。这段学习经历将成为我人生中宝贵的财富。

最后,感谢所有老师、助教老师的辛勤付出,感谢每位曾帮助我的同学,谢谢你们。

...全文
91 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

302

社区成员

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

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