2018-北航-面向对象567次OO作业分析与小结

设计策略及其变化

第五次作业-多线程电梯

在这次作业一开始的大部分时间,我一直想着怎样设计最为完美,完全使用BlockingQueue,导致交作业前发现设计并不能满足指导书的要求。最后仓皇之中加了一个新的类,既臃肿,又是轮询实现,导致出现了bug。

第六次作业-IFTTT

这次作业采用了不同照snapshot的方式实现,由于对指导书理解有些问题,导致出现了一个未考虑的情况。这次作业中线程安全的文件类的设计加深了我对线程安全以及Java文件操作的理解。

第七次作业-出租车调度

这次主要使用了锁来实现线程安全,我的地图类有放置等待的请求和找最短路两个功能,寻找最短路是没有安全问题的,而放置请求需要线程安全。其他的部分都和以前类似。

基于度量的分析

第五次作业-多线程电梯

这次作业在OO度量的表现上其实还不错,也是因为前期花了不少时间去设计,但是最后却发现设计中有一个没考虑到的地方会导致不符合题意,因此最后只能匆忙改变了设计,增加了一个不断轮询然后向电梯发送请求的Work Thread,这样的做法其实还是不怎么好的。

第六次作业-IFTTT

类的设计还是不错的,采用了不断拍摄“快照”,再对比快照的方式。这里比较有意思的是文件安全类,使用了一个HashMap,以绝对路径为key,以File对象为value,获取文件只能通过静态方法getFile,从而不会出现有两个File对象指向同一个文件的情况。

在线程安全方面,还是采用了BlockingQueue解决一切问题的方法,比如监控器向负责输出文件的类传递信息都是使用BlockingQueue。这种方法简单,而且也保证了线程安全,不错!

第七次作业-出租车调度

这次作业就比较烂了,其实一开始还是花了不少时间来分析的。例如为了不开上百个线程,我让两个线程CarsController和RequestDispatcher分别负责调度所有的出租车和请求。另外一个RoadMap类负责放置请求和寻找最短路。总体设计比较合理,但是细节上出现了很多问题,例如从上图中可以看到,各个类的耦合程度相当高,而且主线程似乎没什么用但又不能去掉,有一种食之无味弃之可惜的感觉。

bug分析

第五次作业-多线程电梯

我方:

被找了一个bug,是由于之前所说,最后时刻发现设计问题然后匆忙改正,导致出现了bug。

我采用了一个特殊请求作为程序结束的标志,所有线程拿到该请求后之星完手中的活后结束。而我写的用于分配请求的轮询线程由于没有考虑清楚,可能把所有的结束请求发给一个电梯。

对方:

对方的时间模拟似乎是以1s为单位,不知道为什么会这样,但确实避免了一些bug。其他方面,他在捎带请求方面出现了一些问题,均已被发现。其实我是当做黑盒测试的。

第六次作业-IFTTT

我方:

这次作业虽然互测没有bug,但是公测出了3个错误,这是由于这次作业会出现很多边界情况,而我又懒得去管,认为没有人会闲到去测这些,没想到却被测试了。bug就是有多个文件时我不能他们变更时的一一映射关系,实际上要实现并不难,也是懒惰造成的。

对方:

对方的程序写的不错,我也没找bug,实际上对方的代码也会出现我的那个错误,但我并没有报上,其实也是因为一开始并不任务这是一个错误。

第七次作业-出租车调度

我方:

这次被找出来5个bug,虽然确实有很多失误,但是也有一些bug我认为是不合理的,因此现在也正在和对方交涉。其中一个bug是我在为出租车安排任务时的距离信息是直接计算了曼哈顿距离而非BFS得到的最短距离。还有一些bug可以说是压力测试了,我的程序确实写的很烂,被测出来也情有可原。

对方:

对方有一个比较明显的bug,就是在增加信用时在乘客刚上车时就进行了。

另外我还报了一个设计错误——对方的出租车的状态分别用int型变量表示,这显然可以由枚举变量代替。

心得体会

实际上到了第六次作业之后,我便渐渐没有耐心认真完成作业了。一方面是因为好好写作业真的需要很多时间,一不小心就把一周大部分的空闲时间搭进去了,而最后的结果可能不错,但你甚至不知道是对方懒得测你的还是你的程序真的写的好。第二点就是每次作业感觉还是有一些同质化,第一次使用正则表达式,第一次互测,第一次写多线程都还是很有乐趣的,但现在兴奋点越来越少了。

怠惰的结果就是后两次作业的结果很差,对于之后的3次作业,我还是希望自己能好好对待。在策略上,首先是要早点开始,就算花的时间一样,早点开始也能给自己一些回旋的余地。另外issue虽然重要,但还是要抓住作业的重点,而不要陷入无尽的对细节的纠结中,好好写好代码才是最重要的。

原文地址:https://www.cnblogs.com/qianmianyu/p/8981661.html

时间: 2024-08-06 21:42:19

2018-北航-面向对象567次OO作业分析与小结的相关文章

软件工程(2018)第三次个人作业

软件工程(2018)第三次个人作业 前方高能:本次作业中含有大量基础知识,请不要嘲笑我QAQ 第三次作业来了.选择看似相比有难度的(1)(其实是看不懂(2)在干什么) 题目要求:题目(1):最大连续子数组和(最大子段和) 背景 问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+-+a[j]},1

