【面向对象】第四单元总结——UML
本单元构架设计
统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
本单元作业的主要内容是对UML类图、状态图和时序图进行解析和查询,并依照某些规则对UML类图进行检查。其中,课程组已经做好了将原始UML导出文件,转换成为一系列可直接进行访问的类的工作,并提供了对整个文件中元素信息进行查询的未实现接口,我们需要做的工作即是实现抽象接口,以满足其预期提供的功能。
第一次作业——类图
第一次作业的基本思路是对UML_CLASS和UML_INTERFACE分别建立MyClass和MyInterface类,由于各元素id值唯一,故可将其保存在HashMap中,以便随时取用。较为复杂的是给Operation对象设定Parameter属性,由于各元素之间存在依赖关系,故在解析文件时需要注意先后关系,首先解析并保存类、接口对象,然后才是为他们添加关系联系。在查询方面主要采用递归深搜的思路即可完成。但因为某些原因,我在接口继承方面还是有一些判断失误,以至于在强测中显露出了一些bug。
构架图如下所示:

第二次作业——类图、状态图、时序图解析与规则检查
第二次作业在第一次作业的基础上增加了对状态图和时序图的查询功能,以及对整个文件中类图的默认规则检查,一旦不符合规则,则立即停止接下来对整个文件的查询,显示错误信息并退出程序。
对状态图和时序图的处理方法与对类图的处理方法类似,在读取文件时保存其中的关键对象MyState、MyInteraction入哈希表,并将相关属性内容添加给对应的主体对象。对于三条规则的验证,我分别创建了唯一的检查器RuleChecker1/2/3,在检查的思路方面,第一是解析类图元素时,将与规则相关的内容保存入检查器,第二是检查时主要采用的方法是递归深度遍历的方法,通过识别重复搜索的标志进行处理。
构架图如下所示:

