OO第二次博客作业

一、第五次作业——多线程电梯

(1)分析:

  因为时间比较紧迫,所以采用了伪多线程的方式,即计算还是单线程,但是输出是三个多线程。不过最后被判无效了,GG。

  现在分析一下觉得还是挺清晰的,电梯开三个线程,在分派任务的时候wait,notify一下就行了。

算法分析:

  1.每个电梯有一个list队列,在新任务来的时候决定加入哪个list

  2.有变动的list更新(用上一次的代码,从头算到尾,得到应该输出的真实时间)

  3.三个线程死循环,遍历对应的list,如果有请求的应输出时间小于当前时间,输出,标记。

  最麻烦的是关于路径的计算:从当前系统时间中找到电梯此时(输入待分配请求的时间)的主线程,计算自上次完成主请求后的路程(与数据结构有关,每个主请求确认之后都要更新楼层数组,记录应到达的时间,加入一个捎带就往“后”更新一遍楼层数组)。

(2)类图:

(3)体会:

  还是没有摆脱能用算法解决的决不用划分对象解决的思想,觉得那样调试太麻烦了。不过通过之后的训练感觉慢慢接受了这种编程的思路,虽然有的时候仍然感觉划分对象写得跟函数没什么两样。

二、第六次作业——IFTTT

(1)分析

  1.任务分析(细致+耐心):这是本次作业最麻烦的地方。首先是基本功能的实现,再者是对应关系的限制。

  2.file的不安全性:封装

  3.实时读状态和存快照的选择:考虑到目录量和文件量本次没有做限制,所以决定用实时读取的方式确定当前的状态,并在readme中阐述清楚。

  4.怎么开线程的算法:考虑到120个线程有些多,想到了一种针对实例开线程的方法。每个路径都会有4个act的字符串数组,在线程的死循环中会首先把所有可能的tig触发都判断一遍,然后遍历各个act数组,如果满足tig的同时也满足某act的数组,则针对该tig相应对应的act。

(2)类图与时序图

(3)结果分析:

  优点:线程数量比较少

  缺点:加锁的方式比较暴力,所以一开始调死锁调了半天。慎用类锁加嵌套使用,同步的代码越短越好。

(4)体会:

  读需求文档耐心很重要,需要自己把大段的文字整理成思维导图记录在纸上。分析同步的时候也应该现在纸上作分析,把类和线程相互的引用关系画出来,再决定锁的类型或范围会比较清楚。

三、第七次作业——出租车(1)

(1)分析:

  1.线程安全:请求和出租车会涉及到互改状态,且会出现一对多和多对一的情况

  策略:ask单方面改变taxi,taxi中与改变状态有关的方法使用锁。

  2.时间:出租车的运行时间和请求的时间窗口都要求实时,所以要尽量缩短切换时间

  策略:少开线程,把ask和taxi都用容器存起来,使用单独的线程循环容器以更新数据。

  3.状态转移:出租车的状态机(需要细致读题)

  4.算法方面:最短路径的选择

  策略:使用GUI中的bfs存两点间最短路径长度。a到b的最短路径递归:与a连通的、与b为n-1的点c为路径上一点,a=c,n=n-1。

(2)类图与时序图

(3)结果分析:

  1.bug:忘记处理file的不安全性了。其余bug正在讨论中。

  2.优缺点分析:

  优点:信息交互简单,分析冲突的时候比较清晰。借用了gui中的代码,减少了工作量。

  缺点:知识盲区——单功能原则和类之间的平衡原则的分界线还不是很明确,导致被扣设计分(这两者是如何做到兼得的呢?);DIP原则后期没时间改了,但是这个原则是我最不能理解的,只能停留在要写抽象接口的层面。还有严格的卡时间和卡步数问题,不知道怎么处理。最短路径算法有些过于暴力,所以必须先存一下,避免每次启动程序要等10分钟的情况。

(4)体会

  还是要实时关注讨论区和微信群,不能从确定架构开始就不看了,比如说这个的接客1s是进入stop状态。

  读别人的代码仍有一定的困难,且花费的时间较长。

  

原文地址:https://www.cnblogs.com/iwanna/p/8973191.html

时间: 2024-10-01 21:46:08

