本单元构架设计

统一建模语言(英语: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. powershell 远程下载并执行

    远程下载文件到本地并执行cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-ob ...

  2. python绘图 转

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

  3. 使用Matplotlab画图

    1.绘制折线图 #! /usr/bin/env python#encoding=utf-8 # 用于python2import sys reload(sys) sys.setdefaultencodi ...

  4. JAVA线程池的创建与使用

    为什么要用线程池? 我们都知道,每一次创建一个线程,JVM后面的工作包括:为线程建立虚拟机栈.本地方法栈.程序计数器的内存空间(下图可看出),所以线程过多容易导致内存空间溢出.同时,当频繁的创建和销毁 ...

  5. lvs+keepalived高可用负载均衡

    一.实验环境和网络拓扑图 本实验需要5台虚拟机,一台客户机,2台lvs调度器,两台web服务器. 客户机:192.168.0.6/24 lvs1:192.168.0.201/24 lvs2:192.1 ...

  6. 将python图片转为二进制文本的实例

    https://www.jb51.net/article/155342.htm 写在最前面: 我在研究机器学习的过程中,给的数据集是手写数字图片被处理后的由0,1表达的txt文件,今天写一写关于图片转 ...

  7. python的sort和sorted

    sort 只适用于列表,返回列表类型. sorted 可适用于字典,元组和列表. 使用方法 sort的使用方法是list.sort(cmp=None, key=None, reverse=False) ...

  8. js动画--一个小bug处理下

    对于上面的课程我们很好的处理了一个小bug,那么我们现在讲程序进行优化一下,前一节的程序中,我们处理处理的属性都是写死了的.为了我们能够很好的对某个属性进行操作的话.我们这样来设置. js文件 win ...

  9. Ofbiz项目学习——阶段性小结——视图

    一.简要介绍 1.按照SQL的视图概念:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表.视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 2. ...

  10. 无向图边双联通分量 tarjan 模板

    #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005 ...