OO第四单元总结
单元架构设计
本单元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第四单元总结的更多相关文章
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- OO第四单元总结暨期末总结
OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- 2020 OO 第四单元总结 UML
title: 2020 OO 第四单元总结 date: 2020-06-14 19:10:06 tags: OO categories: 学习 1. 本单元三次作业的架构设计 本单元的代码编写与第三单 ...
- OO第四单元总结与课程总结
OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...
随机推荐
- LeetCode.11-装水最多的容器(Container With Most Water)
这是悦乐书的第350次更新,第375篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第5题(顺位题号是11).给定n个非负整数a1,a2,-,an,其中每个表示坐标(i ...
- HDU1863-畅通工程
题目链接:点击打开链接 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即 ...
- js常见问题之为什么点击弹出的i总是最后一个
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UVa 10256(凸包、线段交、点在多边形内)
要点 红蓝点分别求凸包显然 判断两凸包是否相交方法:所有红点不在蓝凸包内,反之亦然:所有红凸包线不与蓝凸包线相交,反之亦然. 书上让特判一下凸包退化成点或线段的情况,为什么我感觉代码仓库的代码并没特判 ...
- python入门之time模块和datetime模块
time模块 时间三种表示:时间戳(秒单位),struct_time(元组,可以分开调用),指定格式(格式化) time.sleep() 等待5秒钟 time.time() 返回时间戳 time.ct ...
- 022 Generate Parentheses 生成括号
给 n 对括号,写一个函数生成所有合适的括号组合.比如,给定 n = 3,一个结果为:[ "((()))", "(()())", "(())() ...
- Washing Plates 贪心
https://www.hackerrank.com/contests/101hack41/challenges/washing-plates 给定n个物品,选这个物品,贡献 + p, 不选的话,贡献 ...
- MapReduce的输出格式
1. OutputFormat接口 OutputFormat为输出格式接口,主要用于描述输出数据的格式,它能将输出的键值对写入特定格式的文件中.输出格式的层次结构如下 2. 文本输出 Hadoop默认 ...
- Storm概念学习系列之storm的特性
不多说,直接上干货! storm的特性 Storm 是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流. Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快 ...
- Python3.5 调用Ansible 执行命令
ansible.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import tempfile from collections ...