BUAA-OO-24-Unit4总结

孙延范-22371521 学生 2024-06-13 18:27:01

0.引言

在当今的软件开发领域,面向对象设计与构造(Object-Oriented Design and Construction,简称OO)已经成为了核心的思维方式和工作方法。作为一名计算机科学专业的学生,我经历了为期一学期的OO课程学习,这个课程不仅深化了我对面向对象编程的理解,还锻炼了我的软件架构设计和系统开发能力。本篇技术博客是我对第四单元的总结,也是对这门课程的学习总结。

1.正向建模与开发

正向建模与开发是面向对象设计与构造过程中的一个关键环节,它强调在设计阶段的早期使用模型来捕捉系统的需求和结构。在第四单元中,我们采用了UML作为主要的建模工具,通过绘制类图、状态图和顺序图来指导我们的开发工作。
在实践正向建模与开发的过程中,我首先遇到了对StarUML等建模工具的不熟悉。但是,通过学习和实践,我逐渐掌握了这些工具的使用(虽然填类图还是很麻烦),并能有效地将我的设计思路转化为可视化的模型。然而,工具的掌握只是第一步,真正的挑战在于如何将这些模型转化为实际的代码。
在绘制类图时,我学会了如何识别系统中的类和它们之间的关系,如继承、关联和依赖。这帮助我更好地理解了系统的结构,并为代码的实现提供了清晰的蓝图。在设计时我就将不同的功能拆分开来,合理利用继承,尽量保证高内聚低耦合,这样在后续的开发过程中就能更好地实现模块化和复用。状态图和顺序图则帮助我理解了对象在其生命周期中的行为,以及不同对象之间如何通过消息传递来协作。
在实际的代码开发过程中,我意识到模型和代码之间往往存在差异。模型的抽象性意味着它不能捕捉到代码的所有细节,这就需要我在编写代码时不断地调整和完善模型,可以说我的类图和代码是在同步修改的。同时,我也发现,在开发过程中会出现一些在设计阶段无法预料的特殊情况,例如某些方法必须要访问其他类的属性,究竟是新建一个类来管理它们的关系,还是加上关联关系,让它们互相访问,这就要求我具备灵活应对和修改设计的能力。

2.作业设计架构与UML模型追踪关系

在第四单元的作业中,我设计了一个图书馆管理系统,旨在实现对图书借阅、预约、漂流等功能的管理。在设计架构时,我遵循了模块化、高内聚低耦合的原则,以确保系统的可维护性和可扩展性。

  1. 核心类设计

    我首先定义了核心类,如Library(图书馆)、BroServer(借还处)、Reservation(预约处)、Bookshelf(书架)、BookDate(数据库)、BdcServer(图书漂流角)、Student(借书的学生)、Book(书籍)。这些类分别负责处理借书、预约、书籍管理、数据存储、漂流功能、学生信息处理和书籍信息处理。

  2. UML类图

    在设计阶段,我绘制了类图来展示这些核心类之间的关系。类图清晰地展示了各个类的属性和方法,以及它们之间的继承、关联和依赖关系。例如,BroServer、Reservation和BdcServer类都继承自Server类,Library管理(关联)所有的Server类。

  3. 状态图与顺序图

    为了更全面地理解系统的行为,我还绘制了状态图和顺序图。状态图展示了对象在其生命周期中的状态变化,而顺序图则揭示了不同对象之间如何通过消息传递来协作完成任务。

  4. 代码实现

    在实际编码过程中,我严格遵循了UML模型中的设计。例如,在Library类中,我实现了对请求的解析和分发功能;在BookDate类中,我记录了每本书的信息。

  5. 追踪关系

    通过对比UML模型和最终代码,我发现两者之间存在紧密的追踪关系。大多数类和方法都与UML模型中的设计相匹配,这表明我在设计阶段所做的努力在实际编码中得到了体现。然而,也有一些细节在编码过程中进行了调整,这可能是由于在设计阶段未能充分考虑到的特殊情况。

  6. 迭代与优化

    随着开发的深入,我不断地优化和调整UML模型,以更好地反映实际情况。例如,在迭代过程中,我根据实际需求新增了BdcServer类,并在BroServer类中添加了专门的方法来处理漂流图书。这些调整都反映在UML模型中,使得模型更加完善和准确。

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

  1. 第一单元:从直觉到设计

    回想起第一单元的学习,我发现自己以前看到题就直接开始搓代码,没有提前思考框架,纯凭直觉。但随着课程的深入,我意识到这种方法是活不过后续的迭代的,于是我学会了使用递归下降法这样的设计原则,它们让我能够更精准地定位问题,并高效地解决问题。这个过程教会了我,面对复杂问题,有策略地使用工具和方法,比单纯的直觉更能带领我走向成功的彼岸。

  2. 第二单元:从单线到多线

    第二单元,就像是打开了一扇新的大门,我初次接触到了多线程的世界。刚开始,我对线程同步和通信的概念感到陌生而困惑,但随着实践的深入,我逐渐掌握了多线程编程的技巧,能够设计出稳定且高效的并发程序。这个过程让我明白了,多线程并不仅仅是技术的堆砌,更是一种思维的转变,它要求我们考虑更多的并发性和资源共享的问题。

  3. 第三单元:从代码到规范

    第三单元的学习,让我看到了代码背后更深层次的东西。JML的学习让我对软件规范有了更深的认识,我开始尝试在设计阶段引入规范约束。这就像是给我搭建了一个更稳固的框架,让我在编码过程中减少了错误,提高了代码的质量。这个过程让我意识到,好的设计不仅仅是代码的堆砌,更是对问题的深入理解和规范化描述。

  4. 第四单元:从模型到实现

    第四单元,UML的学习让我掌握了使用类图、状态图和顺序图等工具进行系统设计和建模。这个过程让我能够将设计思维转化为可视化的模型,并在实际编码过程中不断调整和完善模型,实现了设计到实现的迭代优化。

