第五次作业——多线程电梯
一、设计策略
本次作业是我们第一次接触多线程,给程序添加多线程功能后最大的挑战是实现共享数据的安全、避免冲突,由于这次作业是第一次尝试多线程方法,因此采用了将所有方法都加上synchronized修饰符的方法来避免数据冲突。
二、程序结构
由于本次作业完成的比较匆忙,因此并没有全面的实现多线程的方式,且在测试中出现了较多的bug。由类图可以看出,程序分类较为简单,每个类的功能太过集中,有违oo的设计原则,同时,方法的数目也相对较少,随之而来的是较多的重复代码,这是极为不好的代码风格,同时也违背了oo编程原则。
三、程序的bug
本次作业程序的bug主要集中在线程安全控制,程序在运行过程中会随机出现不可控的输出结果,这与刚开始的多线程设计不明确有很大的关系。同时,这次作业并没有采取wait-notifyall模式,这也是使得程序出现bug的一大因素。
四、心得体会
多线程较为复杂,且带有随机性,因此会提高debug的难度,这就要求我们在开始设计时就规划好程序运行的方案流程,避免中途或者最后再进行大规模修改,这样反而容易产生更多的bug。
第六次作业——IFTTT
一、设计策略
IFTTT主要由监听器和任务组成,因此,程序设计为:为每个监听任务开创一个线程进行监听,每当监听到规定动作后,调用相应方法进行任务响应,线程之间只是调用的方法相同,并不存在数据上的冲突。
二、程序结构
本次作业已能较为熟练地掌握多线程的使用,并且进行系统性的设计与测试。程序通过Input类读入监听器以及相应的任务,之后创立相应的线程,监听事件的发生,当事件发生后,做出相应的响应。测试者可通过testthread来制造相应的事件来测试程序的相应。
三、程序的bug
由于我的测试者并没有测试我的程序,这里只简述我自己尚未解决的bug。这些bug主要是细节方面的问题,比如多层文件夹的监控以及同层文件的监控选择问题,bug出现的原因主要是在方法设计时时间较为紧迫,因此只实现了获取监控文件信息的基本功能,并没有对其进行完整的拓展。
四、新的体会
对于成体系的复杂的程序设计,要多尝试,不能因为复杂而望而却步,停滞不前,事实证明,只要着手去做,总会找到解决方案。
第七次作业——出租车
一、设计策略
此次作业的出租车调动系统由100量出租车和80*80的地图网以及
oo第二阶段总结的更多相关文章
-
OO第二阶段作业总结
第五次作业: 设计策略: 本次作业设计的基本思路是按照指导书所给的推荐方法来完成的,即共用对象为队列盘,线程有电梯.调度器.以及扫描器,扫描器将控制台输入的有效指令加入到队列盘中,调度 ...
-
面向对象(OO)第二阶段学习总结
0.前言 此阶段总共进行三次大作业,其中第一次作业中的第一题,水文数据校验及处理中,遇到较大的难题,第一次接触正则表达式,编码过程中显得难度特别大.第二次作业同样也是对于一元多项式求导中对单项的正则校 ...
-
OO第二阶段纪实
$ 0 写在前面 往往是那些令人格外痛苦的经历,会带给人以最快的成长.转眼间,半个学期的时间过去了,时间匆匆,不管之前对这几次充满了怎样的畏惧,在身边朋友们的帮助和努力下,我也渐渐度过了一个个难关.回 ...
-
OO学习第二阶段总结
面向对象课程的第二个阶段结束了,作业们由简单的玩具模式步入到复杂的多线程地狱模式,由之前的算法简单实现有坑转变成算法复杂实现有很大的坑.一个最重要的心得就是一定要在动手敲代码实现之前对整个程序的实现做 ...
-
2019年北航OO第4单元(UML)总结
1 架构设计 经过了接近一学期的程序设计训练,在这一单元的第一次作业中我就非常注重架构的设计,竭力避免像之前一样陷入"第一次作业凑合,第二次作业重构"的不健康的迭代模式.整体上来说 ...
-
OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
-
GLUT的简洁OO封装
毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...
-
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...
-
OO中,先有对象还是先有类?
就是问,在面向对象思想里,先有对象还是先有类,乍一看和先有鸡蛋还是先有鸡是一类问题,其实不然!这个问题,在lz考研复试的时候被面试官问过,一模一样,如今又在一个笔试题里看到了类似的题目,眨一下,有人会 ...
随机推荐
-
HDU5427
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...
-
【原创】Java移位运算
学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 ...
-
Java——(七)Map之HashMap和Hashtable实现类
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Map Map用于具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的ke ...
-
【转载】ASP.NET线程安全与静态变量的生命周期浅谈
ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期: void Application_Start开始 void Application_E ...
-
UITextField总结
----------------- 监听文字有多长 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:( ...
-
jenkins命令行修改时间
前言:有时jenkins上的时间和系统时间不同步,但是jenkins又在运行状态,不可重启修改 方法:在jenkins界面上,输入命令 system.setProperty('org.apache.c ...
-
Cannot change version of project facet Dynamic Web Module to 3.0 异常问题处理
如何解决Tomcat服务器在初始化应用的时候的以下异常问题 1,Cannot change version of project facet Dynamic Web Module to 3.0 2,O ...
-
轻量级ORM工具Simple.Data
今天推举的这篇文章,本意不是要推举文章的内容,而是据此介绍一下Simple.Data这个很有意思的类ORM工具. 现在大家在.NET开发中如果需要进行数据访问,那么基本都会使用一些ORM工具,比如微软 ...
-
android 常用渐变背景绘制
从上到下绘制如图所示 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android= ...
-
通过DHCP动态管理IP地址
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...