当前位置: 首页 > news >正文

【BUAA-OO】第四单元作业总结

第四单元作业总结

一、本单元两次作业的架构设计

1.第一次作业

  第一次作业要求针对类图进行分析,从而实现一个UML类图解析器,分析内容涵盖类及其属性、操作的统计和可见性分析、关联及关联对端的分析、继承及实现关系的分析等,实现方式与上单元类似,只需要实现UmlInteraction接口以完成解析。

  由于只需要对类图分析,因此所有的数据存储和方法实现都在同一个类中完成,如下图所示:

 

  在构造MyUmlInteraction类时,存储UMLElement对象与id的关系、类与其属性、操作的关系以及关联、继承和实现的关系;在得到指令进行分析时,根据存储数据进行分析,并存储分析结果,方便下次使用。

2.第二次作业

  第二次作业在第一次作业的基础上进行了扩展,为解析器增加了解析顺序图和状态图以及基本规则验证的功能。因此,在实现上,保留上次作业中对类图解析的功能,将其作为一个单独的类,并增加新的类以实现对顺序图、状态图的解析和基本规则的验证即可。

 

  由于一次输入可以输入一张类图、多张顺序图和多张状态图,因此每个解析器可以持有一个规则检查器UmlCheck、一个类图解析器UmlClassMode、多个顺序图解析器UmlCollaboration和多个状态图解析器UmlStateChart,其中顺序图解析器和状态图解析器分别由其UmlInteraction和UmlStateMachine下的UMLRegion的id索引。图的解析器存储图的相关信息,并完成对图的解析;解析器根据指令得到对应的图的解析器,发出指令并得到解析结果。

 

二、架构设计及OO方法理解的演进

  • 第一单元

  第一单元通过实现多项式导函数求解的方式引导我们初步建立了对象与对象化编程的意识,明确面向过程编程与面向对象的区别,通过继承、多态、抽象等方法实现层次化设计,并针对每一次作业做出了可拓展的设计。

  从第一次作业简单粗暴的使用List方式存储所有数据,并且只使用一个类完成所有的工作,到第二次作业开始尝试使用HashMap构建数据结构存储数据,为项、多项式和输入处理建立不同的类,并各司其职的完成求导工作,再到第三次作业分别按照因子—项—多项式的函数结构和加减法—乘法—嵌套的运算结构建立类并将其组合,建立起更加逻辑清晰、简洁明了的架构层次。

  比起一边书写一边思考的方式,提前考虑好架构、数据结构与算法,通过化整为零的方式一点点完成作业,在大大降低代码书写和逻辑思考的难度的同时,对正确性也有一定的提高。

  • 第二单元

  第二单元通过对电梯的模拟带领我们学习并掌握了多线程的相关知识,初识面向对象程序的需求分析与设计原则,让我们亲身体验了“多思考,多设计,少写码”的重要性。

  通过对课上讲解的生产者-消费者模式、单例模式、工厂模式等经典模式的分析与应用,可以进一步感受到轻线程体设计、均衡层次化共享数据设计、局部化算法作用范围的思想,从而在书写自己的代码的时候进行调整与改进。通过对面向对象程序的需求分析与设计原则的学习,可以进一步明确设计的重要性。

  通过方法与类之间的合作可以使得每个方法都只负责很基础的一部分功能,从而使得架构更加简洁清晰,代码的可读性和可扩展性也可以得到进一步的加强。实现设计之后再进行设计检查,则可以快速的发现问题,加以改进。

  • 第三单元

  第三单元通过对JML规格的实现指导我们建立起设计与实现分离的思考方式,脱离代码层次,在更高一级的层次上感受面向对象的思想,进一步加深对层次化设计的理解。

  通过对JML的理解,可以从细节上理解架构,从宏观上掌握每一个方法的行为模式和作用;通过对官方代码包的分析与阅读,则可以进一步加深对架构的理解。

  另一方面,本单元注重对时间复杂度的控制,需要对复杂的中间数据模型的处理,我们需要通过分析不同代码段的使用频率,合理分配每一部分的功能,对代码具有更加全面的掌握,从而对整体时间复杂度有一个良好的把控,根据功能需要构建适应性能要求的中间数据模型和协同架构,进一步了解了性能和架构设计之间的关系。

  • 第四单元

  第四单元通过对UML类图、顺序图和状态图的分析,将格式解析与语义提取分离,实现了抽象化的处理,是面向对象设计的图形化表达的深入理解,也是针对诸多不同类型的对象构造层次和关系,在构造UML模型的过程中动态维护相关的查询数据的一次实战演练。

  从UML中,我们可以学习到模型化设计的思想,进一步训练架构与设计的能力,可以说是对之前所学内容的一次深化与应用。

 

