OO第四单元博客

OO第四单元博客

正向建模与开发

正向建模

正向建模是一种在科学和工程中常用的方法,它通过建立数学或计算模型来预测系统或现象的行为,是一种用于描述和分析系统或过程的建模方法。它基于系统的目标和行为,以及各个组成部分之间的相互作用关系,从而生成系统的模型。在正向建模中,建模过程从系统的高层目标出发,逐步细化到具体的组成部分和其行为。这种方法着重于描述系统的结构和功能,以及各个组件之间的交互关系。正向建模通常用于系统设计、工程分析和软件开发等领域。

正向建模与开发的步骤

  1. 需求分析:收集和分析用户需求,明确系统需要实现的功能和性能指标。然后形成需求文档,作为开发工作的基础。

  2. 系统设计:进行高层次的系统架构设计,包括模块划分、数据流和控制流设计,再详细设计每个模块的内部结构和接口。

  3. 建模:使用建模工具(如UML)对系统进行建模,创建用例图、类图、序列图等。确定模型的各个部分如何交互,以实现系统的整体功能。

  4. 实现:根据设计文档和模型,编写代码实现系统的各个模块。确保代码实现与设计模型一致。

  5. 测试:进行单元测试、集成测试和系统测试,验证系统的各个部分是否按预期工作。使用模型验证工具,对设计模型进行验证,确保其正确性和一致性。

本单元实践

在本单元的作业中,与平时最大的区别是将以往在纸上写的画的大体框架结构,用规整化的uml语言先进行一次实现。在这一步进行完后,再开始逐步的写代码,而在写的过程中,会有一些地方发现原来的架构不是那么的合理,在此基础上修改uml模型,重复这一过程,多次迭代,得到最终的结果。

本单元架构设计

本单元的题目较为简单,总体架构如下所示

输入逻辑在mainclass中处理,而Library作为整个实现的功能类,向mainclass提方法接口,实现要求的功能,而对于Library类来说,其功能实现需要还需要一些额外的内容来辅助,将这些内容进行包装为User类与Appointment类。而题目中的书所出现的不同地方,可以使用不同的容器来表示,这样可以更方便的统筹管理各部分书籍。但是在写到偏后面的内容时,发现有一些容器的方法内容是较为类似的,如漂流处与书架,但是由于相似地方的复杂度并不是那么的高,因此并没有选择重构。从长远来看,将容器分离出去作为单独的类会具有更高的可拓展性。

架构设计与测试思维的演进

第一单元

第一单元的表达式化简,当时并没有自己明确的架构设计,更多的是向别人学习。从实验作业与oo推送中,学习Parser与Lexer的递归下降写法。在表达式化简的过程中,也是向学长学习了用基本项来统一各个项的形式,而后面的自定义函数替换与求导,则是在理解了层次化的要求上自己进行架构的设计。

而测试方面,则是自己捏造了一些边界的数据点,用来检测自己和别人的bug,幸运的是,通过这些点,找到了互测中同伴的bug。

第二单元

第二单元是电梯的多线程设计。这一单元中,最重要的线程之间协作逻辑。关于线程的协作,最初写的是生产者与消费者,流水线模式,然而后面的内容发生改动,后面的线程会给前面的线程传递信息,因此需要避免死锁这一问题,而这一方面则需要将有信息交互的两个线程之间的消息全部列出来,检查是否会发生死锁。

这一单元的内容是最需要进行测试的,因为多线程的部分内容问题是概率发生的,需要进行大量的数据测试,才能检测出问题,第二次作业中,就因为测试不充分导致错误了一些内容。

第三单元

第三单元是JML单元,这个单元的设计较少,主要是根据JML写代码,通过JML这一单元的训练,我感受到了一个好的规格设计是多么的重要,在好的规格设计之下,很多代码写的得心应手。也是认识到了JML的作用与魅力所在。

测试方面,这个单元要根据JML来测试方法是否正确实现,在这一过程中,自己经历了数据生成,数据投喂,正确性检验这几个步骤,相当于自己搭了一个小的测评机。而且还生成了不同类型的数据,以覆盖更广的测试。

第四单元

第四单元是UML单元,主要考察的是建模设计,代码量这一方面的内容也并不是很多。在这一单元中,每次写之前,都会将问题与需求看完,然后进行初步的uml建模,想好自己的整体框架要怎么写。这样的流程虽然前期构思结构时会有些复杂,但是总体来看,这样做的收获还是很多。

这单元的会错误的点,主要在于各种日期边界上,如逾期的计算,续借的时间范围等等,因此我针对这一些方面捏造了一些特定的数据来检验是否正确。

课程收获

oo的代码量是我目前而言接触到的需要自己实现的最大的,极大的锻炼了我们的编程能力,对于项目的掌控能里,短时间内生成代码的能力。更是在整个课程中,逐步体会到了面向对象的编程方式,也学习到了多线程之间的协作互动,更是对于代码的规格规范与模型搭建有了更深的体悟,除此之外,也算是稍稍掌握了java这一门语言。在整个的课程中,还掌握了一些迭代开发的技巧,更是学会了如何重构。

致谢

仍然还记得oo第一次作业时那种茫然无措的感觉:虽然当初上了oopre,但是中间过了一个假期,大部分都忘记了,靠着仅存的一点内容,却要面对递归下降,这一复杂的内容。但是好在有同学,有老师,有助教,有推送,有学长博客……有着大家的帮助,让我能顺利过渡到oo正课的内容。在后面的内容中,也受到了大家的很多的帮助,使用了同学们的搭建的测评机。非常感谢大家在oo课中给予我的帮助.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值