oo第四单元及课程总结
一、第四单元作业总结
第四单元有两次作业,第十三次作业是实现一个UML类图解析器,可以通过输入一些查询指令来查询一些类图的信息。程序的主干部分已经提供,我们的任务就是实现给出的接口,过程并不繁琐。第十四次作业在十三次作业的基础上增加了对UML状态图和UML顺序图的解析以及UML模型合法性判断。
1、 第十三次作业
架构思路:
对于需要存储相关信息和参数的UML对象各开一个专门的类来实现,例如UMLClass,UMLInterface,UMLOperation。同时在第一步识别UMLElement时率先存入容器,其他Element在之后进行分类存储。
除了少数功能可以直接查询得到之外,其他的函数大多需要整合计算的过程,因此尽量在查询开始之前进行处理并且把信息保存,避免多次查询多次计算。
类图:
图中可以看出构造方法的复杂度最高,原因是大部分的初始操作都在构造方法中,完成,导致在其中有大量的遍历过程和对容器的操作过程。此外还有一些需要遍历图找到父类的操作复杂度也较高。
Bug分析:
此次强测因为未考虑接口可以继承多个接口的情况,强测情况较惨,修复过程不复杂。
2、 第十四次作业
架构分析:
类图部分与上次作业完全相同,不再赘述。
状态图部分,新增了stateMachine类来存储状态图的相关信息和数据。前两个函数较为直观,可以直接查询得到。第三个指令查找可达的状态需要层次查找,我使用了图遍历方法,得到状态的可达矩阵并存储。
顺序图部分,新增了类来存储顺序图的相关信息和数据。三个指令的较为简单直观。
规则检查部分,R001通过简单的比较可以实现。R002我使用弗洛伊德算法得到类和接口的可达矩阵,能够自己到达自己的就是成环。R003可以通过直接遍历所有的类和接口并且比较所有的继承的接口来判断是否有重复继承,但是此方法复杂度较高。
若是把所有的方法和操作都放在一个类里面会造成类的冗余繁杂,因此在设计时把大部分初始操作,存储操作等放在父类中,子类中放置实现的接口函数。
类图:
可以看出复杂度主要集中在了父类中。
Bug分析:
强测中没有出现错误。
二、四个单元中架构设计及OO方法理解的演进
第一单元:在写第一单元的作业是并没有对面向对象方法的概念,程序还是基本按照C程序的写法面向过程,第一次第二次作业因为格式固定要求较低直接莽过去,但是在第三次作业几乎全部推翻重构,花费了许多的时间和精力,但是写法依然不太美观,仍旧是针对作业要求而强行使用类来替代结构体实现了函数。这三次的作业可扩展性都非常差,但是当时我还是没有意识到oo方法的重要性,在互测阶段对比其他同学的清晰优秀的代码感受到了明显的差距。
第二单元:第二单元是电梯系列的作业,要求我们对多线程有了解,编写逻辑和调试难度还有架构方式与第一单元有很大的差别,不能再次通过强行面对过程编写。我更加注重代码的架构,思考如何降低类与类之间的耦合性,以达到方便调试和扩展的目的。我在作业中独立出了乘客,调度器,电梯一个个实体,各司其职,尝到了oo方法的方便之处。这一单元还加深了我对进程同步互斥的理解,对加锁的条件和要求也有了使用经验。
第三单元:第三单元是JML代码规格系列的作业。在这个单元中的作业我们只要考虑根据需求完成每一个函数,但是第三单元的作业有时间限制,所以需要考虑算法结构以免运行超时,对架构设计的需求更高了。经过前两个单元的训练,我每次作业会综合考虑所有接口函数提取出共同需求再进行设计,与之前相比有了长足的进步。
第四单元:第四单元还是对接口函数的实现,与之前的作业相比第四单元作业难度其实有所降低,相对而言完成的比较轻松。但是因为放松了对性能的要求以及临近考试,设计上其实并没有尽力追求,只是写了方便直观的算法以实现作业。但是能够明显感受到自己对于oo方法的适应。
三、四个单元中测试理解与实践的演进
第一单元时测试的时候主要想的是两种,一是能否识别出格式错误,二是能否正确求导。我主要思考边界数据和复杂数据,但是总是有所疏漏,自己的思考不够全面,出现的bug总是一些细小的条件未考虑,基本一两行代码就可以补充完整。
第二单元多线程作业,测试难度大大增加,因为线程访问时间和先后的不确定性同样的样例测试结果也可能不同,对bug的定位难度大大增加。需要的是对代码逻辑的仔细思考以找到其中的漏洞,而不是构造各种样例测试。
第三单元和第四单元的因为有整体上的架构需求,一旦出现bug很有可能就需要整体架构的调整,因此bug的修复困难很多。这两单元的测试使用了对拍器,通过与同学结果的对比可以很快地找到bug并且定位。
四、课程收获
1、 对Java语言的熟悉和使用。
2、 对多线程程序设计的经验。
3、 代码风格规范。
4、 面对对象的程序设计思想。
5、 诸多实用工具的使用
五、改进建议
1、 上午讲课的内容下午上机直接开始考,让人难以适应。
2、 上课时能够多讲点作业架构设计的方向。
3、 希望能有课上讲讲优秀的架构设计以供学习。
oo第四单元及课程总结的更多相关文章
- oo第四单元暨课程总结
第四单元架构设计总结 第一次作业 单独写了MyUmlClass.MyUmlInterface.MyUmlOperation三个类对应UML中相应元素,在UML图中这几个元素包含一些下级元素,如Clas ...
- oo第四单元与课程总结
Part1 本单元三次作业架构设计总结 1.组织结构 由于官方代码中已经给我们提供了许多零散的类元素,如UmlClass``UmlAssociation``UmlParameter等,因此我首先将某些 ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- OO第四单元总结及课程总结
OO第四单元总结及课程总结 一.前言 紧张刺激的OO“昆仑课程”接近尾声,经过一个学期的学习,我的收获和感触颇多,借此博客作业的机会,对自己OO这门课程做一个总结.本博客主要有以下五个方面,一是第UM ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- oo第四单元作业总结暨课程总结
oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...
- OO第四单元总结与课程总结
OO第四单元总结与课程总结 第四单元作业架构设计 总体分析:本单元作业的需求集中于对UML类图进行查询.对于查询操作来说自然的想法是提前预见到需要查询的内容,在一开始就采用适当的数据结构将必要的信息进 ...
- OO第四单元与全课程总结
OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
随机推荐
- linux终端出现"-bash-2.05b$"现象的解决方法
参考:http://blog.chinaunix.net/uid-22823163-id-3295220.html
- Ternsorflow 学习:005-MNIST入门 实现模型
前言 在上一讲中,我们通过分析选用了softmax模型,并用tf创建之.本讲的内容就是为了训练这个模型以便于测试. 训练模型 为了训练我们的模型,我们首先需要定义一个指标来评估这个模型是好的.其实,在 ...
- 实训41 S7通信 单向连接 基于DP网络通信
连接的基本概念? 连接是指两个通信伙伴之间执行通信服务建立的逻辑链路,而不是指两个站之间用物理媒体(例如电缆)实现的连接. 连接相当于 通信伙伴之间 一条虚拟的"专线". 一条物理 ...
- Windows驱动开发-符号链接和设备名
windows下的设备是以"\Device\[设备名]”形式命名的. 例如磁盘分区的C盘,D盘的设备名称就是 "\Device\HarddiskVolume2” "\De ...
- 站在巨人的肩膀上才能看得更加远[Amo]
本来只是路过,写详细一点. 我看楼主浮躁得不得了.现在什么都不要做了,先去看几遍<不要做浮躁的嵌入式工程师>这篇文章,想清楚了,再动手吧. 我做了个实例,不用ST的库来点LED,解答你的问 ...
- 【转】Windows中使用TortoiseGit提交项目到GitLab配置
转 原文地址 https://www.cnblogs.com/xiangwengao/p/4134492.html 下文来给各位介绍Windows中使用TortoiseGit提交项目到GitLa ...
- vue-router 一个十分简单的应用场景
时间:2018-03-28 关于vue-router: 这里只大致说一下构建过程和使用情况,将就看看!! 我使用的是vue-cli脚手架+webpack构建的项目 安装vue-cli脚手架 npm i ...
- spring boot 2.18
@SpringBootAppliction: 标注在某个类,则是springboot的主配置类,springboot就运行这个类的main方法启动springboot; @SpringBootConf ...
- 0108 spring的申明式事务
背景 互联网的金融和电商行业,最关注数据库事务. 业务核心 说明 金融行业-金融产品金额 不允许发生错误 电商行业-商品交易金额,商品库存 不允许发生错误 面临的难点: 高并发下保证: 数据一致性,高 ...
- ActiveMQ的安装与配置详情
(1)ActiveMQ的简介 MQ: (message queue) ,消息队列,也就是用来处理消息的,(处理JMS的).主要用于大型企业内部或与企业之间的传递数据信息. ActiveMQ 是Apac ...