BUAA_OO 第二单元总结
作业分析
第一次作业
本次作业是单次可捎带电梯的设计,主要是初步了解多线程的设计实现和测试,本身算法设计非常简单。这次作业整体来说不是很难,是多线程的入门,主要目的就是让我们认识,了解一下什么是多线程。所以主要时间花费不在架构的设计,在于认识,理解,如何去使用多线程。思考后的想法是:一个用于存储人(Person)的类,一个用于解析输入的线程,一个电梯线程,并且维护一个共享队列,其中包括电梯队列和等待队列。有人来就进入等待队列,上了电梯就进入电梯队列,当输入线程结束且共享队列(两个队列)均为空,电梯线程结束。想法非常简单也很现实,但一开始对多线程不是很懂,实现起来用了一些时间.
第二次作业
本次作业将一部电梯改为了有输入决定的1到5部电梯,同时加入了电梯限载的设定。基本和第一次想法类似,只是加入了一些新的方法,如 personCarryIn() 和 personCarryOut() 等,到达每一层的时候看有没有人要上(捎带)下电梯,主要是条件的判断,大体上就是指导书的思路
第三次作业
本次作业将没有了通用电梯,而是改为三种不同类型的电梯,分别只能在特定的楼层停靠,这就导致了有些请求必须通过换乘来解决。还是继承了之前的想法,只是这一次需要三个电梯队列,一个等待队列。因为等待队列对所有电梯来说应该是公有的,而电梯队列是每个电梯私有的,也就是上了电梯的人。同时,将之前的电梯类改为一个抽象类,只负责实现电梯的基本功能,这三部电梯(线程)分别继承这个抽象类。
关于SOLID等设计原则分析(可扩展性见反思部分):
SRP:糟糕透了,每个模块都是一个类搞定,电梯和调度器有数十个方法,几百行的代码量,没有进一步细分其各种功能。
OCP:想了想应该是不可能了,调度算法深入了电梯调度器的每个类中,只有请求处理类可能做到。
LSP:做到了,因为根本没有自己设计的继承关系...
LOD:电梯类和请求处理类基本没有直接通信,也就没有直接调用。
ISP:只实现了RUNNABLE接口,显然是必须的。
DIP:没有设计好抽象层次。
心得与反思
本单元电梯作业的主题是认识多线程,尝试应用一些关键字、锁的机制保障线程的安全。这一单元对于多线程的学习中,不仅加强了对多线程的理解,更是深刻认识到了线程安全的重要性。一些平常没有太注意的小问题,就可能在多线程问题中被放大,并且会导致很严重的后果。因此,在写每一行代码时,一定要思考这一步是否是线程安全的。当然,能提前注意到最好,一些实在想不到或者难以理解的点,只能等到出错后再回来调试。设计肯定不是一开始就是完美的,测试数据也是完善我们设计的一部分,一定不能害怕错误,发现错误改正错误才是我们应该做的
BUAA_OO 第二单元总结的更多相关文章
- BUAA_OO第二单元作业总结——多线程
OO第二单元作业总结——多线程 单元任务 本单元主要的内容是通过模拟电梯的运行来熟悉多线程的实现,从简单的单部FAFS电梯开始,ALS电梯,到最后的多部ALS电梯. 一.设计策略分析总结 1.1 多线 ...
- BUAA_OO第二单元总结性博客作业——多线程电梯架构
一.设计策略 在第一次作业时,我刚第一次接触多线程这个东西……于是乎对于第一次VIP直上直下一次只接一个人的电梯,我借鉴了指导书中为我们提供的架构,设计了一个输入线程和一个电梯线程,并设置了一个中间类 ...
- BUAA_OO第一单元作业总结
BUAA_OO第一单元作业总结 单元任务 第一单元的任务为实现表达式的求导,其中第一次作业是对简单多项式的求导,第二次作业是对包含简单幂函数和简单正余弦函数的多项式的求导,第三次作业是对包含简单幂函数 ...
- OO第二单元作业小结
前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...
- BUAA面向对象设计与构造——第二单元总结
BUAA面向对象设计与构造——第二单元总结 第一阶段:单部傻瓜电梯的调度 第二阶段:单部可捎带电梯的调度 (由于我第一次写的作业就是可捎带模式,第二次只是增加了负数楼层,修改了一部分参数,因此一起总结 ...
- 我永远爱着OOP——第二单元作业总结
第二单元的电梯真是愉♂快呢,多线程编程作为java编程OOP中的重要组成部分,通过这一个单元的学习,我也是有了很多全新的认识 那么下面就先例行一下公事 三次作业分析 第五次作业 设计分析 实现的电梯是 ...
- 2019OO第二单元总结
(1)设计策略 电梯第1次作业是一个傻瓜调度电梯,使用先来先服务原则,不用考虑捎带(可以认为电梯的载客量为1),因此比较简单,调度器用一个队列就可以. 使用生产者-消费者模型,输入线程是生产者,电梯是 ...
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
随机推荐
- qq,新浪分享
var _title,_source,_sourceUrl,_pic,_showcount,_desc,_summary,_site; // 新浪微博分享$('.xlwb-share').on('cl ...
- 图的深度优先搜索dfs
图的深度优先搜索: 1.将最初访问的顶点压入栈: 2.只要栈中仍有顶点,就循环进行下述操作: (1)访问栈顶部的顶点u: (2)从当前访问的顶点u 移动至顶点v 时,将v 压入栈.如果当前顶点u 不存 ...
- 【杂谈】SpringBoot为啥不用配置启动类
前言 在学习SparkJava.Vert.x等轻量级Web框架的时候,都遇到过打包问题,这两个框架打包的时候都需要添加额外的Maven配置,并指定启动类才能得到可执行的JAR包: 而springboo ...
- Sql练习201908200916
表结构: 一条sql修改多条数据(Sql server),oracle,mysql请自行尝试: ; go 完成.
- css过渡和2d详解及案例
css过渡和2d详解及案例(案例在下方,不要着急) 本文重点: 1.在2D变化使用过程中,有些需求需要两种或两种以上的变化同时使用, 值得注意的是尽量把位移变化放在最前面,把其他变化放在最后面,属性值 ...
- 实际开发中 dao、entity的代码怎样自动生成?一款工具送给你
01 关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿. 产品小汪铿锵有力的说:小猿同 ...
- MATLAB实现一个EKF-2D-SLAM(已开源)
1. SLAM问题定义 同时定位与建图(SLAM)的本质是一个估计问题,它要求移动机器人利用传感器信息实时地对外界环境结构进行估计,并且估算出自己在这个环境中的位置,Smith 和Cheeseman在 ...
- 记一次JAVA进程导致Kubernetes节点CPU飙高的排查与解决
一.发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现CPU持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐(调度):如果调度到同样问题的节点上 ...
- vue 刮刮乐功能实现
<template> <!--游玩区域--> <div class="panel"> <canvas id="canvas&qu ...
- input radio点击选中再点击取消
这里主要说一下这个jquery中的data()方法,个人感觉这个方法平时挺少用到的,所以说一说,按照官方的解释就是 向元素附加数据,然后取回该数据; 嗯,是的,就是这么简单. 那这里说一下这个方法的使 ...