作业分析

  第一次作业

    本次作业是单次可捎带电梯的设计,主要是初步了解多线程的设计实现和测试,本身算法设计非常简单。这次作业整体来说不是很难,是多线程的入门,主要目的就是让我们认识,了解一下什么是多线程。所以主要时间花费不在架构的设计,在于认识,理解,如何去使用多线程。思考后的想法是:一个用于存储人(Person)的类,一个用于解析输入的线程,一个电梯线程,并且维护一个共享队列,其中包括电梯队列和等待队列。有人来就进入等待队列,上了电梯就进入电梯队列,当输入线程结束且共享队列(两个队列)均为空,电梯线程结束。想法非常简单也很现实,但一开始对多线程不是很懂,实现起来用了一些时间.

  第二次作业

    本次作业将一部电梯改为了有输入决定的1到5部电梯,同时加入了电梯限载的设定。基本和第一次想法类似,只是加入了一些新的方法,如 personCarryIn() 和 personCarryOut() 等,到达每一层的时候看有没有人要上(捎带)下电梯,主要是条件的判断,大体上就是指导书的思路

  第三次作业

    本次作业将没有了通用电梯,而是改为三种不同类型的电梯,分别只能在特定的楼层停靠,这就导致了有些请求必须通过换乘来解决。还是继承了之前的想法,只是这一次需要三个电梯队列,一个等待队列。因为等待队列对所有电梯来说应该是公有的,而电梯队列是每个电梯私有的,也就是上了电梯的人。同时,将之前的电梯类改为一个抽象类,只负责实现电梯的基本功能,这三部电梯(线程)分别继承这个抽象类。

  关于SOLID等设计原则分析(可扩展性见反思部分):

    SRP:糟糕透了,每个模块都是一个类搞定,电梯和调度器有数十个方法,几百行的代码量,没有进一步细分其各种功能。

    OCP:想了想应该是不可能了,调度算法深入了电梯调度器的每个类中,只有请求处理类可能做到。

    LSP:做到了,因为根本没有自己设计的继承关系...

    LOD:电梯类和请求处理类基本没有直接通信,也就没有直接调用。

    ISP:只实现了RUNNABLE接口,显然是必须的。

    DIP:没有设计好抽象层次。

心得与反思

  本单元电梯作业的主题是认识多线程,尝试应用一些关键字、锁的机制保障线程的安全。这一单元对于多线程的学习中,不仅加强了对多线程的理解,更是深刻认识到了线程安全的重要性。一些平常没有太注意的小问题,就可能在多线程问题中被放大,并且会导致很严重的后果。因此,在写每一行代码时,一定要思考这一步是否是线程安全的。当然,能提前注意到最好,一些实在想不到或者难以理解的点,只能等到出错后再回来调试。设计肯定不是一开始就是完美的,测试数据也是完善我们设计的一部分,一定不能害怕错误,发现错误改正错误才是我们应该做的

 

