OO第四单元
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第四单元的更多相关文章
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- OO第四单元总结暨期末总结
OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- 2020 OO 第四单元总结 UML
title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...
- OO第四单元总结与课程总结
OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...
随机推荐
- adb 常用命令大全(4)- 应用管理
查看应用列表 语法格式 adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER] ...
- MacOS安装和卸载Java
安装java 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 设 ...
- java基础语法以及进制的转换
关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...
- unity2021游戏引擎安装激活并汉化
今天重新搭建了下unity的开发环境,也踩了不少坑,还有就是看了一些unity3d的教程,越看越不可思议,unity居然能做这么多好玩的东西,像枪战类,模拟类,角色扮演,动作冒险都很震撼. 但是震撼归 ...
- linux 下 I/O 多路复用初探
本文内容整理自B站up主 free-coder 发布的视频:[并发]IO多路复用select/poll/epoll介绍 引入 一般来讲,服务器在处理IO请求(一般指的是socket编程)时,需要对so ...
- 记一次k8s pod频繁重启的优化之旅
关键词:k8s.jvm.高可用 1.背景 最近有运维反馈某个微服务频繁重启,客户映像特别不好,需要我们尽快看一下. 听他说完我立马到监控平台去看这个服务的运行情况,确实重启了很多次.对于技术人员来说, ...
- Shell系列(12)- 预定义变量(5)
预定义变量 作用 $? 常用:最后一次执行的命令的返回状态. 如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 $$ ...
- javascript 一些函数的实现 Function.prototype.bind, Array.prototype.map
* Function.prototype.bind Function.prototype.bind = function() { var self = this, context = [].shift ...
- selenium下拉选择框处理
HTML: (一)通过xpath层级标签定位 driver.find_element_by_xpath(".//*[@id='Resolution']/option[2]").cl ...
- frida的安装教程-配合夜神模拟器
Frida安装 一.PC端安装 1. 安装frida 默认安装最新版的Frida pip install frida 因为我用的是夜神模拟器,可能不支持最新版,所以下载的之前版本. pip insta ...