oo第四单元总结

膝盖受损 膝盖受损     2022-12-01     562

关键词:

OO第四单元总结

作业的架构设计

第一次作业

第一次作业其实反而是三次作业中最难的一次,因为刚发下来的官方包中文件实在是太多了,不知道从哪里下手,而且因为第一次接触UML图,很多概念还不理解,第一次作业的大量时间用在理解作业到底要我干什么上了。理解了之后就比较好实现了。

为了更好地实现各种查询操作,我对于Class,Interface,Operation重新写了对应的类,从而使得查询更加方便。

查询操作中比较麻烦的是需要考虑继承和实现关系的查询,因此我采用了bfs的方法来遍历查询。

image

第二次作业

第二次作业难度就简单多了,大部分的查询在读入遍历的时候就可以完成。唯一一个比较难的,是要考虑间接转移的查询,同样的使用bfs搜就可以实现了。

这次的作业在第一次作业的基础上迭代开发,针对Lifeline,State等建立了对应的类,使得能够更方便地查询。

image

第三次作业

这次作业主要是为了实现正确性检查,除了R002-R004这三个需要用上图论的算法,其它的检查,在遍历的时候进行保存和记录基本上就可以完成操作。而针对R002-R004又同样的可以使用bfs来实现,因为时间几乎没有限制,因此采用最直接的循环暴力搜即可完成。

这次作业的架构和上次几乎一样,除了增加一个专门用于检查的类来防止爆500行之外,以及在少量类内部加了容器和缓冲值来记录检查结果。

image

四个单元中架构设计及OO方法理解的演进

第一单元

第一单元真的很痛苦,除了第一次作业比较简单之外,后面的两次作业真的是让人又焦虑又难受。刚开始上来,我并没有什么java编程的经理,只是写了寒假的预习任务,对java仅仅只是语法了解,但是对于面向对象的编程思维的了解几乎是零。因此在第一次作业中,我还是按照面向过程的方法写了,这导致我在第二次作业全部重构。第二次作业我是开始真正了解什么是面向对象,逐渐理解如何面向对象编程,虽然写出来的架构非常丑陋,但是总算是开始面向对象了。

最后参照指导书完成了表达式,到项,再到因子的分解。

img

第二单元

第二单元是多线程,架构主要都是采用了生产者-消费者模式来完成。难点主要是如何避免死锁。在这里我已经感觉自己比较熟悉面向对象的编程方法了,在写代码的时候很自然的就分成了几个类,也实现了高内聚,低耦合,是我比较满意的一个单元。

2-UML

2-UML

第三单元

第三单元是天使,真的很简单,感受到了编程的快乐。第三单元官方已经给出了架构,照着填代码就好了。难点主要是在于考察了一些图论的算法吧,然后自己数据结构图论学的也是不咋样,在这一单元中加深了学习,感觉自己又可以了。

第四单元

老实说,这一单元并没有老师助教说的那么简单,我觉得还挺痛苦的。架构在上面已经分析过了就不再赘述了。然后这也是最后一单元了,这一单元作业,在写代码之前,我会思考怎么设计架构可以更好地迭代开发,类和类之间的关系也更清楚了,比起第一单元确实已经上了不止一个层次,不仅掌握了初级的面向对象编程,还有向更深方向发展的趋势。

总结自己在四个单元中测试理解与实践的演进

第一单元

第一单元测试主要是随机测试测测有没有明显的bug,以及自己手动构造边缘数据来测试。

第二单元

第二单元的多线程,很痛苦,输出又长又多,看起来很痛苦,测试起来也很痛苦。依然采用自动生成数据和手动构造数据。

第三单元

第三单元虽然官方推荐使用Junit,但是我发现它不咋好用,于是我还是采用了原始的方法来进行测试,加上这一单元其实比较简单,因此我没有采用自动生成数据。

第四单元

这一单元撞上烤漆了,我基本上就没有怎么测试,很惭愧,在测试了边缘数据没有错之后我就没怎么管了。

总而言之,我四个单元学会的测试方法就是:单独函数单独方法测试,边缘测试,和综合性测试。比较遗憾的就是,我一直没有自己写一个评测机。

课程收获

课程收获一:这个课真的好难啊,好痛苦啊。

首先,这个课让我熟练掌握了一门语言,并且我确定我已经我掌握了面向对象的编程方法,这个收获作为OO这门课的收获,就已经是达成了最基本的要求吧。

其次,我意识到了架构的重要性,高内聚,低耦合的思想已经刻入DNA了,现在编程之前都会思考自己的架构能不能经得起多次的迭代开发。

然后就是每个单元学到的一些相关知识,比如多线程编程,JML语言,UML模型之类的,扩大了我的知识面。

改进建议

  • 关于四个单元作业的建议

首先,关于第一单元,我认为第一次作业和第二次作业的难度相差太多了,第二次作业直接懵了,根本不知道怎么写,这非常不合适,那一周我特别焦虑,感到周围的同学也都很焦虑。

其次,建议第三单元和第四单元的顺序调换一下,因为第四单元撞上烤漆了,而第四单元也并没有大家说的那么简单,还是有一定难度的。

然后关于指导书,我相信其实每年的OO指导书都是大致相似的吧,那么有很多模糊的定义和说法完全能够改正,而不是等指导书出了之后大家在讨论区问来问去,这样效率又低,我们也不能时刻关心讨论区问了什么问题。

  • 关于实验

实验缺少反馈的渠道和机制,每次上机交上去就完了,自己不知道结果也不知道成绩,感觉上机就有点没什么用处了。

最后还是很感谢课程组一年来的努力,感谢每一位助教的付出和努力。最后,恭喜OO完结撒花。

