OO第四单元及学期总结
OO第四单元及学期总结
第四单元两次作业的架构设计
第一次作业
类图:

树形结构:使用Operation类管理UMLOperation以及parent为该UMLOperation的参数(UMLparameter);使用Class、Interface两个类分别管理UMLClass/UMLInterface以及parent为该UMLClass/UMLInterface的属性UMLAttribute、操作(Operation)以及其拥有的类间关系(关联/继承/实现)等;用顶层的myUmlInteraction类管理Class和Interface,并完成要求的操作。
构建:在MyUmlInteraction类的构造方法中,通过多次遍历传入的UMLElements,完成上述树形结构的构造。
实现功能:对于相应的功能,只需在相应类中实现应有的方法,并且MyUmlInteraction类调用该方法即可。
第二次作业
第二次作业我沿用了第一次作业的架构设计,只是针对新的需求和新类型的UmlElements,增加了新的类来管理(StateMachine和Interaction),并实现相应的方法
类图:

感谢课程组对UMLElements的限制和说明,这次新增的关于状态图和顺序图的6个需求都不难,只需要新增加类来管理新的元素,实现相应的方法供MyUmlGeneralInteraction类来调用,并且在构造函数中完成对新类的构造即可。
个人认为本次作业的难点在于三个检查规则
R001:很简单,只需要遍历每个类,看它的属性是否与其AssociationEnd是否有重名即可。
R002:是否有循环继承。考虑两种情况下的循环继承:1)类继承类 ,2)接口继承接口。
对于每个类/接口,用DFS判断是否有环即可。注意在递归过程中,可能会出现中间有环的情况(A-B-C-D-B-......)
R003:是否有重复继承。
由于限定了类只有单继承,因此不会出现类重复继承类的情况。
1.考虑接口之间的重复继承,将存在重复继承的接口和每个接口继承的接口保存下来。2.对于每个类,考虑a)其实现的某一个接口是否重复继承了其他接口,b)其实现的所有接口继承的接口是否有继承。
判断接口之间的重复继承,我最初考虑的是判断每个接口到其他每个接口的独立路径条数,超过一条则说明存在重复继承。但交流之后发现可以使用LFS方法判断,只需将LFS遍历到的节点放到一个集合,如果之后访问到的点仍在这个集合,则说明有重复继承。
这次作业的不足之处:没有把需要用到的图运算方法单独抽象出类。堆积在了MyUmlGeneralInteraction类中使得其杂乱没有条理,代码不够优雅。
架构设计以及OO方法理解的演进
架构设计是整个流程中一个非常重要的环节。一个清楚、优雅,扩展性强的架构设计可以使我们又快又好的完成代码,而不是每次面对新需求都需要推倒重来。架构设计在这门课中贯穿了始终,就个人而言,除了第三单元JML规格化设计对于架构设计的要去不是很高之外(官方已经实现了主干逻辑),其他的几个单元做好架构设计都是必要且重要的。
在这四个单元中,我一直试图理解并使用面向对象的思维方式来进行架构设计。在第一单元中,前两次作业还好,第三次作业尝试失败,因为我无法将输入的解析过程用面向对象的方法来实现。第二单元的多线程作业,架构设计的重要性就极为明显,如何保证线程安全,进行线程间的同步互斥也要纳入考虑范围。利用一些现有的设计模式,可以帮助我们更好的完整架构设计,比如在这个单元,就可以使用生产者消费者模式,工厂模式等设计模式来对问题进行抽象。第四单元完成的是UML图的解析处理。由于UML本身描述的就是面向对象语言的各种组成元素之间的关系,所以只要对面向对象语言的一些元素之间的层次关系有所理解,架构设计也就不难了。
个人感觉,在架构设计时,一个重要任务就是准确实别类及其具有的属性和能实现的方法,并且整理出类之间的交互关系。一个优雅的架构应该能妥善的处理上述内容,并且在此基础上具有一定的可扩展性。一个类过于冗杂肯定是不对的,它应该只拥有和管理他本身必须管理的属性,而将一些不必须的东西交给其他类来管理,而它本身只要保留调用接口即可。
通过第四单元的学习,我发现通过画各种UML图,我们能够更好地理解和分析需求,并且落实一些实现和交互细节,这对于我们的架构设计是非常有帮助的。
测试理解与实践的演进
各单元测试方法
第一单元:检查边界条件与特殊字符,重点在于程序的鲁棒性。简单的使用一些自动化测试方法,提高效率
第二单元:至今尚未掌握多线程测试方法,自己没有测试,全靠评测机。
第三/四单元:单元测试,针对每个方法进行测试,尽量保证覆盖全面,考虑到各种情况以及边界条件。
我对测试的理解
无论在实际的软件开发还是我们的作业需求中,测试都是非常重要的一个单元,针对不同代码,使用与之匹配的测试方法,进行充分的测试是保证程序正确性的一个重要条件。在本学期的作业完成中,我对测试的态度明显不太重视。完成作业交评测机AC之后,测试一般都是草草了事。在互测阶段,也比较佛系,基本只是针对自己当时遇到的几个坑点随缘测试,导致互测基本不见成效。在之后的代码开发中,应当给与测试更多的重视,才能完成更完善,更鲁棒的代码。
课程收获
面向对象思维
第一条不写这个有点对不起课程名字。
万物皆对象大概是一个入门思维。相较于C语言等过程式语言,面向对象的这个思维更符合我们对现实生活的认识。在逐次作业的实践中,我对这种思维加深了理解(感受到了用类来管理类所具有的属性以及其能实现的操作的方法的便利)。
如何准确识别一个类、其具有的属性和方法以及如何完成类之间的交互是我们要考虑的重中之重。
面向对象的三大特征:封装、继承与多态。利用它们,我们能更快、更好、更优雅的写好代码。
学习了JAVA语言。
程序的鲁棒性以及异常处理
第一单元让我深刻理解了程序如果没有鲁棒性基本就废了。
用户输入很多时候不符合条件,如何处理这些异常,如何确保自己的代码的健壮性是我们在设计时就要考虑到的问题。这就要求我们能够考虑到各种各样可能发生的错误情况,并且针对不同的情况想好不同的异常处理方式。一发生异常就终止程序是万万不可取的(想想美国坠毁的航天飞船),妥善处理异常时我们应该学习和掌握的。
规格化方法和注释说明的重要性
虽然JML有些过于繁琐,不过不得不说,正确的JML规格的确能从理论上保证程序的正确性,并严格限制代码的实际完成。然而,JML的书写和阅读体验均不佳,个人认为如果只是用于完善代码,JAVAdoc等注释已经完全足够,过多学习JML还不如要求写JAVAdoc
架构设计以及测试的重要性。
这两点在上面已有提到,在此不再赘述。
改进建议
传授评测方法(每人发一个评测机)
完善课上实验机制,适当调整课程重点
相较于每周的大作业,我认为课上实验的内容能更好的帮助我们理解上课讲授的内容。不可否认,通过这学期这么多次的大作业,我们的编码水平得以提高,但是就我个人而言,我对面向对象的理解远远不够到位。而我认为每次课上实验的内容都很棒,每个单元都紧跟上课的节奏,自己动手写代码理解继承和多态、debug、分析多线程、写规格、设计类图,这些能让人更深入的理解知识本身。然而这学期的课上实验给我的感受是十分不完善,每次题目只会在课上实验的时间段放出,上课结束老师也不会再就实验做更多讲解,也没有参考答案放出,十分不利于学习。希望之后可以完善课上实验的机制。实验结束后让大家一直能看到实验题目,并就课上实验内容进行一定的讲解(或给出参考答案以及思路)
希望之后能更加重视课上实验,并布置一些相关作业(建议把课上实验改为课下小作业,给我们留更多时间去理解掌握课上知识),同时适当减轻每周大作业的难度和规模。
在JML和UML单元,加强对应的书写规格/画图练习
个人认为自己动手书写规格/画UML图能更好的掌握相关知识。所以希望能适当布置作业并讲解。
OO第四单元及学期总结的更多相关文章
- OO第四单元总结及学期总结
目录 OO第四单元总结及学期总结 第四单元三次作业架构设计 第十三次作业 第十四次作业 第十五次作业 四个单元中架构设计及OO方法理解的演进 第一单元 第二单元 第三单元 第四单元 四个单元中测试理解 ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- 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类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...
- 2020北航OO第四单元总结
2020北航OO第四单元总结 一.本单元架构设计 本单元作业是实现一个UML图解析器,其中实现接口及主要框架课程组已经提供,只需要我们完成特定功能. 在第一次作业时,感到十分迷茫,不知道如何下手,最后 ...
随机推荐
- python爬区csdn文章信息(原始稿)
使用python对csdn的博主文章进行爬取,期间又遇到了新的问题和旧的已经遇到过的问题.首先做一个笔记,免得以后遇到同样的问题时还得浪费时间和经历. 刚开始目的没那么明确,主要在于熟悉相关的规则及流 ...
- SQL-INSERT触发器练习
&练习一 有这样的一个基础表A,字段包括:id.type.value.create_time,主要是记录某个类型的状态变化时间和值.在插入类型(type)为'runtime' 的数据时,根据前 ...
- TreeView和ListView数据库查询数据联动操作
好久不用了,重新整理下放这里以备需要使用,功能见图 数据库表结构 定义TreeView addObject中data存储的记录集 type PNode = ^TNode; TNode = record ...
- Python - 虚拟环境 venv
什么是虚拟环境 这是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/ 假设自己电脑主机的 Python 环境称为系统环境,而默认情况 ...
- 三剑客之sed编辑器 基操
目录: 一.sed编辑器 二.打印内容 三.使用地址 四.删除行 五.替换 六.插入 一.sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流. sed ...
- CPF 入门教程 - 各平台各系统发布说明(九)
CPF C#跨平台桌面UI框架,支持Windows,Mac,Linux,支持龙芯.飞腾等CPU 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - ...
- 类型定义VS类型别名
类型定义是在当前包中的一直存在的.输出%T,发现类型前面都有main.前缀 类型别名,其实还是它的根本类型,别名只存在在代码中.编译后就不存在了,还是根本类型.
- 图论---最小生成树----普利姆(Prim)算法
普利姆(Prim)算法 1. 最小生成树(又名:最小权重生成树) 概念:将给出的所有点连接起来(即从一个点可到任意一个点),且连接路径之和最小的图叫最小生成树.最小生成树属于一种树形结构(树形结构是一 ...
- obs软件mac设置
1 远程电脑软件teamview或者向日葵 远程mac电脑会时黑屏或连不上, 需要设置系统偏好->设置软件权限 2 设置obs 显示不出画面或声音,也需要在系统偏好设置obs的权限(首先打开OB ...
- Linux系列(36) - yum命令安装(3)
yum常用命令 查询 yum list:查询所有可用软件包列表 yum search 关键字:搜索服务器上所有和关键字相关的包 安装 yum -y install 包名 选项: -install 安装 ...