本单元构架设计

统一建模语言(英语: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的更多相关文章

  1. 面向对象第四单元(UML)总结

    OO第四单元 一.总结本单元两次作业的架构设计 第一次作业 架构 第一次作业只有类图,所以全部的UmlElement都可以放在MyUmlInteraction中进行存储.计算和查找.对于类图来说,可以 ...

  2. 2019年北航OO第四单元(UML任务)及学期总结

    第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...

  3. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

  4. 2020 OO 第四单元总结 UML

    title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...

  5. 面向对象第四单元(UML)及期末总结

    前言 统一建模语言(英语:Unified Modeling Language,缩写 UML),是软件架构设计建模和规约的语言. 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功 ...

  6. 面向对象程序设计第四单元总结(UML系列)

    2019面向对象程序设计第四单元总结 前言 ​ 本单元是面向对象程序设计课程的最后一个单元了,本单元是和UML模型相关,也就是说,我们需要正确理解UML模型的基础上,对构建出的UML模型进行解析,但是 ...

  7. OO第四单元总结——查询UML类图 暨 OO课程总结

    一.本单元两次作业的架构设计总结 作业一.UML类图查询 1. 统计信息图 2. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设计复杂度(Module Des ...

  8. OO第四单元(UML)单元总结

    OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...

  9. BUAA_OO第四单元总结性博客作业——UML(Floyd实现规则检查?)

    一.架构设计 1.UML第一次作业——类图 第一次作业基于不同element在UML规格中的从属关系来设计架构.继承了UmlInteraction接口的MyUmlInteraction类是主要的交互层 ...

随机推荐

  1. 鼠标按下改变RelativeLayout背景颜色,松开变回

    在drawable下创建bg.xml文件 <?xml version="1.0" encoding="utf-8"?> <selector x ...

  2. 美团点评CAT监控平台研究

    1. 美团点评CAT监控平台研究 1.1. 前言 此文根据我对官方文档阅读并记录整理所得,中间可能会穿插一些自己的思考和遇坑 1.2. 简介 CAT 是基于 Java 开发的实时应用监控平台,为美团点 ...

  3. Spring Boot加载application.properties配置文件顺序规则

    SpringApplication会从以下路径加载所有的application.properties文件: 1.file:./config/(当前目录下的config文件夹) 2.file:./(当前 ...

  4. 创建简易的SpringBoot项目

    创建简易的SpringBoot项目 这两天在学习springboot,菜鸟刚刚知道这个东西,看着springboot项目下那一大堆目录都不知道从何下手,还是静下心来从最简单的创建一个项目入手,这路和大 ...

  5. 【Spring Cloud】Spring Cloud之Spring Cloud Sleuth,分布式服务跟踪(1)

    一.Spring Cloud Sleuth组件的作用 为微服务架构增加分布式服务跟踪的能力,对于每个请求,进行全链路调用的跟踪,可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等. 二 ...

  6. 《linux就该这么学》课堂笔记04 常用命令cat、mor...tar、find

    本节命令汇总 命令 说明 格式 常用参数 实例 备注 cat 查看纯文本文件(内容较少) cat [选项] 文件名称 -n 显示行号 cat -n install-setup-ks.cfg 查看ins ...

  7. docker学习8-搭建nginx环境

    前言 使用 docker 搭建 nginx 环境 下载镜像 使用docker pull 拉取最新的 nginx 镜像 [root@yoyo ~]# docker pull nginx Using de ...

  8. 快速了解前端打包 webpack

    一.介绍 (1)概念 webpack 用于编译 JavaScript 模块,是 JavaScript 静态模块的打包工具.从 webpack v4.0.0 开始,可以不用引入一个配置文件. (2)核心 ...

  9. DecimalField的使用

    DecimalField类DecimalField(max_digits =无,decimal_places =无[,**选项])固定精度的十进制数,在Python中表示一个 十进制的实例.有两个必需 ...

  10. 动态创建form 完成form 提交

    document.body.appendChild(jForm) won't work because jForm is not a dom element, it is a jQuery objec ...