BUAAOOUnitFour总结分析与课程总结

一、本单元架构设计

  1. 第一次作业
    第一次作业任务是完成UML简单类图的解析,创建MyClass类,用于管理类相关数据,包括类的属性、类的方法、类实现的结构等所需要的数据。创建MyOperation类,用于管理方法相关数据,包括方法所包含的参数。创建MyInterface类,用于管理接口相关数据,包括接口的继承等数据。交互模式如下:
    BUAAOOUnitFour总结分析与课程总结_第1张图片

  2. 第二次作业
    第二次作业在第一次作业的基础上新增了对UML顺序图和状态图的简单解析。本人采用了层次化的架构设计思想,根据starUML文件结构,逐层建立类封装数据。采用这种架构虽然有些类在本次作业中不一定用的到,但是如果有新的需求到来,整个架构是不需要发生大的改变的。

    另外,关于UmlState类型的对象,本人新建了一个MyState类,其有三个子类MyNormalStateMyFinalStateMyIntialState用来统一管理类,这样做的好处是在查询一个状态的后继状态数时,不需要判断后继状态是否是初始状态抑或是终止状态,比较符合面向对象的思想。

    BUAAOOUnitFour总结分析与课程总结_第2张图片

  3. 第三次作业
    第三次作业架构基本与第二次相同,不同的是为了满足新增规则判断的需求,新建了一个MyCheckClass类,用于对每个规则的判断,并且将不符合规则的对象放入相应的容器当中,最后根据对应容器进行Check操作。

    BUAAOOUnitFour总结分析与课程总结_第3张图片

 

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

  1. 第一单元架构设计
    用具有求导功能的Func接口对因子(常数因子、三角函数因子、幂因子、三角嵌套因子、表达式因子)进行统一管理,根据行为抽象层次进行层次化设计。相应的引入工厂模式,统一管理因子对象的创建。这也使得不能再用一个通项去表示一个项了。采用归一化思想,用接口统一管理因子,通过遍历因子求导,不同的因子会自动调用不同的求导法则,调用toString方法返回求导结果,来实现链式求导。

    BUAAOOUnitFour总结分析与课程总结_第4张图片

  2. 第二单元架构设计
    总的来说是消费者与生产者模式,将乘客Person发出的请求送入ElevatorControler中管理,然后通过ElevatorControler类根据当前的请求状态和各类电梯Elevator类的运行状态按照一定的算法送各个电梯自己的请求队列中,然后各个电梯根据自身的请求队列采用相应的电梯调度算法进行调度。 对电梯进行统一建模:ElevatorTemplate有三个子类,分别对应A、B、C三种类型的电梯。对乘客统一建模:Person类有两个子类,分别对应直达乘客和换成乘客。统一的部分用父类统一管理,不统一的部分按照相对应的方式处理。

    BUAAOOUnitFour总结分析与课程总结_第5张图片

  3. 第三单元架构设计
    借助OS中Cache的思想,对人际关系中需要查询的数据进行缓存,必要时及时更新。 建立关系图,将相关的操作转化为图的基本操作,并选取时间复杂度较低的算法。

    BUAAOOUnitFour总结分析与课程总结_第6张图片

  4. 第四单元架构设计
    见第一部分,不再赘述。

 

三、对四个单元中测试理解与实践的演进

  1. 第一单元
    首先,我们不可能穷举所有的表达式,故可以考虑自动生成大批量数据进行测试。但是由于对WF的判断,故生成的数据需要符合一定的格式。由于讨论区的大佬推荐了python的科学计算包,能够对表达式进行相应的赋值、求导操作,所以第一单元的测试主要采用了自动化对拍测试的方法。但是自动生成并不是十全十美的,一来对有复杂的括号的表达式并不能很好的解析,二来当表达式的格式不是很规整时,时常出现一些奇奇怪怪的错误。另外一些极端数据下的验证,还是手搓比较好。

  2. 第二单元
    第二单元主要涉及了多线程编程,而多线程编程中,最容易出现的错误便是线程安全的错误,所以本单元呃测试主要是手动构造冲突,是否会造成线程安全相关错误。比如,两个线程可能互相等待彼此释放资源,导致死锁。

  3. 第三单元
    第三单元主要是对JML的理解,切忌面向JML编程,本单元测试主要采用JUNIT的进行测试,但是发现这样测试只适合数据量较小的情况,进行正确性的测试。也正是因为这样,导致本人在极端数据面前CTLE。所以最好应该自动生成大批量数据进行测试,并且不能忽视极端可能造成CTLE的数据。

  4. 第四单元
    第四单元测试主要是在理解starUml文件的基础上,自己在starUml中画图然后进行测试。由于本单元理解相对较好,几乎没有出现bug。

 

四、课程收获

  1. coding能力的提高:正则表达式、面向对象的编程方法来提高程序鲁棒性、各种算法、WF判断,这一学期下来,感觉对自己的编程能力有了很大的提高。

  2. 开始乐于分享:起初研讨课都在听大佬分享,自己感觉还是太菜了。感觉看讨论区里面大佬的分享,自己默默学习也挺好的。学期后半段,自己慢慢也开始在讨论区尝试发帖,也开始积极报名研讨课。的确,好的Idea就应该分享出来,并且闭门造车终究不可行,要重视技术交流。

  3. 自学能力的提高:自学能力的提高是我最大的收获,面对新的需求,需要自己查阅大量的资料,然后才可能完成。所以课上老师只给你点拨一下,剩下的工作都得靠你自己去完成,虽然过程磕磕绊绊,但是完成任务那一刻还是很有成就感。

 

五、三个具体改进建议

  1. 第一单元的难度感觉过大。自我感觉在完成第一单元第三次作业时,WF判断实在有些难度,险些造成一次无效作业。是否可以考虑降低本单元的难度。

  2. JML单元体验不是很好。面对规格,很容易单纯照着规格写,而忽视了理解层面。导致这单元大部分在面向规格,却没有太多面向对象的思想。

  3. 希望多增加一些测试相关的知识。

 

六、线上OO课程体会

  1. 不管线上线下,熬几次夜肯定少不了,尤其是前两个单元。

  2. 感觉线上腾讯会议分享的方式比线下在课堂上讲ppt更专注。

  3. 课后问卷老是容易忘记。

  4. 老师、助教都特别有意思。
  5. OO不得不说是一门体验很好专业课。

 

 

 

 

 

 

 

 

 



 



 

 

你可能感兴趣的:(BUAAOOUnitFour总结分析与课程总结)