通过这四个单元的学习和实践,我的架构设计思维得到了显著的演进。从最初的直接编码,到逐步引入设计原则、规范约束和建模工具,我逐渐形成了一套完整的设计思路和方法。这些经验和技能将对我的未来学习和职业生涯产生深远的影响。

4.测试思维的演进

  1. 第一单元:手工检验与同学评测机的合作

    在第一单元,我开始时使用简单的数据检验基础功能的正确性,例如课程组给出的样例,这让我对代码的正确性有了初步的把握。

    通过使用同学设计的评测机进行高强度的正确性测试。

    同时,我也尝试手搓特殊/极端数据来测试代码的性能。

  2. 第二单元:从基础到性能

    在第二单元,我不仅继续手工检验基础功能的正确性,还开始编写数据生成器来测试代码的性能。

    使用自己设计及同学设计的评测机进行高强度的正确性测试。

    通过与同学的评测机合作,我学会了如何更有效地利用资源,提高测试的质量和效率。

  3. 第三单元:JUnit与规格约束

    第三单元的学习让我对测试有了新的认识,我开始使用JUnit进行自动化测试,以提高测试的效率和准确性。

    同时,我也开始使用规格约束作为测试的依据,这让我对测试的规范性和系统性有了更高的追求。

    通过编写Junit和规格约束的测试用例,我能够更加全面地验证代码的正确性。

  4. 第四单元:交互式评测与白盒测试

    第四单元的交互式评测让我意识到,测试不仅仅是对代码的验证,更是对设计的验证。

    我开始更多地关注白盒测试,通过阅读和理解代码,进行静态分支覆盖,以确保代码的质量和设计的合理性。

5.课程收获

OO课程终于结束了,面向对象编程的学习经历,对我来说是一段宝贵的旅程。虽然压力山大,但不得不说我真的学到了很多东西,特别是第二单元的电梯,真是痛并快乐着,面对多线程的bug无从下手,却也在一次次的修改中理解了何为多线程。

从最初的迷茫和手忙脚乱,到现在能够清晰地规划项目架构,我的设计思维得到了质的飞跃。学习OO的历程让我明白,好的设计是成功的一半,而测试则是确保我们作品稳固的基石。通过这门课程,我不仅学会了如何使用Java语言,更重要的是学会了如何思考问题、分解问题、解决问题。面向对象的思想让我认识到了代码的美感,设计模式的运用让我体会到了编程的优雅。这不仅仅是一门课程,更是一次思维的革新,一种能力的飞跃。

当然,这一切的成长都离不开课程组的辛勤付出,所以最后还是感谢课程组一学期以来的奉献,特别是在实践中,助教们的耐心指导和及时反馈,让我在遇到难题时总能迅速找到解决之道。他们的专业和热情,让我对编程的热爱更加深厚,也让我对未来的开发之路充满信心。

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

301

社区成员

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

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