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

度量图:

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

度量图:

第六次作业的内容还是很清晰的,我的问题还是说没能将问题独立成方法或者类,尝试在一个大类或者大方法中解决所有的问题,比如这次的watchThread,所有的监控逻辑都写到了一起,然后就飘红了.我想了下这种问题是怎么产生的,然后发现是自己好多时候不知道如何在类与类,方法与方法之间传递正确的信息,直接共享变量似乎又不大合适,所以只好写成一团...不管怎样,面向对象的思想还是需要继续修炼啊.
bug主要产生于各个线程的recover和监控之间的冲突,我上课注意老师讲的这块,老师建立快照的方法似乎是每次扫描建立一个树状结构文件系统映射,而我的实现方法是每次扫描一遍文件系统,既复杂又耗时,所以就容易出现bug.
第七次作业
由于自己的一些原因,第七次作业血崩了,最终的实现情况太惨烈了,导致我甚至不想把类图和度量结果放上来,我简单的分析一下bug情况.
一个是需要自己重新实现求最短路径的方法不然GUI的实现太耗时,会出现奇奇怪怪的现象,尤其是在很多出租车同时接单的情况.另一个时间上的处理,因为是直接获取系统时间然后取舍的,所以有的地方处理不好会出现一些小问题.
总结:
随着程序复杂度提高,尤其是多线程的引入,使得理解一份代码变得越来越困难,所以文档的重要性越来越高.每一次都一定要好好写readme,我有一次拿到的readme甚至变成了乱码,这对互测就造成了很大的困难.好好写文档也是对自己的负责,我曾经有一次的bug就是在写文档的过程中想通并修正的.
多线程的安全问题其实需要好好思考,有的是逻辑上并行,其实在一个线程里先后处理的,有的是逻辑上有先后其实是在不同线程内并行处理的.只要涉及多个线程就一定要好好地思考线程安全.另外synchronized关键字虽然有助于解决线程安全,但是也不能滥用啊!
OO学习第二阶段总结的更多相关文章
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
- OO学习最终总结
0.前言:本次主要是针对第三阶段的三次作业以及整个课程学习的总结,这三次作业主要是针对对程序进行重构使得程序可以对功能进行扩展的训练以及对类的设计,所以在此阐述在练习过程中的问题以及感悟. 1.作业总 ...
- 【OO学习】OO第一单元作业总结
OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...
- OO学习体会与阶段总结(多线程程序)
前言 在最近一个月的面向对象编程学习中,我们进入了编写多线程程序的阶段.线程的创建.调度和信息传递,共享对象的处理,线程安全类的编写,各种有关于线程的操作在一定程度上增加了近三次作业的复杂度与难度,带 ...
- OO学习体会与阶段总结(测试与论证)
前言 随着期末的到来,对于面向对象程序设计课程的学习也迎来了尾声.在最后一个月的从课程中,笔者对于面向对象程序规格实现层面的单元测试.正确性论证以及使用UML图描述程序的设计进行了深入的学习.通过 ...
- OO学习体会与阶段总结(设计与实现)
前言 在最近的一个月的课程中,笔者对于规格化编程进行了深入的学习.运用面向对象抽象思想对编写的程序进行过程抽象.异常处理.数据抽象.类的层次规格与迭代等等规格设计,使得程序结构化程度提高,具有更好 ...
- OO学习总结与体会
前言 经过了对于面向对象程序设计的一个月的学习,我初尝了JAVA以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...
随机推荐
- 【OC底层】AssociatedObject 关联对象
如何实现给分类“添加成员变量”? 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中.但可以通过关联对象来间接实现 关联对象提供了以下API 1> 添加关联对象 void objc_s ...
- iOS 计算源码行数
如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 1.列出每个文件的行数 find . -name "*.m" -or -name "*.h&qu ...
- Liunx信息显示与文件搜索
. uname 显示系统相关信息,如内核版本号,硬件架构 -a # 显示系统所有相关信息 -m # 显示计算机硬件架构 -n # 显示主机名称 -r # 显示内核发行版本号 -s # 显示内核名称 - ...
- 小白python语言基础
程序概念层级 表达式 语句包含表达式 包和模块 程序 变量与储存 变量:对象的别名 命名规则:字母.数字.下划线 只能以字母或下划线开头 能包含空格/中文 避免python关键字或函数名 简短 ...
- 小程序犯错(一):“ReferenceError: 模拟服务器传来的数据 is not defined”
学习数据绑定,在onLoad中模拟服务器传数据时,报错:模拟服务器传来的数据 is not defined 我这里粗心的忘记注释说明了,如下: 把该行无关的错误数据注释或删除即可.这里提醒同学们,出现 ...
- FPGA之CORDIC算法实现_理论篇(上)
关于cordic的算法原理核心思想就是规定好旋转角度,然后通过不停迭代逐步逼近的思想来实现数学求解,网上关于这部分的资料非常多,主要可以参考: 1)https://blog.csdn.net/qq_3 ...
- node auto run / node 自动运行
http://stackoverflow.com/questions/20445599/auto-start-node-js-server-on-boot http://stackoverflow.c ...
- 20155238 2016-2017-2 《Java程序设计》第三周学习总结
教材学习内容总结 类定义使用class关键词,名称使用Cloths,建立实例运用New关键词 Clothes c1 = new Clothes(); = :制定参考名称参考某个对象 == :比较参考名 ...
- 5 功能4:个人站点页面设计(ORM跨表与分组查询)
1.个人站点页面文章的查询 # 个人站点 http://www.cnblogs.com/wh1520577322/ http://www.cnblogs.com/liucong12345/ http: ...
- Gitlab+Jenkins学习之路(三)之gitlab权限管理--issue管理
1.创建Group,User,Project 创建一个组,组名为java Group path http://192.168.56.11/java Visibility Level: #为权限级别,一 ...