学习了之前在写代码是从来没有见过的多线程之后,便迎来了此次电梯作业.说实话,这次作业做得十分的辛苦,虽然在前三次作业中领悟到了java面向对象的精髓,但是再加上了多线程之后,又开始理不清思路,对自己的代码胡诌八扯了.但是欣慰的是,在最后两次作业中,我仿佛领悟到了多线程正确的写法. 1.1 第一次作业 1.1.1 类图 其中,main函数是主函数,controller是调度器,用来解决输入并且根据输入给予电梯命令,Elevator是电梯线程,用来解决controller所给的命令.Mam函数是专门…
1.梳理JML语言的理论基础.应用工具链情况 JML基础理论: JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言,基于Larch方法构建.JML可以为严格地程序设计提供一套行之有效的方法.通过JML及其支持工具,不仅可以基于规格自动构造测试用例,并整合了SMT Solver等工具以静态方法来检查代码实现对规格的满足情况. 从我个人的理解上,JML语言以简洁严谨的形式描述了代码规格要求,有利于代码的规格化设计,实现…
前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素进行抽象化建模,帮助开发者更高效地理解大规模.复杂系统的模型,这对于理清对象之间的关系.设计对象的架构具有重要的意义. 在本单元的学习中,主要包括StartUML工具的使用以及对UML文件的解析,主要目的都是让我们更深入地了解各种元素的结构和组织方式,以及检验模型有效性的原则.StartUML是一款…
第二单元第一次作业 多线程设计策略 第一次作业的想法是设计三个线程:输入线程,调度器线程以及电梯线程.输入线程获取请求并发送给调度器线程:调度器线程通过查询电梯线程的状态(等待.停靠以及移动),并综合已有的请求为电梯线程分配目标:电梯线程根据分配到的目标进行移动,并进行上下乘客操作. 为了这么做输入线程与电梯线程有一共享变量requestQueue用以保存请求,调度器线程与电梯线程有一共享变量taskQueue用来保存电梯的移动目标.这种设计的初衷是让不同线程尽量只干自己该干的事,即输入线程负责…
JML简介及相关工具链使用 1.JML规格描述语言介绍 本单元学习的内容是JML规格描述语言.我们知道,面向对象方法是一个抽象过程,需求者仅需关注方法的规格.规格是对一个方法/类/程序的外部可感知行为(语义)的抽象表示,内部细节无需在规格中表示 , 同时需保证规格实现的无二义性.JML规格描述语言使用javadoc注释的方式,为严格的程序设计提供了一套行之有效的方法. JML每行都以@起头.有两种注释方式,行注释和块注释.其中行注释的表示方式为 //@annotation ,块注释的方式为 /*…
目录 总 架构 controller model view 优化算法 Look 算法 多种算法取优 预测未来 多线程 第五次作业 第六次作业 第七次作业 代码静态分析 UML 类图 类复杂度 类总代码规模 属性个数 方法复杂度 方法个数 方法规模 控制分支数目 优缺点 优点 缺点 SOLID 原则 单一职责原则(SRP) 开放封闭原则(OCP) 里氏替换原则(LSP) 接口隔离原则(ISP) 依赖倒置原则(DIP) 多线程协作 UML 图 分析 线程间通信 并行任务的独立性 坑 多线程错误 Ma…
2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化程度.基本复杂度高意味着非结构化程度高,难以模块化和维护. Iv(G):模块设计复杂度,用来衡量模块判定结构,即模块和其他模块的调用关系.模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离.维护和复用. v(G):模块判定结构复杂度,数量上表现为独立路径的条数. 从上面三张图可以看出,整体上3个…
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是从0积累的一个过程.每一步,都走得很艰难!虽然我犯过很多错,但我很庆幸,我坚持到了最后! 写在前面 单线程:Java程序在虚拟机上运行,一个Java程序对应一个JVM实例,同时对应一个主线程(即main),程序入口从main进入,运行完毕从main退出. 多线程:顾名思义,即不止一个main线程,m…
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类.每个子类存储相应的UmlElement,以及需要保存的信息.比如,Class类里保存着这个类的属性.方法以及关系.父类.实现的接口等信息. Element抽象类有一个put方法,用来建立“关系”.比如,将属性.方法放到对应的Class里. 建立每个类的时候使用工厂模式,这样在做第十四次作业的时候只…
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅需补充查询指令相关实现.本单元的三次作业是彻底的增量开发,没有对先前的作业做任何改动,因此仅分析第三次作业的架构设计. 由于本单元作业数据量较小,性能要求较低,因此并没有采取按照元素的属性和归属进行建树或建图的方法,而仅暴力存储了每一元素的相关信息并在查询时不断遍历,架构较为简单,类图如下(仅选取自…