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. RabbitMQ-如何保证消息在99.99%的情况下不丢失

    1. 简介 MQ虽然帮我们解决了很多问题,但是也带来了很多问题,其中最麻烦的就是,如何保证消息的可靠性传输. 我们在聊如何保证消息的可靠性传输之前,先考虑下哪些情况下会出现消息丢失的情况. 首先,上图 ...

  2. 双非Java的学习之旅以及秋招路程

    个人信息: 趁着中秋写个帖子记录一下吧.渣渣本,无实习,无高质量证书,走了很多弯路,最后选择的Java后端.现在算是半躺平了,接了几个中小厂的offer保底,20w多的薪资,后面还有几家公司接着面.不 ...

  3. springboot多数据源配合docker部署mysql主从实现读写分离

    本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...

  4. Docker系列(26)- 发布镜像到阿里云容器服务

    1.登录阿里云 2.找到容器镜像服务 3.创建命名空间 4.创建镜像仓库 5.上传镜像

  5. Linux系列(16) - 其他帮助命令

    总结 如何判断一个命令是不是shell内部自带命令 使用命令whereis,whereis可以用来判断一个命令是否是shell内部命令: ls在/bin/下面有可执行文件,说明ls命令不是shell内 ...

  6. Spring Cloud Gateway 没有链路信息,我 TM 人傻了(上)

    本系列是 我TM人傻了 系列第五期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...

  7. Ubuntu18.04 安装Tomcat 8.5

    下载tomcat,登陆官网:https://tomcat.apache.org/ 点击tar.gz后,弹出这个不大懂这是什么? tomcat要求的jdk版本 解压tar包 sudo tar zxvf ...

  8. Vue 初学

    Vue 的基本代码:      概念简介:Vue.js 是目前最火的一个前端框架,只关注视图层,主要负责MVC中的V这一层     MVC 是后端的分层开发概念:     MVVM是前端视图层的概念, ...

  9. mysql8 navicat远程链接失败

    原因:mysql 8加密规则问题 更改加密规则: ALTER USER 'ycc'@'%' IDENTIFIED BY 'you password' PASSWORD EXPIRE NEVER; 修改 ...

  10. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...