BUAA-OO-第四单元总结及课程总结

樊金鹏-21374235 2024-06-12 16:18:42

OO_Unit4_Blog


oo终于结束咯~

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

首先,何为正向建模呢?
正向建模,是指根据已知的因素来预测结果的过程 ,其主要步骤包括:
1.确定建模目标:首先要明确你的建模目标是什么,需要预测的是什么变量,以及这个预测如何帮助解决问题。
2.数据收集与清洗:收集与建模目标相关的数据,并进行数据清洗工作,包括处理缺失值、异常值和重复值等。
3.特征选择与工程:选择合适的特征,可以使用数据可视化和统计测试等方法进行特征选择,同时进行特征工程以提取更有信息量的特征。
4.建立模型:选择适当的建模算法,如线性回归、决策树、随机森林等,并根据数据特点和问题需求进行模型训练。
5.模型评估:使用交叉验证等方法评估模型的性能,检查模型是否过拟合或欠拟合,并对模型进行调优。
6.模型部署:在模型经过评估和调优后,可以将其部署到生产环境中,用于实际预测和决策。
7.监控和维护:持续监控模型的性能,并根据新数据进行重新训练或调整模型,以确保模型的准确性和可靠性。
在本次作业中,实践正向建模如下:
1.确定建模目标,本单元要求我们完成一个由不同场景组成的可和用户交互完成预测并给出结果的图书馆模型。
2.数据清洗与收集,观察用户样例数据输入输出,理解具体用户对象和图书馆各部门行为。
3.特征选择与工程,由数据结果总结模型各部分对象特征行为,通过数据规范化各个模型动作。
4.建立模型,以特征工程为基础,实现模型,可采用自上而下的分发模式或自下而上合成模式,初步实现。
5.6.7. 测试,改bug。


本单元架构设计

相比于前三次作业有着实验代码的提醒,本次作业真正要求我们从零开始架构。好在本次作业需求并不复杂,架构起来相对简单,主要架构如下:

  • 对象设计
    如UML类图所示:

    img

    • Library(图书馆)
      采用单例化模式,作为模拟交互各个流程发生的主类。主要属性为下面的交互对象,主要方法为模拟交互对象的交互动作的方法。
    • AppointmentOffice(预约处)
      作为Library的属性存在,交互对象之一,主要负责预约,续借和取书流程。主要属性有借阅登记册(orderlist),预留书籍册(reservedbooks)。
    • BorrowingOffice(借阅处)
      Library属性,交互对象之一,主要负责借阅流程和还书流程。主要属性有在架书籍(booksHolds),以及与其对应的加减查书籍操作方法。
    • BookShelf(书架) :
      Library属性,交互对象之一,主要负责借阅流程,还书流程,以及和其他作为图书馆部分存在的属性发生交互的类。属性方法同借阅处。
    • DriftCorner(漂流角)
      Library属性,第二次作业加入,交互对象之一,担任交互角色类似于书架。
  • 行为设计:

    命令识别分支 :

img

-
交互动作分支

img


四次作业下架构设计演进

第一次作业:---> 小白打开了新世界大门 <---

对一个没学过OOpre的小白,即使在经过了四个单元的毒打以后,让我最头痛的回忆还是第一次作业,这次作业主要在于理解类与类,对象与对象之间的关系,架构方面学会了自下而上的设计。

第二次作业: --->神奇的多线程<---

第二次作业学习到了多线程的工作方式,线程的生成,结束以及不同的线程之间如何完成交互,最主要是理解了如何架构能实现线程之间的基于信号量的同步互斥。

第三次作业--->纯翻译是不行的<---

第三次作业主要是基于课程组已经给好的JML进行翻译,按理来说不涉及架构问题,但性能的要求迫使我们不得不从算法入手,从图论出发好好对自己的实现方式进行设计。

第四次作业--->代码的蓝图<---

第四次作业以后,虽然还是不能在一开始就完全相好的自己的架构设计并为其画出各种类图,顺序图,状态图,但起码明白了:相比于直接写代码,在代码之前为自己画个图是十分有帮助的,就像建房子需要蓝图一样,我们写代码也需要提前设计一份“蓝图”的图来保证自己的架构方向始终为正。

四次作业下测试演进

  • 第一,三,四单元其实没有什么太大的区别,都是根据错误的信息,拿着错误的样例去慢慢调试自己的程序就好。
  • 想特别说一下的是第二单元多线程的debug,是真的难,其主要在于线程顺序原因导致bug难以复现,无法进行单步调试,种种原因导致你明知道有Bug但你就是很难找到的局面出现,只能对着出了一次错的信息使用瞪眼冥想大法。
  • 因为有着同年级大佬写的评测机(它真的很香),让任务量颇大的oo课程不用顾虑太多,但也知道会让自己在构造测试用例方面没有太多的经验,倒是在根据评测结果下找bug有了些许经验?(。

课程收获

oo真是一门好课。

时间方面
oo毫无疑问是这学期占了我最多学习时长的一门课程,单元第一次作业不能不做,单元第二次作业稍微做做,单元第三次作业舍不得不做,时间长到哪怕在做学校的学习时长调研问卷的时候我都可以理直气壮的选择“一周48小时以上”。
难度方面 :
恰到好处吧,你说它简单吧,每周都要被“折磨”那么三两天(中测,强测,互测),哪有人会说它简单?你说它难吧,偏偏像我这样从0开始的java小白选手也是能全程陪跑下来,真是被课程组各位拿捏的死死的了,我上早八(bushi)。
收获方面 :
收获颇丰呐,完成了四个单元16次作业以后,课程组特意组织了一次不计分(阿里嘎多)知识点测试,发现即使自己在没复习的情况下那些选择填空也能写个七七八八,我想以后面对浩大的且难到让我无从下手的java项目,我总不会失了尝试的勇气。

img

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

301

社区成员

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

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