设计策略及其变化 第五次作业-多线程电梯 在这次作业一开始的大部分时间,我一直想着怎样设计最为完美,完全使用BlockingQueue,导致交作业前发现设计并不能满足指导书的要求.最后仓皇之中加了一个新的类,既臃肿,又是轮询实现,导致出现了bug. 第六次作业-IFTTT 这次作业采用了不同照snapshot的方式实现,由于对指导书理解有些问题,导致出现了一个未考虑的情况.这次作业中线程安全的文件类的设计加深了我对线程安全以及Java文件操作的理解. 第七次作业-出租车调度 这次主要使用了锁来实…
基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此花费了一些时间了解,并在这里总结. Complexity Metrics(复杂度分析) 这部分我们需要使用的主要是方法和类的复杂度分析. 方法的复杂度分析主要基于循环复杂度的计算.循环复杂度是一种表示程序复杂度的软件度量,由程序流程图中的"基础路径"数量得来. ev(G):即Essenta…
1. 规格设计的发展历史 规格设计用于对程序设提供分解,抽象等的手段.在撰写代码规格的时候,需要对组成部件进行抽象. 在1960s,软件设计出现危机,例如Dijkstra提出了goto语句的种种危害,引发了软件开发领域长期的论战,并且在这时候产生了结构化程序设计方法,例如Pascal语言在1970s占据有统治地位. 之后,随着计算机软件规模日渐庞大,结构化程序设计方法开始无法满足用户的需求,面向对象程序设计(OOP)应运而生.面向对象程序设计是一场重大的革命,提高了开发人员的效率,有效的控制了软…
OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作. 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些.(点击就送指导书~) 类图 程序的大致结构如下: 代码分析 可以看出,整体的功能还是相对零散的,耦合状况也基本还可以.然而类似Main.main.Polynomial.Polynomial两个函数的复杂度仍有点高.笔者后来查阅了阿里Java开发规范手册,发现两个问题: 单个方法的长度不宜过长,入口点方法(Main.main)也是一样 不宜在构造函数中携带过多…
不知不觉又做了三次作业,容我在本文胡言乱语几句2333. 第五次作业 第五次作业是前面的电梯作业的多线程版本,难度也有了一些提升.(点击就送指导书) 类图 程序的类图结构如下: UML时序图 程序的逻辑时序图结构如下: 代码分析报告 可以看出,这次的程序依然存在部分类或方法代码较为集中的情况,这样的情况在类Lift.LiftController,甚至笔者自己的第三方库DebugLogger中较为明显.甚至在Lift和LiftController类中可以发现其实业务逻辑已经非常的密集. 公测 我方…
前言 在经过了三次艰辛的oo作业后,oo课程的第一单元告一段落,这一单元,我作为一个oo小白,开始了解oo的编程思想,也有了自己的一点心得体会.把笔粗成字,不当之处,还请各位大佬多多指教. 一.分析程序结构 第一次作业: 在第一次作业中,由于刚刚开始接触oo的思想,我还不是很了解面向对象的编程方法,还是按照c语言的思路,将deriviation作为main函数,在deriviation中调用number类,完成运算. 具体的操作思路,则是使用正则表达式构造出因子与项,通过正则式匹配来得到每一个项…
类的设计: 首先,我对我的思路进行整体的说明,由于我的三次作业,思路是继承的,所以做总体的说明 第一,   Main类,Main类自身并没有功能,他的功能只是构造需要的电梯线程和输入线程. 其中,第三次作业中,main类负责将电梯参数(运转时间,负载上限,运行楼层)传入Memory类和Elevator类 第二,   是Eleinput类,这个类,是一个单独的线程,功能是读入需求,每次读入需求,将其写入Memory类中,当读入null时进程结束. 输入器,与电梯类不相连,只负责传数据给Memory…
1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体信息(当然这个类的形式可能是结构.map等等,但核心思路大体一致).在设计这个类的时候,大多数同学都遇到了困难,耗费了大量的时间精力. 下面我来讲一下,我的第一次作业的架构设计: 最开始,我查看方法描述,考虑如何实现方法的时候,惊喜的发现,UMLelemet数据类型的对象是可以实行操作的!这样一来,…
一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确的方式然后又一步步的判断所有错误的方式,由于没有采用正则表达式,导致代码冗长,写了很多的if else循环导致嵌套过多.执行的次数大大的增加,使得程序的维护十分的困难. 类图分析: 第一次作业所创建的类很少,一个储存多项式的类和一个多项式集合的类.所有关于输入的判断全部都放入了一个类里面这就导致了前…
面向对象第三次作业总结 一.JML基础梳理及工具链 注释结构 行注释://@annotation 块注释:/*@ annotation @*/ 两种注释都是放在被注释部分上面. 常见表达式 原子表达式 \result表达式:表示一个方法执行所获得的结果,即方法执行后的返回值.这里此表达式的类型根据被注释的函数的返回值而定. \old(expr)表达式:用来表示一个表达式expr在相应方法执行前的取值.当expr有被修改时,使用此表达式,表示expr被修改之前的值.这里有一点需要注意,对于一个引用…
概述 经历了三次oo作业的洗礼,让我对java语言的强大以及面向对象编程有了初步的理解(当然,我是小白).本文接下来就将对自己这三次作业的代码进行分析以及分享自己的心路历程. 基础知识点考核 针对前三次作业,我列出了这其中涉及到的主要的知识点: java基础语法 java正则表达式(注意不要爆栈) 对java封装.继承.多态.接口的理解 程序的构思能力 当然,还有最重要的还是阅读和理解指导书的能力,能够在较短的时间内准确无误的理解指导书的意图也是必需的能力之一. 程序结构分析 作业一:多项式计算…
oo第一次博客 以前从未真正的写过Java代码,接触Java也只是寒假的时候简单的看了看语法,不懂该如何面向对象,但没事,心里不惧,想着什么都是可以学的(直到真正开始写工程的时候,才发现自己还是太天真了),就这样开始了OO学习这条不归路. 一.三次作业的实现过程分析 第一次作业 第一次作业是多项式加减运算,首先我用c语言写了一遍,基本熟悉题目的具体要求,当用Java去写时,我遇到了下面一系列的问题(具有难度等级): 1. 该如何划分类,如何面向对象编程: 2.正则表达式是什么: 3.该如何用Ja…
前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 它将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 实现封装的方式:使用访问控制符 private 在当前类中可访问 default     在当…
作业概述 作业1:多项式加法 第一次作业理解上并不困难,简言之是一个多项式合并同类项,但对于我这个第一次使用java进行编程的小白,还是充满了血和泪. 在这次课程之前,我稍微对java有一些了解,但也仅仅只是一些了解,不仅许多基本语法还不清楚,而且对于面向对象更是毫无头绪.好在java的语法与C语言比较相似,所以在第一次作业的时候,简单学习了java的基本知识后(甚至包括如何在eclipse中新建java项目,怎么运行java程序),一边百度,一边写出了第一次作业,但写出来的东西就又引出了另外一…
测试与正确性论证 测试是通过构造一系列测试数据,通过对比程序的实际运行结果和预期输出结果来判断程序是否有bug的一种手段.同时,在测试的时候是默认看不到程序的具体实现的,即进行黑盒测试,例如每次OO作业的互测阶段.测试的具体方法是将输入进行划分,通过构造一个错误分支树,然后每个分支构造一个或多个测试样例来对程序进行测试.其手段简单,易于实现,通常情况下可以覆盖大多数情况.但也可以看到通过测试的话是需要大量的测试数据的,如果在输入很麻烦的情况下,需要花费大量的时间.同时,就算所有的测试输入都是正确…
概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度量图工具出了故障一直无法生成请原谅). 设计简介 第五次作业 这是oo课程第一次多线程作业,我自己也体会到了它的难度.我的设计思路是首先够早一个调度器类(以上类图的scheduler类),负责管理各种实时输入的指令,然后是有三部电梯在各自独立的运行着,每当有新的指令输入时,首先判断是否是同质指令,然…
一.博客作业内容 2018上IEC计算机高级语言(C)作业 第3次作业 二.评分规则说明 1.程序调试题,要描述出调试所遇到问题及修改内容,并表述清楚程序功能.流程图不规范的会减1-2分: 2.知识点,给出各知识点的例程及运行截图. 3.改进中未写明每天编码时间与代码行数的,减1分: 只说没有时间,但又没有下一步具体措减6分 . 三.Pta答题情况 整体情况不乐观,作业完成情况不达标. 四.成绩情况 1.博客作业条形图 2.博客作业各考察点得分情况表 3.千帆竟发图 五.总结 1.完成本次博客作…
2018上IEC计算机高级语言(C)作业 第3次作业 一.例程调试(20分) 调试下面2个例程,各位同学调试用自己的学号模3(即除以3取余数)加1序号及该序号乘以2的题.写明调试过程,如错误现象(如给定输入数据,但输出未实现预计功能),编译错误(截小图)提示等,写明调试修改过程(10分); 说明:有可能没有错误提示,但未达到预计功能.题目来源为" C语言程序设计实验与习题指导(第3版)调试源程序"中error07_1~6:利用Autoflowchart软件查看程序的流程图,将流程图导成…
THE LAST ONE!! 2017<面向对象程序设计>课程作业八 031602230 卢恺翔 GitHub传送门 题目描述 1.时间匆匆,本学期的博客作业就要结束了,是否有点不舍,是否还想继续迭代优化你们计算器项目的作业呢?本学期最后一次博客作业,请大家描述: 从寒假到这次结束,经历的博客及编码作业的过程; 通过博客作业学到的知识.理论或技能: 博客作业结束时的感受: 暑假要如何规划,请立下你们的flag. 2.请将第六次博客作业中学习到的界面编程运用到本学期的面向对象计算器项目中. 作业…
2018上IEC计算机高级语言(C)作业 第2次作业 一.例程调试(20分) 调试下面1个例程,各位同学调试用自己的学号模4加1序号的题,写清错误提示(截小图)及修改内容(10分); 说明:有可能没有错误提示,但未达到预计功能.,题目来源为" C语言程序设计实验与习题指导(第3版)调试源程序"中error04_1~4:利用Autoflowchart软件查看程序的流程图,将流程图导成word格式,加入必要的文字说明,并说明该程序的功能(10分) 2. 该程序是计算正实数eps并计算s=1…
[2018福大至诚软工助教]alpha阶段小结 一.得分 1. 冲刺(7次 Scrum) 150分 1)第1篇(25分) 项目 评分标准 各个成员在 Alpha 阶段认领的任务 (6分)视详细程度给分 整个项目预期的任务量- 与项目预估的总工作小时数一致.比如项目A预估需120小时才能完成,则任务量为120 (4分) 团队成员贡献值的计算规则 (5分)视合理程度给分 当天站立式会议照片一张 (2分)有则给分,若周期内出现重复照片则重复的作业扣除这部分分数 明日各个成员的任务安排 (2分) Lea…
[2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队分工 (5分) 描述团队的每个成员分别完成了UML图的哪些部分,可以选择多种方式呈现. 泳道图 Leangoo的看板 ... UML(只需要每个团队成员找到自己负责部分的核心或最复杂模块做UML练习) (36分) 用例图(必选)(9分) 类图(必选)(9分) 活动图(必选)(9分) 时序图(必选)(…
简介 本单元借助JML(Java Modeling Language),训练了我们关于的"规格(specification)"的意识和思想 本单元代码难度较低,简单来讲就是给你规定好明确要求来实现函数,因此自己不需要动脑子设计很多东西 在阅读本文时,我假设你已经了解了第三单元作业的内容 JML简介 Java Modeling Language是一种对java程序的形式化描述. 形式化描述就是不借助自然语言,而是借助严谨的程序化语言,对方法的输入输出.对象的取值范围等等做出规定.相较于自…
前言 这一单元关于线程安全的作业结束了,在助教提供的接口的帮助以及老师提供的设计模型的指导下,这三次作业还是相对轻松地完成了,中间也没有出现什么bug,可能就是因为简单的逻辑不容易出错吧,可惜两次都由于性能分与a组失之交臂,或许在后续作业中还是应该多在性能优化下做一些工作. 第一次作业 设计思路 这次参考了老师所给的生产者消费者问题,主要设计了电梯类,控制器类,输入器类,主类,电梯类只负责向调度器请求指令,并根据接收到的指令进行上下楼接送人操作,输入器类只负责接受指令并向调度器塞入指令,控制器类…
(1)从多线程的协同和同步控制方面,分析和总结自己三次作业来的设计策略及其变化. 第五次作业 第五次作业是对多线程的初步探索,所以对于多线程的基本书写机制的认识比较多.本次作业难点在于了解多线程的运作机制,努力构建线程安全的操作方式,合理构造电梯之间.电梯与请求之间的协作关系.值得注意的是电梯.乘客在问题域中具有并发行为: (1)电梯之间“竞争”响应请求:也即电梯共用一个请求队列,电梯之间对请求的处理不得重复.也不得有遗漏,这对于线程安全的要求是很高的 (2)乘客之间“竞争”使用电梯:满足捎带策…
一.梳理JML语言的理论基础 1.jml的注释结构 jml注释语言的每一行都以@作为开始,若是块注释,则需要在注释块的首尾使用/*@ 与@*/ 2.jml的表达式体系 1.原子表达式 表达式可以看作是一个原子类型,常见的有\result表达式(用于表达某个方法执行后的结果).\old表达式(用来表示某个对象执行某操作之前的值). 2.量化表达式 量化表达式是对给定范围内对象批量操作的表达式,其存在大大简化了jml语言,常见的有\forall表达式(范围内对象,都要满足某要求).\exists表达…
一.JML的理论基础应用工具链 JML是用于对Java程序进行规格化设计的一种表示语言.基于Larch方法构建. (1)注释 JML以javadoc注释的方式来表示规格,每行都以@起头.有两种注释方式,行注释和块注释.其中行注释的表示方式为//@annotation ,块注释的方式为/* @ annotation @*/ . (2)原子表达式 \result表达式:表示一个非void 类型的方法执行所获得的结果,即方法执行后的返回值.\result表达式的类型就是方法声明中定义的返回值类型.如针…
一.摘要 本文是BUAA OO课程Unit1在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.本文第二部分介绍三次作业的设计思路,主要以类图的形式展现,并有简单的优劣分析:第三部分为程序代码复杂度的分析(二.三两部分为基于度量的对自己程序结构的分析):第四部分为对自己.对他人程序的测试.DEBUG.Hack的思考:第五部分是分析作业中可以应用对象创建模式的可能性,和重构的思考. 二.开发设计思路 1.程序类图展示 第一次作业 第二次作业 第…
I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believing that it is a plot designed to destroy joy. Eric Allman 一.基于度量来分析程序结构 总体: 第一次作业:在两个类中处理了所有多项式的求导,一个主函数控制输入并且处理字符串,格式不正确时报错:另外一个处理多项式并且求导. 第二次作业:在第一次作…
作业十五 测试与正确性论证的效果差异 程序的测试需要通过输入特定数据等方式,检查程序是否和预期相同,因为测试不可能穷举,导致了不穷举的测试不可能验证程序是完全正确的,只能验证程序在测试时没有发生错误,尽管如此,测试依然是一种高效的检查程序的方法,通过输入数据或复现现场,直观的发现代码的问题,进而在代码中找到问题的来源并修正. 程序的正确性论证是在用户提出需求后,进行规格撰写后,论证程序是否符合规格的过程.因为规格往往是布尔型或自然语言,对程序员来说并不如代码和测试数据直观,且工作量巨大.但相应的…