在四个单元中架构设计及OO方法理解的演进
总的来说,由于我是重修生的缘故,所以在演进的过程上并没有感觉到成长性,或者说,没有那么强的成长性,并且由于四个单元的详细构架都已经在各自的单元博客作业叙述了,所以接下来我就简单谈一谈自己对各个单元的面向对象构架设计特点的理解。
第一单元的内容是多项式的求导,在这一部分中,由于功能明确,相互较为独立(加减乘除求导),逻辑结构较为明显的缘故,进行对象化的构架设计的思路是比较明确的,表达式、因子之类的。他们的关系是相互嵌套的,也就是说这是一个树形结构,在进行计算时必然会面临一定程度的深度递归,这是一个难点,但同时由于所进行的计算方法只有单一的功能,并且副作用很小,所以也不算是令人头皮发麻。另一个难点就是这单元同样还考察输入输出与正则表达式的相关知识和技能,所以在对表达式进行规则验证的时候,也会有一些难度。
第二单元的内容是多部电梯的调度,在这一部分中,由于系统的功能增加,复杂性上升,导致其在构架设计时所需要花费的时间多于第一单元,我们得明确电梯、调度器和乘客的关系以及各自应当实现的功能,当按键被按下时,这条信息究竟保存在电梯对象中还是保存在调度器中?调度器是只起到计算新来的乘客应当被分配给哪一部电梯的作用,还是操控所有电梯的运行?除此之外的另一个难点即在于多线程的相关知识与技能,在未良好掌握的情况下,会对完成作业产生阻碍。
第三单元的内容是理解JML规格,综合设计数据结构,在规定时间复杂度的限制条件下完成作业。在这一部分中体现了数据结构和对象为功能需求而设计的应用原则,理解JML规则难度不高。第四单元则与第三单元类似。
在四个单元中测试理解与实践的演进
在这四个单元的训练过程中,我主要在副作用静态检查、多线程动态检查和单元测试三个方面获得了一些进步。副作用静态检查是从第三单元JML规格中所得到的启发,通常来说,我写方法的时候是不会先认真地写上规格注释要求的,但这样的思路有助于在写完方法后进行代码的快速复查:我会不会在方法实现过程中修改了别的变量?这些修改过的变量在下一次运行该方法前需不需要清空?方法的副作用在第四次作业中让我产生了一些bug。多线程的测试方法我使用的更加熟练了。单元测试可以使用Junit对每个方法进行,并生成较为全面的测试集,虽然说这样做并不一定能发现隐含的设计逻辑偏误,但可以帮助我们发现一些隐藏的代码实现上的小bug。
课程收获
该课程对我主要有以下收获:
· 重修通过
· 获得设计与编程经验
· 学会使用更多的工具达成目标
· 克服恐惧,提升抗压能力
改进建议.
· 更多的代码分享与代码修正的时间:如果总是自己写啊写,那无异于闭门造车。
· 降低测试点耦合性:虽然一颗老鼠屎就能坏一锅汤,但我们无法否定这锅汤的劳动价值。
· 降低起点难度:虽然玩家的水平年渐提升,但仍有相当一部分玩家是从零开始。
【面向对象】第四单元总结——UML的更多相关文章
- 面向对象第四单元(UML)总结
OO第四单元 一.总结本单元两次作业的架构设计 第一次作业 架构 第一次作业只有类图,所以全部的UmlElement都可以放在MyUmlInteraction中进行存储.计算和查找.对于类图来说,可以 ...
- 2019年北航OO第四单元(UML任务)及学期总结
第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- 2020 OO 第四单元总结 UML
title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...
- 面向对象第四单元(UML)及期末总结
前言 统一建模语言(英语:Unified Modeling Language,缩写 UML),是软件架构设计建模和规约的语言. 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功 ...
- 面向对象程序设计第四单元总结(UML系列)
2019面向对象程序设计第四单元总结 前言 本单元是面向对象程序设计课程的最后一个单元了,本单元是和UML模型相关,也就是说,我们需要正确理解UML模型的基础上,对构建出的UML模型进行解析,但是 ...
- OO第四单元总结——查询UML类图 暨 OO课程总结
一.本单元两次作业的架构设计总结 作业一.UML类图查询 1. 统计信息图 2. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设计复杂度(Module Des ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- BUAA_OO第四单元总结性博客作业——UML(Floyd实现规则检查?)
一.架构设计 1.UML第一次作业——类图 第一次作业基于不同element在UML规格中的从属关系来设计架构.继承了UmlInteraction接口的MyUmlInteraction类是主要的交互层 ...
随机推荐
- jQuery函数与对象(一)
一.jQuery函数jQuery函数的两种表现形式:1.jQuery()2.$()说明:在jQuery中使用jQuery()与$()是等价的,一般情况下均使用$() jQuery函数中可以存放的四种参 ...
- Django:RestFramework之-------频率控制
5.频率控制 5.1频率监控代码实现 import time VISIT_RECORD = {} class VisitThrottle(object): def __init__(self): #定 ...
- psexec与wmi在内网渗透的使用
psexec是一个很好的管理工具,在内网渗透中也被广泛使用. 但太“出名”也往往会遭来各种麻烦. 在有安全监听.防护的内网中使用psexec会容易触发告警. 1.psexec用法(前提:对方要开启ad ...
- SAP技术 - How to create a CDS redirect view for a given database table
Scenario Suppose we have a database table A, and then we create a CDS redirect view B for it, then e ...
- 普通脚本调用django程序
#其他的脚本调用django中的程序 import os if __name__ == "__main__": #添加django项目的环境 os.environ.setdefau ...
- windows中的出站和入站规则
一.规则介绍 规则生效的前提是防火墙处于开启状态. windows系统默认的规则:默认阻止入站连接,默认允许出站连接.也就是说,凡是入站连接,任何程序和端口都要在防火墙上配置入站规则,否则都会被禁止. ...
- IDEA 创建类是自动添加注释和创建方法时快速添加注释
1.创建类是自动添加注释 /*** @Author: chiyl* @DateTime: ${DATE} ${TIME}* @Description: TODO*/2. 创建方法时快速添加注释2.1 ...
- ELK快速入门(五)配置nginx代理kibana
ELK快速入门五-配置nginx代理kibana 由于kibana界面默认没有安全认证界面,为了保证安全,通过nginx进行代理并设置访问认证. 配置kibana [root@linux-elk1 ~ ...
- 基于SCRUM方法实践的西油计科党建设计与实现-个人实践流程清单
基于SCRUM方法实践的西油计科党建设计与实现 个人实践流程清单 一.Alpha版本冲刺个人在SCRUM团队任务清单: 时间 我这个三天做了什么 实际解决燃尽图项目数量 我遇到了什么问题 我下一个三天 ...
- Fire Balls 03—— 多个圆环以及圆环的变速变向
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...