四月份OO总结分析

从上个月的三次作业有惊无险,几乎完美过关,顺带完成了OS实验,到这个月的三次作业全都功亏一篑,三个无效,还没时间做OS实验--如果忽略这是我的经历这一事实,我绝对会感叹人生无常,同时对这位同学报以怜悯同情之心,外加猜测这位同学这整月一定过得很舒坦,得此结果也算是报应不爽. 可惜啊,这就是我的经历,我没有资格去当旁观者,去感慨去怜悯去猜测.所幸,我还能平静地写下这份总结,还能冷静地思考一些我以前从未思考过的事情.关于思考感悟之类的东西暂且不提,且先把总结分析任务完成. (1)多线程的协同和同步控制

软件工程(2018)第3次团队作业

软件工程(2018)第3次团队作业 题目要求 参考发到群里的<软件需求规格说明书>范本,撰写本团队的软件需求规格说明书 不要照抄范本的内容,请参考它的形式,紧密结合本团队项目实质展开 使用UML工具进行描述,并保证符号.描述语言的一致性 请大家将报告发布在 "石墨文档" 中并将文档链接发布到博客中 推荐大家使用 https://www.draw.io 网站绘制UML图形 强烈推荐大家使用墨刀制作项目的原型 总结 通过这次对<软件需求规格说明书>的编辑,充分了解的

OO作业总结第二弹

这个四月,多线程电梯,IFFF文件管理,出租车系列作业之--version1.(鬼知道我经历了什么......) 不用说,三个作业都不是什么省油的灯(白眼).那先从电梯系列作业终极版--多线程电梯说起吧. 因为之前的电梯程序我写的并不好,在之前的两个版本中我也没对代码做大篇幅的改动,所以各种设计缺陷累积起来,旧的代码怕是扛不住多线程的折腾了,所以我干脆重新架构写了一份全新的多电梯调度作业.大概的设计就是把请求类用继承的方法衍生出了电梯请求和楼层请求这两个子类,似乎比较方便判断和管理:电梯类里面是

《面向对象程序设计》——寒假作业3

Deadline: 2017-02-18 22:00pm 题目基础描述: 编写一个能对0--10之间的整数进行四则运算的"软件",提供给小学生使用的自主四则运算练习程序. 程序能接收用户输入的整数答案,并判断对错 程序结束时,统计出答对.答错的题目数量. 补充说明: 0--10的整数是随机生成的 生成题目数量由用户输入 要求生成混合运算,如(5 - 4 ) * (3 + 8) =? 题目生成后由用户输入答案 用户用键盘输入一个字符来结束程序的运行并显示统计结果,比如输入e程序结束并显示

抽象之艰难,一次作业分析

1. 问题的提出,一次作业 要求实现 小学四则运算系统,系统出10道题,用户输入答案,系统判定对错,系统给出对错的数量. 这是以邹欣老师的<构建之法>作为教材,某高校的软件工程课程作业. 该作业要求迭代开发,在<构建之法>群里,企业的工程师.高校教师对某次某位同学提交的作业进行了点评. 这位同学提交的是 JAVA GUI 版本的程序.控制件的选择,每道题的两个数是文本框禁用,要求用户输入答案处是文本框,判断对错是文本框禁用:选择加减乘除题目,是按钮. 该同学实现了出10道题目.问题

面向对象第五次作业

本次作业大家可以先行尝试思考下具体应该设计几个类,每个类的数据成员和成员函数是什么,然后尝试着实现一下,代码本周不用上交. 问题描述:有品牌汽车的风挡玻璃雨刷(Wiper)是由带刻度盘(Dial)的控制杆(Lever)控制的.这种控制杆有四个位置:停止.间歇.低速和高速,刻度盘有三个位置,分别是数字1.2和3.刻度盘位置指示三种间歇速度,刻度盘的位置只有当控制杆在间歇位置时才有意义.以下表格给出了挡风玻璃雨刷对应控制杆和刻度盘的工作速度(每分钟摇摆次数): 控制杆 停止 间歇 间歇 间歇 低速

&lt;Spark&gt;&lt;Spark Streaming&gt;&lt;作业分析&gt;

Intro 这篇是对一个Spark (Streaming)作业的log进行分析.用来加深对Spark application运行过程,优化空间的各种理解. Here to Start 从我这个初学者写得一个Spark Streaming程序开始... package com.wttttt.spark /** * Created with IntelliJ IDEA. * Description: * Author: wttttt * Github: https://github.com/wttt

【重磅】2018中国八大前沿硬科技产业分析

十九大报告提出:加快建设创新型国家,要瞄准世界科技前沿,强化基础研究,实现前瞻性基础研究.引领性原创成果重大突破.加强应用基础研究,拓展实施国家重大科技项目,突出关键共性技术.前沿引领技术.现代工程技术.颠覆性技术创新,为建设科技强国.质量强国.航天强国.网络强国.交通强国.数字中国.智慧社会提供有力支撑,并且强调“必须把发展经济的着力点放在实体经济上”. “2017年全球硬科技创新大会”首次发布了<中国硬科技领域白皮书>,该白皮书从“硬科技”是什么.到底“硬”在哪里.现有发展状况和发展趋势等