OO第四单元总结

第四单元架构设计

第一次作业

uml类图

  • 这次作业我采取的基本思路就是根据指令来建造一个简易的类图,用于查询,其中umlclass中包含了umlAttraibute,umlOperation等.整个架构分为四层,首先是main函数,然后是交互类intreation,交互类每获得一个元素,就将其送入ananlyze进行分析,analyze通过分析来将其添加到适合的位置以建造类图.最终当所有的元素都被分析完了,我们就得到了一个简易的类图,接下来交互类中的各种查询就非常简单了,仅仅就是查询类图的相关信息即可,而不是面对极其抽象的语言.但是使用此架构一定要注意分析元素的顺序,再分析元素之前要保证顺序合适以避免类的属性在类被建好之前就被分析,从而添加不到合适的位置.

第二次作业

uml类图

(由于这次作业的类非常多,所以uml类图只截取了部分,总代码约2200行.....)

  • 这次的架构相对于上次来说基本上没有太大的变化,还是分为交互层,分析层,和基础层,交互层获取元素并送入分析层进行分析,分析层分析元素并使用基础层的类构建类图,最终由交互层对建好的类图进行进行查询操作,对比于上次,仅仅是在基础层增加了一些新的元素,在分析层增加了分析类,在交互层设置了顶层交互和三个不同类型的(类图,状态图,顺序图)的交互类.第二次沿用了第一次的代码,对原来的代码几乎没有改动,也没改变架构,仅仅是增加了一些种类.

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

第一单元

  • 第一单元基本上谈不上什么架构设计,甚至是连基本的面向对象的思想还不是很适应,还是用的老一套的面向过程式的写程序,几乎所有的代码都集中在一个类中,就是main类,导致这个类非常臃肿,基本就是为了完成任务而应付着写的,也谈不上会考虑迭代方面的问题,第一次的作业代码,基本上第二次就用不上,所以几乎是次次重构,类的数目虽然每次作业也有所提升但基本是为了应付,是为了分类而分类,多个类在当时使用时也非常的别扭,还是在想为什么不把所有东西放入一个类中,这样写着也方便.

第二单元

  • 第二单元是多线程,这一单元的最大收获也是多线程,并发的理解,一千从未接触过,甚至是根本无法想象多线程并发的程序是怎么写的,经过这个单元,从最初的只会一条道路看问题到学会用并发的角度来看待问题.当然,除此之外,就是对面向对象的概念总算有了初步的适应,已经开始习惯着用面向对象的方式来思考问题,写代码了.至于说架构方面,就是开始以类为单位来思考架构了,以及以多线程资源共享的架构来思考问题,还知道了设计模式的概念,整个单元运用了单例模式,观察者模式,还有生产者-消费者模型等等.

第三单元

  • 第三单元是JML,通过这一单元知道了规格化的方法,也初步体会到了规格的威力,自然语言的二义性真的是一个硬伤,我个人也有很多关于理解错题意而导致出错的不好的回忆.使用规格化语言就可以避免自然语言的二义性问题,这无疑是极好的,有了规格,无论是写代码也好,测试也好都会变得非常的方便.但是硬伤是规格写起来真的是非常麻烦,简单的方法,本身实现就很简单再去专门去写规格就会显得非常的不值,而复杂的方法写起规格就会极其复杂,首先要确保你的规格是绝对正确的,这一点就已经非常困难了,其次,写出来的规格又极其抽象复杂,读起来非常不友好.所以这样下来,规格化语言的地位就会显得非常尴尬了.至于这一单元的架构设计,我首先要吐槽一句了,说好的最难的都在前两单元,最后两单元非常简单呢?,尤其是第三单元的第三次作业,我个人认为可谓是整个OO的难度巅峰了,在这次作业里,你要有扎实的数据结构知识,你需要有一个性能良好的算法来保证你的程序不会超时,而由于这次代码量也很大,所以还要有一个清晰的架构.当然,与之相对的,对算法,架构,基础知识等都是一个很大的考验,做完之后提升也不小,对OO又有了更深一层的理解.

第四单元

  • 第四单元是UML,UML比起JML就显得非常直观,通俗易懂了.在真正下手之前,有一个UML图还是非常不错的,对自己来说,先构造一个清晰易懂的图形会使得接下来写代码的过程中不会迷茫和混乱.我以为这一单元会是让大家真正动手画UML图,还在考虑该怎么评判,结果作业竟然是一个UML分析器.当然,这次的收获也非常多,主要是学会了对代码进行层次化封装,我这次作业就将其分为了交互层,分析层,和基础层三层,然后接下来的代码之路就异常清晰和简易,所以可以看到一个良好的架构对编程效率是多么的重要

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

第一单元

  • 第一单元的测试方法非常简单,就是人肉测试,自己会想一些边界数据,或者特殊值等,以及自己在写代码的过程中写出的bug所对应的测试数据,然后是一些随便编的数据.