BUAA_OO 第二单元总结的更多相关文章

  1. BUAA_OO第二单元作业总结——多线程

    OO第二单元作业总结——多线程 单元任务 本单元主要的内容是通过模拟电梯的运行来熟悉多线程的实现,从简单的单部FAFS电梯开始,ALS电梯,到最后的多部ALS电梯. 一.设计策略分析总结 1.1 多线 ...

  2. BUAA_OO第二单元总结性博客作业——多线程电梯架构

    一.设计策略 在第一次作业时,我刚第一次接触多线程这个东西……于是乎对于第一次VIP直上直下一次只接一个人的电梯,我借鉴了指导书中为我们提供的架构,设计了一个输入线程和一个电梯线程,并设置了一个中间类 ...

  3. BUAA_OO第一单元作业总结

    BUAA_OO第一单元作业总结 单元任务 第一单元的任务为实现表达式的求导,其中第一次作业是对简单多项式的求导,第二次作业是对包含简单幂函数和简单正余弦函数的多项式的求导,第三次作业是对包含简单幂函数 ...

  4. OO第二单元作业小结

    前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...

  5. BUAA面向对象设计与构造——第二单元总结

    BUAA面向对象设计与构造——第二单元总结 第一阶段:单部傻瓜电梯的调度 第二阶段:单部可捎带电梯的调度 (由于我第一次写的作业就是可捎带模式,第二次只是增加了负数楼层,修改了一部分参数,因此一起总结 ...

  6. 我永远爱着OOP——第二单元作业总结

    第二单元的电梯真是愉♂快呢,多线程编程作为java编程OOP中的重要组成部分,通过这一个单元的学习,我也是有了很多全新的认识 那么下面就先例行一下公事 三次作业分析 第五次作业 设计分析 实现的电梯是 ...

  7. 2019OO第二单元总结

    (1)设计策略 电梯第1次作业是一个傻瓜调度电梯,使用先来先服务原则,不用考虑捎带(可以认为电梯的载客量为1),因此比较简单,调度器用一个队列就可以. 使用生产者-消费者模型,输入线程是生产者,电梯是 ...

  8. oo第二单元作业总结

    oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...

  9. OO第二次博客作业--第二单元总结

    第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...

随机推荐

  1. JDBCUtils,根据当前MySQL数据库下面的表生成java实体类

    自己简单写的JDBCUtils,可以根据当前数据库下面的表生成java实体类,代码萌新,请多多包涵. 初始化配置: //驱动程序名//不固定,根据驱动 static String driver = & ...

  2. selenium 鼠标滑动操作验证码

    selenium 鼠标点击操作比较简单,这里就不介绍了,主要说一下鼠标滑动(按住并滑动),经常用于解决自动化操作的滑动验证码 下面举个简单的例子,比如这种验证码: 代码: div = driver.f ...

  3. python--爬虫(XPath与BeautifulSoup4)

    获取页面内容除使用正则意外,还可以使用XPath,其原理是将html代码转换为xml格式,然后使用XPath查找html节点或元素. 选取节点 XPath使用路径表达式来选取XML文档中的节点或节点集 ...

  4. Ubuntu16.04安装Vmware Tools

    开启虚拟机 安装VMware Tools 在虚拟机名称上,右键>>安装VMware Tools 此时,Ubuntu会提示已经插入光盘,并弹出文件管理页面. 此时我们打开终端查看分区挂载情况 ...

  5. 2015蓝桥杯分机号(C++C组)

    标题:分机号X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如:751,520,321 都满足要求,而,766,918,201 就不符合要求.现 ...

  6. 统计分析_集中趋势and离散程度

    1.数组的集中趋势-如何定义数组的中心 1.1 常用几下几个指标来描述一个数组的集中趋势 均值-算术平均数 . 中位数-将数组升序或降序排列后,位于中间的数. 众数-数组中出现最多的数. 1.2 指标 ...

  7. app扫描二维码登陆

    先说明一下实现原理: 如同微信扫描登陆一样,就是一种pc的自动登陆授权.在网站首页得有切换登陆的选项:密码登陆 扫码登陆 当用户切换到扫码登陆时,向服务器请求一次获得一个唯一的uukey 利用这个uu ...

  8. Linux c++ vim环境搭建系列(6)——CMakeLists.txt多文档多目录组织方法和编写示例

    CMakeLists.txt学习 1. 概要 主要是关于cmakelists.txt的编写模板,和多文档多目录的组织方法详解, 涉及第三方库的添加使用方法. 这里主要介绍cmakelists.txt的 ...

  9. 加锁的位置 (eq:map<key,map<>> 双集合 怎么 只加锁 在用到的对象位置,而不是把整个集合锁住)

    比如上边的map里套map 定义变量为data,例如组队副本 npc 为1 下有众多房间 即Map<1,<roomId,room>> ,处于多线程下,一个线程在 npc为1的下 ...

  10. Bat 脚本学习 (基础篇)

    [转]Bat 脚本学习 2015-01-05 14:13 115人阅读 评论(0) 收藏 举报 基础部分: ============================================== ...