OO第二次博客作业的相关文章

OO第二次博客作业(2018春)

写在前面 多线程 搞死人 第五次作业 类图: 这次作业的调度器(als_3_controller)继承了上一次的调度器(smart_controller),并且分解了之前的schduel方法,内容分布在run()和新建的类ELE_thread的isCarry()和run()里.在程序运行启动了类ELE_thread 的三个线程,分别代表三部电梯的控制系统,分别操作三部电梯. 度量分析: 问题都出在ELE_thread 的run()里,包括圈复杂度和嵌套深度.主要是因为把上一次的大部分代码都集中放

渐入OO课的深处,探索多线程的秘密——OO第二次博客总结

一次又一次的挑战,一次又一次全新的知识,我来到了多线程的面前 第五次作业 1.度量分析 >第五次作业由于很大程度上调用的是前两次电梯的一些代码,所以存在的问题与前几次也十分相似.同时由于第一次使用多线程来解决问题,可能将某些功能过于集中的放在了个别类中.导致McCabe Cyclomatic Complexity以及Nested Block Depth出现标红的现象. 2.类图 >这次在类图上面问题体现的也很明显,在方法的分配上并没有做的很平均.这主要是由于为第一次多线程作业,所以将大部分的功

OO第二次博客

oo5_7 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,c

第二次博客作业

一.是否需要有代码规范 1.“这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西.” 其实好的代码风格自然而然就形成了,比如等号两边的空格和大括号的位置,形成习惯之后并不会浪费时间,反而是写的乱七八糟的话之后的复查会浪费时间. 2.“我是个艺术家,手艺人,我有自己的规范和原则.” 额...再艺术也是个程序员吧...如果说你写的代码只由你来维护的话就算写成梵高的画也没关系,但是代码是永存的,人是会被拍在沙滩上的,还是能让大家读懂的好. 3.“规范不能强求一律,应该允

文件服务相关博客作业

nfs和sameba博客作业 博客实践作业: (1) nfs server导出/data/目录: (2) nfs client挂载/data/至本地的/mydata目录:本地的mysqld或mariadb服务的数据目录设置为/mydata, 要求服务能正常启动,且可正常 存储数据 (3) 客户端(lamp)部署wordpress,并让其正常访问:要确保能正常发文章,上传图片: (4) 客户端2(lamp),挂载nfs server导出的文件系统至/var/www/html:验正其wordpres

第二版博客首页安装代码

css: #profile_block{text-align:center;position:absolute; top:60px; right:10px;} #blog-calendar{border-radius: 7px;background:#fff;} #p_b_follow{padding-top:10px;} #p_b_follow a{display:block;width:70px;height:35px; line-height:35px;mrgin-top:10px; te

https的博客作业

博客作业:分别使用httpd-2.2和httpd-2.4实现 1.建立httpd服务,要求: (1) 提供两个基于名称的虚拟主机www1, www2:有单独的错误日志和访问日志: (2) 通过www1的/server-status提供状态信息,且仅允许tom用户访问: (3) www2不允许192.168.0.0/24网络中任意主机访问: 2.为上面的第2个虚拟主机提供https服务: 前提准备: 172.16.1.1测试httpd-2.4,这是centos7系统 172.16.1.2测试htt

C语言博客作业--一二维数组

一.PTA实验作业 题目1:7-2 求整数序列中出现次数最多的数 1. 本题PTA提交列表 2. 设计思路 定义变量n,i,j,max等于0,a[]10用于存放输入的值,b[10]用于存放a[]中各个数有多少个; 输入n的值 i从0开始,每次加1,输入a[i]的值,直到i==n结束循环 i从0开始,判断i是否<n,,进入下一步,每次加一,直到条件不满足 j从0开始,判断j是否<n,,进入下一步,每次加一,直到条件不满足 如果a[i]==a[j],b[i]加一 i从0开始,判断i是否 输出a[j

博客作业1--抽象数据类型

一.作业题目 实验题目 试仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数基本运算如下所示: 1.构造有理数R,元素x1,x2分别被赋以分子.分母值 2.销毁有理数R 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母. 4.将有理数R的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母 5.有理数R1,R2相加,结果存入有理数R3 6.有理数R1,R2相减,结果存入有理数