单元架构设计

本单元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. day23作业详解

    1.题目 2.题目详解 点击查看详细内容 1. 1-1 封装 把功能封装到类中 class Message(object): def email(self):pass def msg(self):pa ...

  2. 学习:数学----gcd及扩展gcd

    gcd及扩展gcd可以用来求两个数的最大公因数,扩展gcd甚至可以用来求一次不定方程ax+by=c的解   辗转相除法与gcd 假设有两个数a与b,现在要求a与b的最大公因数,我们可以设 a=b*q+ ...

  3. Bellman_Ford算法(求一个点到任意一点的最短距离)

    单源最短路问题是固定一个起点,求它到任意一点最短路的问题. 记从起点出发到顶点 i 的最短距离为d[i],则有以下等式成立 d[i]=min{d[j]+(从j到 i 的边的权值) 看代码 #inclu ...

  4. C. Jury Marks 思维题

    http://codeforces.com/contest/831/problem/C 做的时候想不到,来了个暴力. 对于每个b[i],枚举每一个a[i],就有1个可能的情况. 然后用vector存起 ...

  5. Java面向对象_适配器模式

    概念:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 public class Practice14 { public static v ...

  6. Storm概念学习系列之storm-starter项目(完整版)(博主推荐)

    不多说,直接上干货! 这是书籍<从零开始学Storm>赵必厦 2014年出版的配套代码! storm-starter项目包含使用storm的各种各样的例子.项目托管在GitHub上面,其网 ...

  7. 【Unity3D】用C#读取INI配置文件

    由于在C#并没有提供专门读取INI文件的API,所以需要间接调用C++的API来进行读取. using System; using System.Collections.Generic; using ...

  8. PHP中文手册1

    1.入门 关于换行 PHP 会在输出时自动删除其结束符 ?>后的一个换行.该功能主要是针对在一个页面中嵌入多段 PHP 代码或者包含了无实质性输出的 PHP 文件而设计,与此同时也造成了一些疑惑 ...

  9. vnc安装问题

    在xenserver中安装vncserver软件.启动显示正常 用grep命令查看也确实有线程在运行. 但实际上用命令service vncserver status查看vnc状态,显示没有桌面在运行 ...

  10. 处理 wait millis 60009, active 50 ,maxactive 200 异常 过程

    处理 wait millis 60009, active 50 ,maxactive 200 异常 过程2018年04月19日 16:48:46 守望dfdfdf 阅读数:1910 标签: druid ...