oo第二阶段总结
第五次作业——多线程电梯
一、设计策略
本次作业是我们第一次接触多线程,给程序添加多线程功能后最大的挑战是实现共享数据的安全、避免冲突,由于这次作业是第一次尝试多线程方法,因此采用了将所有方法都加上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考研复试的时候被面试官问过,一模一样,如今又在一个笔试题里看到了类似的题目,眨一下,有人会 ...
随机推荐
- I/O和管道
一:I/O设备 I/O(Input/Output),即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出. 标准输入(STDIN):0 默认接受来自键盘的输入 标准输出(ST ...
- ubuntu安装eclipse
官网下载界面 这里我选择的是Exlipse Oxygen的Eclipse IDE for Java EE Developers的64位版本. IBM直接下载地址 下载下来的是一个tar.gz的安装包, ...
- Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
/** * @author hechen */ var gs = { /**获得屏幕宽度**/ ScreenWidth: function () { return window.screen.widt ...
- MyBatis 框架系列之基础初始
1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只 ...
- leetcode 283. Move Zeroes -easy
题目链接:https://leetcode.com/problems/move-zeroes/ 题目内容: Given an array nums, write a function to move ...
- Lazy Loading | Explicit Loading | Eager Loading in EntityFramework and EntityFramework.Core
EntityFramework Eagerly Loading Eager loading is the process whereby a query for one type of entity ...
- [HNOI 2015]落忆枫音
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...
- [HNOI 2011]数学作业
Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Con ...
- [POI 2015]Kinoman
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- ●BZOJ 2560 串珠子
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2560 题解: 容斥,状压计数dp 首先求出一个数组 g[s] 表示集合内的点的连边方案数(两 ...