2024北航OO第四单元总结

正向建模与开发

正向建模与开发是一种系统工程和软件工程中常用的方法,主要用于设计和构建复杂的系统或软件。这种方法是从需求分析开始,通过逐步细化和具体化,最终形成可执行的系统或软件的过程。

  1. 需求分析:这是正向建模与开发的第一步,主要目的是理解用户的需求,明确系统的功能、性能、接口等要求。

  2. 概念设计:在理解了需求后,进行概念设计,确定系统的基本架构和主要组件,以及它们之间的关系。这一步可能包括数据模型、流程图、状态图等的设计。

  3. 详细设计:在概念设计的基础上,进一步细化,确定每个组件的具体实现方式,包括算法、数据结构、接口定义等。

  4. 编码与实现:根据详细设计的结果,编写代码,实现系统或软件的功能。

  5. 测试与验证:完成编码后,进行各种测试,验证系统或软件是否满足最初的需求,包括功能测试、性能测试、兼容性测试等。

  6. 维护与更新:系统或软件上线后,根据用户反馈和新的需求,进行维护和更新。

正向建模与开发是一种自上而下、从抽象到具体的设计方法,它强调的是在设计阶段尽可能地考虑所有可能的问题,以减少后期的修改和重构,提高开发效率和质量。
而本单元正是实现正向建模与开发,与前三单元不同,本单元是先设计类图,再实现源码,再根据源码修改类图,这样的设计思路极大提高了整个架构的规范性、合理性。便于实现“高内聚,低耦合”的设计思路。

架构设计以及代码设计和UML模型设计之间的追踪关系

类图:

在这里插入图片描述

架构设计:

  1. 在第13次作业设计中:
    实现了图书馆借书、还书、查询、预约和预约取书功能,能够实现开馆和闭馆整理图书
    设计了 Strategy 类 统一处理图书馆的各种请求。
    设计了 User 类————学生
  2. 在第14次作业设计中:
    新实现了续借和图书漂流的功能;新增了图书借阅期限限制
    新增了 Bdc 类表示图书漂流角。
    Book类中通过新增属性实现图书的借阅日期限制以及升级为正式图书功能
    图书已借阅时间每天开馆都更新
  3. 在第15次作业设计中:
    引入用户信用分系统
    在 User 类中新增 credit 属性,以及增减信用分的一系列方法
    在对应的操作中新增对 credit 的判断以及对应的增减行为

代码与UML模型设计的追踪关系

在软件开发过程中,UML(Unified Modeling Language,统一建模语言)模型设计和最终的代码设计之间存在着紧密的追踪关系。这种关系可以从以下几个方面进行对比分析:

  1. 抽象层次:UML模型设计通常在较高的抽象层次上进行,它关注的是系统的整体架构、模块间的关系、对象的行为等。而代码设计则是在较低的抽象层次上,关注具体的实现细节,如函数、类、变量等。

  2. 表达方式:UML模型设计通常使用图形化的表示方式,如类图、序列图、活动图等,直观且易于理解。而代码设计则是使用编程语言,如Java、C++、Python等,需要一定的编程知识才能理解和修改。

  3. 变更影响:在UML模型设计阶段进行的变更,往往会影响到后续的代码设计,甚至整个系统的架构。而在代码设计阶段进行的变更,影响范围相对较小,但可能会破坏原有的设计模式和原则。

  4. 追踪关系:UML模型设计和代码设计之间存在追踪关系,即从UML模型可以追踪到相应的代码,从代码也可以反向追踪到UML模型。这种追踪关系对于理解和维护系统非常重要,特别是在大型复杂系统中。

  5. 一致性:UML模型设计和代码设计应该保持一致,即模型中的元素和关系在代码中都有对应的实现。如果两者不一致,可能会导致系统的行为不符合预期,或者在维护和扩展时出现困难。

总的来说,UML模型设计和代码设计是软件开发过程中的两个重要环节,它们既有区别也有联系,通过建立良好的追踪关系,可以提高开发效率,降低维护成本。

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

第一单元:层次化设计

第一单元的递归下降让我首次见识到层次化设计的妙用,简单来说,这样的设计思路让我们从实现细节上抽离开来,只需要关注当前层次,例如,在表达式层,我们只关心表达式由各个因子加或减构成,而不关心这个因子具体是什么因子,这样,我们就潜移默化的将问题化简,是相当重要的思路。

第二单元:线程安全设计

在这一单元,我开始深入理解并发编程和线程安全的挑战。通过学习线程安全设计,我的架构设计思维从关注单线程的正常运行扩展到考虑多线程环境下的同步和互斥问题。电梯系统是遇到bug最多的一节,且有些bug难以复现,因为这涉及到不同cpu下运行结果可能不同,因此要排查自己代码的同步性,以及是否轮询导致的CTLE。

第三单元:规格化设计

规格化设计的应用使得系统更加清晰和易于维护。我的设计思维从关注系统的整体结构扩展到关注模块间的接口和交互细节,通过契约确保系统的可靠性和可扩展性。

第四单元:模型化设计

模型化设计使我能够从全局视角分析和描述系统,增强了对系统复杂性的管理能力。我的设计思维从注重具体实现细节扩展到关注系统的抽象描述和模型化设计,通过模型确保系统的一致性和可理解性。

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

第一单元

第一单元我也是设计了一个评测机,认为充分大的随机可以保证完全的正确,现在看来是不太对的,因为极端数据依然会出问题,另外多线程问题也不是随机就可以保证正确的,好在这样的思路在第一单元可以奏效。

第二单元

第二单元第一次作业的hack给我狠狠上了一课,在49.9s同时输入限制内的最多命令,压力测试,然后我的电梯就因为bug直接无限运行,然后发现随机并不可取,还是要自己手动构造一些极端数据。

第三单元

第三单元注意的是要完全满足规格,规格写的要完全按照规格来,没写的绝对不能乱加。

第四单元

第四单元只要是UML图的画法需要多加注意,包括name,type等是否一一对应。UML状态迁移条件也要和源码对应

课程收获

总之,本学期的OO是我本人上大学以来上的最好的课,没有之一,从课程设计,到评测,互测都对我很有帮助,本来以为没学OOpre会让我举步维艰,但现在回过头去看发现其实这门课程考的不是java而是架构设计和整体思维,通过这些学习,我真正的明白了工程化开发需要的是什么,当然我距离真正的工程化开发仍有不少的距离,但我依旧收益良多。

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值