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图解析器,其中实现接口及主要框架课程组已经提供,只需要我们完成特定功能. 在第一次作业时,感到十分迷茫,不知道如何下手,最后 ...
随机推荐
- 安全系列之:跨域资源共享CORS
目录 简介 CORS举例 CORS protocol HTTP request headers HTTP response headers 基本CORS Preflighted requests 带认 ...
- Linux残留的EFI启动项删除后又恢复的问题
电脑Windows + Fedora双系统,UEFI启动,共用同一个EFI分区.现在删除了Fedora系统,那么应该将EFI分区中的Fedora启动项也删除之. 按照网上的办法,在Windows上,尝 ...
- 分享一则Linux系统邮件提示 /usr/local/lib/libprocesshider.so > /etc/ld.so.preload 的中病毒解决方法
系统环境:CentOS Linux release 7.6.1810 (AltArch) CPU架构:ARM 最近发现生产服务器CPU占用 ...
- python模块--__future__(向上兼容模块)
py2.7 unicode_literals 将字符串默认视为unicode, 即u'xxx'和'xxx'将是一样的, 而再想表示字节需用b'xxx'表示 division / 将表示正常除法操作 ...
- weblogic漏洞分析之CVE-2017-3248 & CVE-2018-2628
CVE-2017-3248 & CVE-2018-2628 后面的漏洞就是2017-3248的绕过而已,所以poc都一样,只是使用的payload不同 本机开启JRMP服务端 ->利用T ...
- excel中if函数的用法
IF函数有三个参数,语法如下: =IF(条件判断, 结果为真返回值, 结果为假返回值) 第一参数是条件判断,比如说"A1="百度""或"21>3 ...
- SonarQube汉化
SonarQube安装后默认是英文,如果不习惯看英文,可以进行汉化,官方提供了汉化插件. 登录后,汉化步骤如下: 需要点击了解风险,不然查询到插件后没有install按钮 搜索Chinese,找到插件 ...
- P7294-[USACO21JAN]Minimum Cost Paths P【单调栈】
正题 题目链接:https://www.luogu.com.cn/problem/P7294 题目大意 \(n\times m\)的网格,当你在\((x,y)\)时你有两种选择 花费\(x^2\)的代 ...
- 单页应用后退不刷新方案(vue & react)
引言 前进刷新,后退不刷新,是一个类似app页面的特点,要在单页web应用中做后退不刷新,却并非一件易事. 为什么麻烦 spa的渲染原理(以vue为例):url的更改触发onHashChange/pu ...
- instanceof和类型转换
什么是instanceof 判断一个对象是什么类型 注意点 X 和 Y 必须要有父子关系 否则编译都会失败 X对象只要是Y的子类(无论 是 儿子 还是 孙子 还是 曾孙....)X instanceo ...