单元架构设计

本单元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. [Xcode 实际操作]三、视图控制器-(9)在Storyboard中使用标签和按钮控件

    目录:[Swift]Xcode实际操作 本文将演示标签和按钮在故事板中的应用. 在欢迎串口中,点击创建一个新的项目[Create a new Xcode project] [Single View A ...

  2. 我的省选 Day -11

    Day -11 上了一天的文化课,晚上才来到机房(神秘的一天.. 班里前一半的JuLao们都去参加省质检的同步赛了, 然而我太菜,早就跌到班级的中下下了(所以没得参加.. 所以今天上课时特别尴尬,班级 ...

  3. C 语言实例 - 判断回文数

    C 语言实例 - 判断回文数 判断一个数是否为回文数. 设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=,则称n为一回文数:但若n=,则n不是回文数 ...

  4. RabbitMQ基础概念及使用

    RabbitMQ RabbitMQ是什么? RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Message Q ...

  5. 自定义ClassLoader加载加密的class文件

    package com.yd.wmsc.util; public class Test { public void say(){ System.out.println("Say Hello& ...

  6. vbox和宿主机共享文件夹

    首先,查看vbox安装的ubuntu是否支持vboxsf模块 sudo modprobe vboxsf dmesg | grep vboxsf 如果没有安装,需要安装vboxsf模块:(如果安装了请跳 ...

  7. Gym 100971B Derangement

    要求改换序列,使得没有位置是a[i] == i成立.输出最小要换的步数 首先把a[i] == i的位置记录起来,然后两两互相换就可以了. 对于是奇数的情况,和它前一个换或者后一个换就可以,(注意前一个 ...

  8. (转)CentOS最大文件描述符限制更改

    CentOS最大文件描述符限制更改 原文:https://www.cnblogs.com/TonyXiaoClub/p/4747736.html 系统级的限制:/proc/sys/fs/file-ma ...

  9. Axure7.0注册码 Axure7.0序列号 Axure7.0License key

    很多同学安装了Axure7.0,但找不到注册码(license key).以前网上流传的Axure6.5的注册码不能用了.下面整理几个可用的Axure7.0注册码分享给大家,祝大家使用愉快,做出更多牛 ...

  10. 网页mp3不能获取,报404问题解决

    js有些时候有些报错就是很莫名其妙 一 代码没错,js,html一点红都没有 然后上正式的时候,mp3不能播放音乐,报404 二 出这个错误,我第一反应是正式的配置有问题,毕竟开发测试都可以是不是? ...