单元架构设计

本单元OO作业主要涉及两个过程,即先根据输入的elements数组建立UML存储模型,而后基于这个模型实现一系列查询判断功能。汲取上单元的经验,建模过程中模型数据容器的选择依据要求实现的查询判断功能而定,选择有利于加快查询判断速度的存储结构,总结归纳如下:

我所设计的建模算法只需对输入的elements数组进行一次遍历,速度较快。但所需解决的问题是,有些时候并不能根据输入的element确定UmlElement的类型,这时就需要诸多暂存的数据类型进行中间态存储(第一次作业中的Base即为UmlClass或UmlInterface的中间态,第二次作业中的Meta即为UmlEndpoint或UmlLifeline的中间态)。当出现能将中间态元素转化为确定的UmlElement的element时再将其“转正”。

这样的架构存在一定隐患,那就是在中间态元素“转正”时,其本身的属性自然容易拷贝,但指向它的指针却容易被遗忘,造成指针的失效。这个bug困扰我相当长的时间,而后通过维护一个指针Map解决。

【两次作业类图】

架构设计总结

第一单元的子任务是输入合法性检查和多项式模型的建立。合法性检查依赖正则表达式实现,多项式模型则由多项式的自然组分确定,分为项、因子、多项式等等。各部分的求导和输出依据各自特征进行。事实上,合法性判断也可以拆分到各个多项式组分中进行。

第二单元则是多线程架构的实践,掌握一些固定的多线程设计模式能有效保证线程安全、避免忙等。但由于时间紧张,我都是采取自己的简单理解以及强行加锁保证线程安全,牺牲了效率。

第三单元

第四单元

对OO的理解

在本课程的学习中,我并没有经历OO理解演进这样一个过程。从第一次作业起,我对OO的理解便是模块化设计。最强烈印证这个理解的是第一单元的最后一次作业——清晰地记得某天晚上想到逐级拆解的思路时十分激动,并迅速实现了代码。我认为OO包含模块设计及模块关系处理(接口)这两方面内容,这个理解似乎足以满足四次作业的设计要求。

测试演进

OO课程让我充分认识到完备测试之必要性,我的测试手段经历了如下演进:

脑海中随机生成数据(规律性极强,很难突破思维定式)

针对特殊情况(越界,个数为0等)构造测试集(无法稳定检测出结构问题)

手动构造尽量覆盖程序分支的测试集(分支较多时难以实现)

对于结果固定的程序,使用随机生成的数据对拍

课程收获

OO这门课让我对写代码有了全新的认识。写码前清晰的架构设计,写码时诸多细节的控制以及充分的测试对于一个工程来说都非常重要,缺一不可。另外,通过这门课我了解了面向对象这种强大的实现方式,其优势便是将巨大的project拆分为可解的部分实现,用这种breakdown的处理方式解决计算机问题往往非常有效。正如Butler Lampson所言:”All problems in computer science can be solved by another level of indirection.”

改进建议

由于一周时间十分紧张,往往不敢尝试固定的设计模式而自行摸索。建议课上内容增加对设计模式的讲解,或给出更为明确的参考资料。

建议给出自动测试的实现思路。

OO第四单元总结的更多相关文章

  1. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

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

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

  3. OO第四单元总结及课程总结

    OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...

  4. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  5. OO第四单元总结及学期总结

    目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...

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

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

  7. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

  8. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  9. 2020 OO 第四单元总结 UML

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

  10. OO第四单元总结与课程总结

    OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...

随机推荐

  1. python web开发之flask框架学习(1) 创建flask项目

    python 开发越来越火,作为菜鸟,也应该学习一下,感觉还可以,记录下来,方便学习参考. 不管做什么开发首先肯定是安装环境,这里我用的是pycharm,python3.如果不清楚怎么安装环境可以去网 ...

  2. javascript中的Set和Map数据结构

    Set数据结构 类似数组,所有的数据都是唯一的,没有重复值,它本身是一个构造函数 size 数据长度 add() 添加一个数据 delete() 删除一个数据 has() 查找一个数据 clear() ...

  3. POJ1033 Defragment

    题目来源:http://poj.org/problem?id=1033 题目大意: 某操作系统的文件系统中,所有的磁盘空间被分为N个大小相等的cluster,编号1至N.每个文件占用一个或多个clus ...

  4. Swing实现canvas-nest.js 源码

    #### 说明 canvas-nest.js 源码 http://www.bubuko.com/infodetail-2237716.html 地址:https://gitee.com/dgwcode ...

  5. 【补档】Pycharm的一些配置

    新建和创建文件就不必说了吧~ 运行这里原本是灰色的,我们点旁边的三角形 点绿色+号,python Name:随便写 Script:选择一个py文件~,然后OK,就可以运行了

  6. Tomcat从socket到java Servlet

    整体架构图 一. 启动阶段 BootStrap的main方法加载server.xml配置文件,封装成Server,Service,Connector,Engine等java对象 Server初始化== ...

  7. springboot 参数校验详解

    https://www.jianshu.com/p/89a675b7c900 在日常开发写rest接口时,接口参数校验这一部分是必须的,但是如果全部用代码去做,显得十分麻烦,spring也提供了这部分 ...

  8. 07.Spring Bean 加载 - BeanDefinitionReader

    基本概念 BeanDefinitionReader ,该接口的作用就是加载 Bean. 在 Spring 中,Bean 一般来说都在配置文件中定义.而在配置的路径由在 web.xml 中定义.所以加载 ...

  9. mangodb与mysql的区别及部署

    一, mangodb与mysql的区别 mangoDB与MYSQL都是开源的数据库,但是mysql是传统的关系型数据库,mangdb则是非关系型数据库,也可以称之为文档型数据库,是一种NoSQL的数据 ...

  10. A -- A. Quailty and Playing Cards 模拟 + 思考

    http://www.ifrog.cc/acm/problem/1036?contest=1005&no=0 分类,考虑Q神出的是第一张或者是第二张,然后对手出那些牌来应付. Q神出第一张和第 ...