oo第四单元总结

OO第四单元总结作业的架构设计第一次作业第一次作业其实反而是三次作业中最难的一次,因为刚发下来的官方包中文件实在是太多了,不知道从哪里下手,而且因为第一次接触UML图,很多概念还不理解,第一次作业的大量时间... 查看详情

buaa_oo第四单元总结——uml

BUAA_OO第四单元总结——UML被OO爱~~(折磨)~~了一个学期,终于要结束了,真的有些感慨。回顾这些博客和代码,也真的难以想象自己竟然写了这么多,虽然过程很折磨,但是最后还是坚持了下了,虽然在一次次的作业中我出现... 查看详情

oo第四单元暨课程总结

本单元总结这一个单元主要建立一个UML的解析器,其中需要在理解UML元素对象的基础上完成一系列的操作代码。个人认为这个单元的重点在于——理解UML元素和各个元素之间的父子关系建立一种元素之间的索引关系建立元素与元... 查看详情

oo第四单元uml&课程总结(代码片段)

oo第四单元UML&课程总结一、总结本单元作业的架构设计​ 本单元的作业是写一个UML图的解析器,而具体的将UML图解析成一个个的UmlElement元素的过程已经在官方包中给出,我们需要做的就是对UmlElement中的元素进行组织与数据... 查看详情

oo总结

OO总结第四单元分析问题分析:本单元要求完成一个简易版的UML解析器,其中包括对UML类图、UML状态图、UML时序图的解析,这三者中难点在于类图的解析,需要全面地存储类和接口的相关信息,编写程序时会更进一步发现涉及到... 查看详情

oo总结

第四单元总结homework13架构如下:复杂度分析如下:架构设计及OO方法理解演进从最开始的面向过程到进入第一单元开始注意对象实体之间的关系,以及为实体的属性设置方法等开始培养面向对象的思维,了解面向对象所包含的一... 查看详情

oo_unit4总结&课程总结(代码片段)

OO第四单元UML单元总结及课程总结OO_Unit4总结&课程总结本单元的作业是UML图的解析,作业的目的一是进一步强化架构设计能力,学会如何一步步将一个复杂的图结构进行多层解析。二是学习UML这一种强大的形式化语言,熟练掌... 查看详情

oo第二单元总结

欢送电梯月~~~欢送电梯月~~~ 查看详情

oo第二单元总结

OO第二单元总结一、作业架构设计与分析1、homework51.1UML类图1.2UML协作图1.3架构设计请求处理方式在此次作业中我采用了生产者消费者模式,InputThread线程获取输入请求,再通过NewMainBuilding线程分发给各个楼座(SubBuil 查看详情

buaa_oo_第四单元(代码片段)

一、UML解析器设计? 先看下题目:第四单元实现一个基于JDK8带有效性检查的UML(UnifiedModelingLanguage)类图,顺序图,状态图分析器MyUmlInteraction,实际上我们要建立一个有向图模型,UML中的对象(元素)可能与同级元素连接,也可与... 查看详情

oo第三单元总结

OO第三单元总结JML梳理JML语言理论身为规格描述语言,JML有着严格的语法规范。注释行注释://@annotation,块注释:/*@annotation@*/方法规格前置条件(pre-condition):require后置条件(post-condition):ensure副作用范围限定(side-effects):assignable... 查看详情

oo第三单元总结

OO第三单元总结规格的阅读与实现心得JML的阅读方法语法上,可以参考课程组的《JMLlevel0手册》,涵盖了基本的jml关键词和语法,看不明白的话可以多翻翻,类比着就搞懂了阅读顺序上,阅读JML可以从一些比较底层的类开始读,... 查看详情

oo第三单元总结

OO第三单元总结利用JML规格准备测试数据前置条件构造不满足前置条件的数据测试异常处理构造满足前置条件的数据测试正确性后置条件和约束条件用于判断输出结果的正确性利用JML规格的前置条件构造数据便于对所有可能的情... 查看详情

oo第三单元总结(代码片段)

OO第三单元总结前言?本单元中,初次接触到了TheJavaModelingLanguage(JML)这种语言,主要尝试了根据规格进行相应代码实现,及根据代码或需求抽象出相应规格的练习。从PathContainer,Graph到RailwaySystem,一路发展过来,在实现这些接口... 查看详情

oo第三单元总结

oo第三单元总结一.梳理JML语言的理论基础、应用工具链情况(1)JML理论基础JML(JavaModelingLanguage)是用于对Java程序进行规格化设计的一种表示语言。JML是一种行为接口规格语言,基于Larch方法构建。一般而言,JML有两种主要的用法:... 查看详情

oo第三单元总结(代码片段)

OO第三单元总结梳理JML语言的理论基础、应用工具链情况JML(JavaModelingLanguage)是一种行为规范接口语言,通过使用不会被编译的注释形式,和固定关键字的语法,指定Java模块代码的行为。大体上包括以下三种要求:前置:@requir... 查看详情

oo第三单元总结

一、梳理JML语言的理论基础、应用工具链情况  JML以javadoc注释的方式来表示规格,每行以@起头。其中行注释为“//@annotation”,块注释为“/*@annotation...@*/”。  常用表达式有以下几种:  \\publicnormal_behavior:... 查看详情

oo第三单元总结(规格设计)

OO第三单元总结 一、关于JML  JavaModelingLanguage,即JML是一种规格化表示语言,主要用于对Java程序的各种方法功能的规范描述。这样做既可以给程序设计人员明确清晰的功能要求,又可以充分全面地验证已有的代码实现保证其... 查看详情