第二单元

  • 第二单元是多线程,多线程测试起来非常复杂,主要是因为很多的bug都不能复现,而直接使用idea的单步运行在多线程里就几乎无用了,最原始的测试方法就是printf这样其实测试起来效果还不错,但是和其他同学交流后知道直接输出的话是有一些问题在里面的,之后在课上又听说了断言测试,以及可以使用log的方式进行测试.

第三单元

  • 第三单元是JML,既然是JML当然是使用JML独有的自动化测试咯,但是,老实说,测试用的那几个软件安装起来非常复杂和繁琐,废了很大功夫安装好后发现所谓的自动化测试的效果却非常不仅人意,测试的事件消耗非常长,却仅仅是测试了它所谓的边界数据(其实一点也不边界),导致真正的bug并没有被测出来,所以对我个人来讲就全当摆设了.这一单元的最大收获还是Junit,Junit的体验就非常好了,测试起来非常舒服和方便,简直是为我的测试手段打开了一个新世界一般.

第四单元

  • 老实说,这一单元在测试手段上并没有什么突飞猛进,而由于源文件是个图,我也没办法进行自动化测试,不过倒是对以前掌握的一些测试方法进行了巩固.

课程收获

  • 通过这门课,我从一个只会写C代码,毫无架构,随心命名,面向过程的小白初步成长了很多,对代码规范,代码架构,代码测试等都有了非常大的提高.尤其是掌握了面向对象的思维方式,使得我现在的思考问题角度有了很大的扩展,在以前写一个一二百行的代码都痛苦无比,整个代码一团乱麻,抽象难懂.现在最后竟然写了一个两千多行的代码还能保有一个清晰的架构.感觉我也没有经历过什么算法上的提升,也没有经过真正意义上的代码的大量训练,而能够提上如此之多,关键是思想上和以前完全不一样了.

建议

  • JML这一单元的体验真的非常不好,非但没有让人想去使用它,反而对其更加反感
  • 一个小bug可能导致强测全面崩塌,导致最终付出和汇报的比例严重失衡,所以建议强测也可以修复
  • 说好的后两个单元简单,结果第三单元第三次作业难度直接在所有作业上提升了一个量级,第四单元则直接让我写出了2200行的历史新高.

OO第四单元的更多相关文章

  1. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  2. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  3. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

  4. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  5. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

  6. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

  7. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

  8. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  9. 2020 OO 第四单元总结 UML

    title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...

  10. OO第四单元总结与课程总结

    OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...

随机推荐

  1. Pytest系列(15)- 多重校验插件之pytest-assume的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest中可以用pyth ...

  2. 看清Mysql执行计划的真面目

    ​  Explain语法 EXPLAIN SELECT -- 变体: 1. EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHO ...

  3. ssh跳转设置

    SSH工具的非常规使用 原创 景朝阳 FreeSWITCH中文社区 今天   说明:本文所有的命令是基于OpenSSH客户端7.4p1版本.如果出现命令不正确,请检测是否为此OpenSSH版本. 设置 ...

  4. CDI 组件拦截器的使用和学习

    拦截器的作用原理: 声明拦截器,加@Interceptor注解 方法有二: 1)为拦截器添加Qualifier: 2)不添加Qualifier.为拦截器添加具体的拦截方法,该方法加@AroundInv ...

  5. mysql更新数据时:当想mysql某插入有某字段设置了unique且和之前相同时,会报错,并停止运行

    这个在mysql5.7会报错: 如openid设为unique: 1062 - Duplicate entry 'oTfYq6PKne00IrcTqphmKqKnsahM' for key 'qx_w ...

  6. Java面向对象系列(7)- 什么是继承

    继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模 extands的意思是"扩展".子类是父类的扩展 JAVA中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...

  7. Java基础系列(7)- 标识符和关键字

    关键字 标识符 Java所有的组成部分都需要名字.类名.变量名.方法名都称为标识符 首字母以字母(A-Z或者a-z),美元符号($),或者下划线(_)开头 首字母之后可以用字母.美元符号.下划线.数字 ...

  8. Groovy系列(1)- Groovy简述

    Groovy简述 前言 由于性能测试的JSR223 Sampler取样器需要用到 Groovy 语言,这两天对其进行了粗略的学习,本文是对学习做的一个简单总结,主要内容参考于官方文档(Groovy 的 ...

  9. python二级 第七套

    第一部分 基本操作 第一题 1.format()  故名思意  就是格式化什么东西.所以你就是将你 需要格式化的东西 放在里面就行了  .   format(s)  对s 有要求 就是 int(s) ...

  10. 华为云计算IE面试笔记-eBackup有哪几种备份组网方式,各备份组网方式主要的应用场景及备份流程?

    应用场景: LAN-Base一般用于备份数据量小,且对备份窗口没有特殊要求的场景,此类场景下备份服务器和备份代理一般是虚拟机部署. LAN-Free一般用于备份数据量较大,且对备份窗口要求比较严格的场 ...