三、测试理解与实践的演进

  • 第一单元

o     边缘测试与压力测试

o     覆盖性测试

o     异常输入测试

  • 第二单元

o     线程安全测试

  • 第三单元

o     JML规格的验证

o     JMLunit自动生成测试样例进行覆盖性测试

  • 第四单元

o    关于正确理解题意的重要性???

 

四、课程收获

  • 第一单元

o     初识面向对象编程的思想与架构意识

o     继承、多态与抽象的知识

o     Java语言进阶

  • 第二单元

o     多线程机制与其经典模型

o     线程安全设计与死锁避免

o     工程化设计思想与SOLID检查

o     Java的多线程实现

  • 第三单元

o     JML基本知识与应用

o     关于异常的处理

o     规格化的思想

  • 第四单元

o     UML类图、顺序图和状态图基本知识

        • 图、模型层次、规则检查

o     模式化设计思想

 

 

五、改进建议

1. 关于作业的关注重点

  感觉在每次作业中,同学们关注的重点或多或少都有些偏离本单元的理论知识和思想,比如第一单元疯狂优化的性能分,比如第二单元疯狂优化的调度算法,比如第三单元摆在明面上的数据结构,比如第四单元模棱两可的规则说明,而上课讲的诸如架构涉及、规格模型等思想在实际运用中考虑的反而较少。

2.关于上机实验的题目

  实验的题目与理论课联系还算紧密,但是上午学习完理论知识下午直接上机实验容易造成大面积懵圈的现象,大家对刚学习的新知识了解和掌握都不太好。

而且上机实验内容与作业的关系就不大,相关知识点几乎都是上课学会下课忘完,效果不显著。历次实验难度差别也较大,前两次实验和UML第一次实验难度显著高于其他实验,并且部分实验题意描述并不清晰。

3.关于PPT

  希望PPT能及时下发一下,尤其是下午有实验课的时候。

4.关于博客作业

  希望能换个平台,博客园的后台真的是又难用排版还丑。 

5.关于时间安排

最后一次作业和博客进烤漆真的要人命啊!!!!!

每个DDL还都在考试当天啊!!!!!

真的夭寿了马上就要考试了还一点都没复习啊!!!!!

助教大大体谅一下我们这些不是6系的崽儿吧!!!!!

 

第一单元

转载于:https://www.cnblogs.com/junzy/p/11070127.html

相关文章:

  • python学习-字符和编码
  • new Date() 在safari上遇到的问题
  • Linux安全加固
  • 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题
  • 【JVM】符号引用和直接引用
  • Thread Future模式
  • 异常检测
  • monkey性能稳定性测试使用教程
  • [转]TCP和UDP
  • 换个语言学一下 Golang (2)——基础语法
  • 【转】SpringBoot 2.0.0新版和SpringBoot1.5.2版本中Tomcat配置的差别
  • CDH 安装的博客地址记录
  • firewalld 实现nat 转发外网转发到内网 实现访问外网端口到内网
  • 《A Survey on Transfer Learning》迁移学习研究综述 翻译
  • EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件正式环境安装部署攻略...
  • es6--symbol
  • flask接收请求并推入栈
  • git 常用命令
  • go语言学习初探(一)
  • HTTP请求重发
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Joomla 2.x, 3.x useful code cheatsheet
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • laravel 用artisan创建自己的模板
  • learning koa2.x
  • nfs客户端进程变D,延伸linux的lock
  • QQ浏览器x5内核的兼容性问题
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 二维平面内的碰撞检测【一】
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 问题之ssh中Host key verification failed的解决
  • 用Visual Studio开发以太坊智能合约
  • 鱼骨图 - 如何绘制?
  • 中文输入法与React文本输入框的问题与解决方案
  • ​2020 年大前端技术趋势解读
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma 指令
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • %check_box% in rails :coditions={:has_many , :through}
  • (0)Nginx 功能特性
  • (11)MATLAB PCA+SVM 人脸识别
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (六)Hibernate的二级缓存
  • (原創) 未来三学期想要修的课 (日記)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Web窗口页属性
  • .net 程序发生了一个不可捕获的异常
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net操作Excel出错解决
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @property括号内属性讲解