面向对象课程的第二个阶段结束了,作业们由简单的玩具模式步入到复杂的多线程地狱模式,由之前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是一定要在动手敲代码实现之前对整个程序的实现做到心中有数,想好每个模块的功能和借口,这样才能避免在后期的时候改来改去,甚至出现可笑的bug.简而言之就是由随心所欲搬砖,转化成照着蓝图搬砖,这样很容易就能还在雏形的时候发现哪块砖放错了位置.当然后期也需要测试,看看哪些砖会在住人的时候掉链子.

第五次作业:

类图

度量图:

我的问题在于把太多的任务交给了电梯类本身去做,应该将这些任务或者说是功能拆分出来,划分出其他类的.主要的bug在于电梯运行过程中在楼层和目标楼层之间插入新的指令以及到达主指令的目标楼层之后丢弃不携带的指令并将这些指令重新放入指令托盘.其实我在实现之前也思考到这个问题,但并没有记录下来然后实现的时候就忘记了...

第六次作业

类图:

度量图:

第六次作业的内容还是很清晰的,我的问题还是说没能将问题独立成方法或者类,尝试在一个大类或者大方法中解决所有的问题,比如这次的watchThread,所有的监控逻辑都写到了一起,然后就飘红了.我想了下这种问题是怎么产生的,然后发现是自己好多时候不知道如何在类与类,方法与方法之间传递正确的信息,直接共享变量似乎又不大合适,所以只好写成一团...不管怎样,面向对象的思想还是需要继续修炼啊.

bug主要产生于各个线程的recover和监控之间的冲突,我上课注意老师讲的这块,老师建立快照的方法似乎是每次扫描建立一个树状结构文件系统映射,而我的实现方法是每次扫描一遍文件系统,既复杂又耗时,所以就容易出现bug.

第七次作业

由于自己的一些原因,第七次作业血崩了,最终的实现情况太惨烈了,导致我甚至不想把类图和度量结果放上来,我简单的分析一下bug情况.

一个是需要自己重新实现求最短路径的方法不然GUI的实现太耗时,会出现奇奇怪怪的现象,尤其是在很多出租车同时接单的情况.另一个时间上的处理,因为是直接获取系统时间然后取舍的,所以有的地方处理不好会出现一些小问题.

总结:

随着程序复杂度提高,尤其是多线程的引入,使得理解一份代码变得越来越困难,所以文档的重要性越来越高.每一次都一定要好好写readme,我有一次拿到的readme甚至变成了乱码,这对互测就造成了很大的困难.好好写文档也是对自己的负责,我曾经有一次的bug就是在写文档的过程中想通并修正的.

  多线程的安全问题其实需要好好思考,有的是逻辑上并行,其实在一个线程里先后处理的,有的是逻辑上有先后其实是在不同线程内并行处理的.只要涉及多个线程就一定要好好地思考线程安全.另外synchronized关键字虽然有助于解决线程安全,但是也不能滥用啊!

OO学习第二阶段总结的更多相关文章

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

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

  2. 【OO学习】OO第三单元作业总结

    [OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...

  3. 【OO学习】OO第二单元作业总结

    OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...

  4. OO学习最终总结

    0.前言:本次主要是针对第三阶段的三次作业以及整个课程学习的总结,这三次作业主要是针对对程序进行重构使得程序可以对功能进行扩展的训练以及对类的设计,所以在此阐述在练习过程中的问题以及感悟. 1.作业总 ...

  5. 【OO学习】OO第一单元作业总结

    OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...

  6. OO学习体会与阶段总结(多线程程序)

    前言 在最近一个月的面向对象编程学习中,我们进入了编写多线程程序的阶段.线程的创建.调度和信息传递,共享对象的处理,线程安全类的编写,各种有关于线程的操作在一定程度上增加了近三次作业的复杂度与难度,带 ...

  7. OO学习体会与阶段总结(测试与论证)

    前言   随着期末的到来,对于面向对象程序设计课程的学习也迎来了尾声.在最后一个月的从课程中,笔者对于面向对象程序规格实现层面的单元测试.正确性论证以及使用UML图描述程序的设计进行了深入的学习.通过 ...

  8. OO学习体会与阶段总结(设计与实现)

    前言   在最近的一个月的课程中,笔者对于规格化编程进行了深入的学习.运用面向对象抽象思想对编写的程序进行过程抽象.异常处理.数据抽象.类的层次规格与迭代等等规格设计,使得程序结构化程度提高,具有更好 ...

  9. OO学习总结与体会

    前言 经过了对于面向对象程序设计的一个月的学习,我初尝了JAVA以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...

随机推荐

  1. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

  2. mysql sqlite3 postgresql 简明操作

    安装 mysql $ sudo apt-get install mysql-server sqlite3 $ sudo apt-get install sqlite3 postgresql $ sud ...

  3. ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [1498], [18713], [18720]

    数据库server出现ORA-00600[kcratr_nab_less_than_odr].不能open数据库 1.open数据库报ORA-00600[kcratr_nab_less_than_od ...

  4. Cocos2d-x 3.0新引擎文件夹结构

    Cocos2d-x 3.0新引擎文件夹结构 2014年4月29日  Cocos2d-x 3.0学习 作为一个Cocos2d-x的菜鸟,我倒是挺愿意关注不同版本号之间的差别,Cocos2d-x 3.0自 ...

  5. DML-插入

    插入的方式一: 语法: insert into 表名(字段)values(值); 特点: 1.要求表明括号里的属性和values括号里的属性一致或兼容 2.字段的个数和顺序不一定与原始表中的字段个数和 ...

  6. docker 简要学习

    一.Docker的安装和启动 使用环境centos7 yum包更新到最新 sudo yum update 安装需要的软件包,yum-util提供yum-config-manager功能 sudo yu ...

  7. 可用的ntp服务器

    操作系统中带的:time.windows.com 和 time.nist.gov  网上查到一个公共的:cn.ntp.org.cn 以上三个连接多次才成功一次,速度不好. 在移动电视盒子上有一个配置: ...

  8. 20155236范晨歌 Exp2后门原理与实践

    ## 实验二 后门原理与实践 1.Windows获得Linux Shell 在windows下,打开CMD,使用ipconfig指令查看本机IP ncat.exe -l -p 5236监听本机的523 ...

  9. spring学习笔记 星球日one - xml方式配置bean

    ide: idea lib包的导入:http://webcache.googleusercontent.com/search?q=cache:http://zyjustin9.iteye.com/bl ...

  10. CentOS7中使用阿里云镜像

    之前因为下载Docker镜像很慢所以用了一家国内的镜像DaoCloud,今天要用的是阿里云的镜像库. 首先要开通了阿里云开发者帐号,地址 : https://dev.aliyun.com/search ...