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以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...
随机推荐
- python -- 解决UnicodeEncodeError问题
使用中文字段时,经常会出现该异常:UnicodeEncodeError: 'ascii' codec can't encode characters in position 解决方法1: 在开头加上 ...
- CentOS6中OpenMP的运行时间或运行性能分析
OpenMp作为单机多核心共享内存并行编程的开发工具,具有编码简洁等,容易上手等特点. 关于OpenMP的入门,博主饮水思源(见参考资料)有了深入浅出,循序渐进的分析.做并行开发,做性能分析是永远逃避 ...
- 拥抱.NET Core系列:MemoryCache 缓存选项 (转载)
阅读目录 MSCache项目 MemoryCacheOptions ExpirationScanFrequency SizeLimit CompactionPercentage 写在最后 在上一篇 ” ...
- linux文件系统初始化过程(1)---概述
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...
- import require
https://www.zhihu.com/question/56820346/answer/150743994
- python基础学习1-类相关内置函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #===issubclass(class,classinfo) 检查class是否是classinfo类的子类 ...
- 传统路由和OVS区别
本文主要描述了一种将三层路由变成二层交换转发(以及二层转发变成三层路由)的实现方式,以应对OVS(OpenFlow)跨网段路由复杂的问题:当然技术本身是客观的,具体应用还要看场景. 随着SDN技术不断 ...
- Java虚拟机笔记(四):垃圾收集器
前言 前一篇文章介绍了内存的垃圾收集算法,现在介绍下内存回收的具体实现--垃圾收集器. 由于Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商,不同版本的虚拟机所提供的垃圾收集 ...
- 【JUC源码解析】DelayQueue
简介 基于优先级队列,以过期时间作为排序的基准,剩余时间最少的元素排在队首.只有过期的元素才能出队,在此之前,线程等待. 源码解析 属性 private final transient Reentra ...
- UWP 检测网络状态
最近发现Community Toolkit有了网络辅助类,貌似很早就有了... 很不错,还是用.给大家分享一下. 1. 检测网络是否可用 2. 检测网络是否是计费模式? 3. 检测网络接入类型 4. ...