第二次OO总结】的更多相关文章

昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况.工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好.学习才是王道嘛,技术好了,功底扎实了,工资自然应该不是问题.今天看的是第二章,OO大原则,这一章可能主要涉及到一些设计模式的基本原则和设计模式,因为这毕竟是软件开发人员的必修课,是成为一个好的软件开发人员的开始,之前完完整整的看了一遍<大话设计模式>,确实写的不错,如果没看过设计模式的可以拿他作为起…
目录 前言 一.第一次作业分析 1. UML及复杂度分析 二.第二次作业分析 1. UML及复杂度分析 2. 性能优化 2.1 楼层类的实现 2.2 调度算法 3. bug分析 三.第三次作业分析 1. UML及复杂度分析 2. Bug分析 四.评测机的搭建 1. 整体框架 2. 正确性检测 五.多线程的调试   前言 这三周以来的OO多线程 + OS实验关键期 + OS理论课期中考试 + 每周一次去学院路的答辩 + 每周日一上午的行进管乐团训练 + 每周日一晚上的交响乐团排练 + 其它各种琐事…
这次的系列作业是写一个电梯调度,主要目的是让我们熟悉多线程. 第一次作业是一个傻瓜电梯的调度问题,要求也很简单,即每次接一个人就行了.我只用了两个线程,一个是输入线程,一个是电梯线程,输入线程负责从标准输入中读入请求并加入到请求队列中,电梯线程负责从请求队列中取出请求并执行,思路非常简单,每次取一个请求,把人送到后,再取下一个,直到取完并且输入停止. 第二次作业没有什么本质区别,只不过修改了调度算法,在电梯运行时进行捎带,我这里的思路是,先找到一个主请求,然后在去接主请求和送主请求去目的地的路上…
作业5——多线程电梯 好像失忆了,竟然对这三部电梯很陌生,我尽量回忆一下当时挣扎的场景orz 整体思路和第二次电梯差不多,但是将调度器类套在了电梯类里 优点可能是没有无效,足矣!!!缺点emmmm要是我能找到缺点,也不这么写了,接受现实,笑着活下去 对于多线程的理解停留在new好几个对象,并且synchronize几乎任何方法,可以说辣眼睛了 现在只记得刚提交就想起来注释掉的try-catch没有恢复,差点就要crash好几个 感谢不嫌我烦的PQ学长,虽然你看不到,但我还是要向你表白! 作业6—…
前言 ​ 第二单元 OO 作业的主题是多线程,课程组通过了电梯调度这个经典问题考察了多线程的调度. ​ 从第五次作业到第七次作业的迭代为,单部多线程可捎带电梯,多部多线程可捎带调度电梯(电梯属性相同)和多部多线程可捎带调度电梯(电梯属性不同,包含需换乘请求) 一.作业分析 作业分析将通过代码复杂度度量,UML 协作图,扩展性,优缺点等方面进行分析 第五次作业 ​ 第五次作业的任务是完成单部可捎带电梯的调度. 设计分析: 第一次多线程作业中,我初步设想的是有三个线程,一个输入线程,一个调度线程,一…
多年以后,面对办公室的屏幕,我会回忆起开始肝第二周OO作业的那个遥远的下午.那时的程序是一个一两百行的符号求导,基类与接口在包里一字排开,工整的注释一望到底 谁能想到,接下来的十几个小时我要经历什么样的噩梦( 转自我的个人博客 问题描述 我们面临的问题很简单:给定一个符号表达式E,E由幂函数.正弦函数和余弦函数的乘积加和而成(严谨定义略),求与E等价的尽可能短的表达式E' 即: 形如2*x*sin(x)^2+sin(x)+4*cos(x)+6*sin(x)*cos(x)^-2形式的表达式合法,而…
正则 描述 正则 描述 \f 匹配换页符 \t 匹配制表符 \n 匹配换行符 \v 匹配垂直制表符 \r 匹配回车 \s 匹配单个空格,等同于[\f\n\r\t\v]; \S 表示非空格字符 \d 在正则中表示数字 \w 表示单词字符,等同于字符集合[a-zA-Z0-9_] \ 创建正则对象时,要转义 + 表示出现一到多次 ^ 表示后边出现的数字必须在开头 $ 表示前面出现的数字必须出现在结尾  .  匹配除换行符\n之外的所有字符 g是模式修正符,表示在整个字符串里多次查找(i,大小写敏感)…
OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变高,我们对线程的理解也逐渐加深.下面笔者将对三次作业分别进行总结. 一.单部多线程傻瓜调度(FAFS)电梯 说明:本次作业需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出.本次作业对性能要求非常宽松,不需要进行优化处理.…
“欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行为并行发生,思考量直接从o(n)变成了o(n^2).值得一提的是,由于这次电梯作业只有一部电梯,而且调度算法极为简单,FAFS(先来先服务)的傻瓜式调度似乎已经不太需要多线程,放到正常单线程里也许才不到百行.不过笔者考虑到今后可能的魔鬼电梯(事实证明确实魔鬼),还是义无反顾的使用了多线程. 第一次多…
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电梯线程以后,沿用之前的模式,但是在控制线程的地方进行了部分相应的修改保证任务的完成. 第一次作业—傻瓜电梯 第一次作业是没有任何调度算法的傻瓜电梯,生产者生产请求,将请求加入存储的仓库队列.消费者消费请求,循环从仓库中取出请求,取出一个请求即运送他,直至运送完毕后,再进行循环. 下面是第一次作业的类…
OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下look算法的几个特点: 1.没有主次请求的区分. 2.电梯会一直往当前方向运行直到需要转向,转向条件为: ​ (1)当前电梯中没有乘客的目的楼层在当前方向上. ​ (2)当前方向上的楼层目前没有请求. 3.捎带时只捎带请求与当前方向相同的乘客. ​ (由于第五次第六次作业没有容量限制,所以可以把当前楼…
OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差数列 菜鸡本质暴露无遗) 一.总体设计策略 三次作业设计策略基本相同.前两次是四个类:Main.Elevator.Taker.Waiter:两个线程:main.elevator.第三次在此基础上多了一个类:Dispatcher,一个线程:dispatcher.之所以前两次没有调度器类,是因为由于只有…
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是从0积累的一个过程.每一步,都走得很艰难!虽然我犯过很多错,但我很庆幸,我坚持到了最后! 写在前面 单线程:Java程序在虚拟机上运行,一个Java程序对应一个JVM实例,同时对应一个主线程(即main),程序入口从main进入,运行完毕从main退出. 多线程:顾名思义,即不止一个main线程,m…
三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了.在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业.当然这次也是收获颇丰,我通过电梯了解了线程的工作原理,认识到了线程安全的重要性,下面我将对自己 的三次作业进行一下总结. 一.基于度量的程序结构分析 作业一 (1)总结 第一次电梯还是比较简单的,所以我采用生产者消费者模式就很容易的解决了. (2)耦合度 可以看出电梯线程还是承担了太多的事情,不易维护. 第…
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础上,我还使用了一些调度算法来追求性能分,但是效果上不是很理想,只能勉强获得90分,在这里我想把我自己的做法写出了,供大家参考. 本次作业分为以下部分,三次作业实现介绍(包括调度方法), 总结作业.请读者各取所需. (注:本次电梯的全部调度算法仅针对作业题目,对实际情况并不相符) 三次作业实现 第一次…
在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从中认真分析一下经验和不足吧. 作业一:FIFO单电梯 现在看起来,作业一的难度在整个单元真的仅仅相当于热身.使用线程安全的集合类ConcurrentLinkedQueue存储线程,再用while(true)轮询的方法实现电梯的获取请求,获得请求后运行电梯,运行结束后等待下一个请求即可.整个程序甚至不…
OO第一单元(求导)单元总结 这是我们OO课程的第二个单元,这个单元的主要目的是让我们熟悉理解和掌握多线程的思想和方法.这个单元以电梯为主题,从一开始的最简单的单部傻瓜调度(FAFS)电梯到最后的多部多线程智能调度(SS)电梯,我们需要掌握的多线程知识也从简单的线程间交互与同步到多种多线程模式相结合的复杂线程调度系统. 一.作业分析 第一次作业 第一次作业要求实现的是单部多线程傻瓜调度(FAFS)电梯的模拟.即一次接送一个人的VIP式电梯. 这个版本的作业其实不是我提交时所用的版本,而是我在提交…
总结性博客作业 (1)从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略. (2)基于度量来分析自己的程序结构度量类的属性个数.方法个数.每个方法规模.每个方法的控制分支数目.类总代码规模计算经典的OO度量画出自己作业的类图,并自我点评优点和缺点,要结合类图做分析通过UML的协作图(sequence diagram)来展示线程之间的协作关系(别忘记主线程)从设计原则检查角度,检查自己的设计,并按照SOLID列出所存在的问题 (3)分析自己程序的bug分析未通过的公测用例和被互测发现的…
前言: 第二单元总共包括三次电梯调度作业.这三次作业在笔者看来是为了让学生了解什么是多线程,多线程的好处及可能存在的潜在问题,对于多线程的安全问题应该如何解决和保证结果的唯一性和正确性.那么接下来笔者将结合三次电梯调度作业来谈谈在这三次作业中我都收获了哪些. 第五次作业: 结构分析: 代码分析: 第五次作业相对来说结构比较简单:Main方法调用静态对象调度器,然后作为参数传入输入和电梯实例出来的两个对象中,最后开启这两个线程.唯一需要注意的就是对调度器中任务链表进行操作的时候一定要记得加锁,也就…
OO~第二次作业总结 连续三周的电梯作业结束了,总的来说这三次作业做的还算平稳,既没有被刀,也没有刀中别人.那么接下来开始谈谈我对这三次作业的认识. 一.设计策略 我三次作业的设计思路基本上是相同的,电梯主要分成了三个线程,即Input(输入线程).Scheduler(调度器).Elevator(电梯).在这三个线程之间通过两个不同的托盘进行数据交互,即把输入线程输入的电梯指令放入调度器的ArrayList中,然后再用傻瓜调度算法/可稍带算法将相应指令传给电梯,最后电梯执行指令并输出相应结果.…
OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果输入空则退出,否则将这条命令交给电梯去run,而电梯需要做的事情就是从当前楼层去接人,然后将之送达目的地即可.第一次作业基本没有使用多线程的思想,但是正确性是无懈可击的. 其实为了学习和使用多线程知识,我也写了一个多线程版本的傻瓜调度,其设计与第二次作业几乎相同,不同点就只在电梯的运行方法上有所不同…
OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采用单例模式.Dispatcher中list为请求队列,over为输入线程结束的标志,当输入线程读到null时,将over设为true. Elevator为电梯线程,采用傻瓜调度(FAFS). 代码分析 SOLID原则分析 Input线程负责输入,elevator线程负责取指令执行的单一负责线程比较好…
总述 OO的第二单元主题是电梯调度,与第一单元注重对数据的输入输出的处理.性能的优化不同,第二单元的重心更多的是在线程安全与线程通信上.这此次单元实验之前,我并未对线程有过了解,更谈不上“使用经验”,整体上第二单元三个实验也做的较为吃力.三次实验,也算是对线程的一步步入门吧,以及由于对于线程不是很熟悉,所以我总是下意识的把程序分割,尽量减少通信量. 第一次实验 基本需求:单电梯.无捎带要求.基本无性能要求. 基本实现:一个主线程或者一个主线程与一个电梯线程 我采用的方法是使用一个主线程,因为实际…
OO第二次单元总结 前言 第二单元的三次作业:系列电梯与多线程. 第五次作业 (1)设计策略 电梯的第一次作业是单部傻瓜电梯,采用FAFS调度策略,电梯按队列顺序依次处理请求,单次只处理一个请求.本次作业采用了简单的生产者-消费者模式,而调度器则采用了单例模式. (2)基于度量来分析自己的程序结构 类图: 复杂度分析: 依赖度分析: 本次作业很简单,共设计了四个类,除主线程外包含一个请求输入线程和一个电梯线程.Scheduler类为单例模式调度器,内部有一个请求队列.Input类负责请求的获取和…
一次又一次的挑战,一次又一次全新的知识,我来到了多线程的面前 第五次作业 1.度量分析 >第五次作业由于很大程度上调用的是前两次电梯的一些代码,所以存在的问题与前几次也十分相似.同时由于第一次使用多线程来解决问题,可能将某些功能过于集中的放在了个别类中.导致McCabe Cyclomatic Complexity以及Nested Block Depth出现标红的现象. 2.类图 >这次在类图上面问题体现的也很明显,在方法的分配上并没有做的很平均.这主要是由于为第一次多线程作业,所以将大部分的功…
一.多线程电梯系列作业设计策略 1. 第一次作业——"FAFS傻瓜电梯" 第一次作业是先来先服务的"傻瓜电梯",我当时觉得这个设计未免太简单了,于是就在傻瓜电梯的基础上加上贪心算法,每次都执行电梯内外距离最近的请求(但是没有行进中的捎带).由于第一次没有限制CPU时间,而且我的wait--notify用得不太熟,因此就采取了暴力轮询的方式.我将我将调度器线程写在了main函数中(这是个很不好的设计,第三次作业中将其改进)作为一个线程,电梯作为一个线程,输入作为一个线…
OO电梯作业总结 这三周的作业和课堂内容以及OS的课上内容都相同,都是关于多线程方面的知识.在这次作业中由浅入深布置了三项多线程电梯方面的作业,让我们在实践中感受了多线程的工作原理以及各项需要注意的要素. 一.第一次作业 第一次作业是典型的生产者消费者问题,只不过生产者不必考虑容器装满的特殊情况.在这次电梯作业中电梯只需要将乘客送往目标楼层,不需要解决沿路搭顺风车等其他需要解决的特殊情况.当负责输入的生产者停止时,设置一个共享的结束变量结束整个电梯的运行,整个电梯的运行结构如下图所示: 如图所示…
OO第二次单元总结--电梯多线程调度问题 在这个单元OO学习中,我们终于迎来了期待已久(不是)的电梯多线程调度作业,开启了OO打怪之路的新关卡.虽然说经过了这三次作业,我对于多线程的理解还不能算是熟练,在线程控制方面的实现也仍有缺陷,但是经过了磕磕绊绊的写作业过程也达到了可以对多线程进行简单应用的程度.在此,我对于第二单元的OO作业进行一个总结,梳理一下自己这三次作业中的实现方式以及所踩过的大雷. 第一次电梯作业 (1)设计策略 题目要求 单部多线程傻瓜调度(FAFS)电梯的模拟,实现对于一个目…
目录 总 架构 controller model view 优化算法 Look 算法 多种算法取优 预测未来 多线程 第五次作业 第六次作业 第七次作业 代码静态分析 UML 类图 类复杂度 类总代码规模 属性个数 方法复杂度 方法个数 方法规模 控制分支数目 优缺点 优点 缺点 SOLID 原则 单一职责原则(SRP) 开放封闭原则(OCP) 里氏替换原则(LSP) 接口隔离原则(ISP) 依赖倒置原则(DIP) 多线程协作 UML 图 分析 线程间通信 并行任务的独立性 坑 多线程错误 Ma…
类的设计: 首先,我对我的思路进行整体的说明,由于我的三次作业,思路是继承的,所以做总体的说明 第一,   Main类,Main类自身并没有功能,他的功能只是构造需要的电梯线程和输入线程. 其中,第三次作业中,main类负责将电梯参数(运转时间,负载上限,运行楼层)传入Memory类和Elevator类 第二,   是Eleinput类,这个类,是一个单独的线程,功能是读入需求,每次读入需求,将其写入Memory类中,当读入null时进程结束. 输入器,与电梯类不相连,只负责传数据给Memory…