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

本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了。

为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父类,那么就需要进行两次重复的计算。)然而如果我们在实现Umlniterface接口的时候,就根据已经解析好的elements信息来把可能会被查询的所有数据都提前算出来存好,查询的时候就把他提取出来就可以了。

基于这种考虑,这两次作业我采用了这样的结构:首先,用一个类来实现官方给出的接口,这个类只有接口给出的查询功能。至于具体要查询的内容,需要另外创建一个类,这个专门用来存放和构建各类查询会用到的hashmap。

二、我对面向对象概念理解的演进:

面向对象课程的第一单元,是和我们以前学的c语言这样面向过程的基本无差别的内容,这一单元中,主要还是在熟悉c语言的语法结构,但同时,在第一单元三次作业的不断重构和优化的过程中,我也慢慢体会到面向对象的封装性的好处,这个好处有两个方面,首先,一个具有良好封装行的代码,比较容易修改,因为不同类之间很多内容彼此之间是不可见的,这带来的好处就是,你在修改一个类时,不用考虑另外一个类的太多牵扯;其次,两外一个好处就是,良好的封装性一般也就意味着一个优秀的架构,一个优秀的架构能让你在写代码时思路更清楚,同时写出来的代码也更具可读性,具有更良好的可修改行。第二单元的作业,专注于多线程,这是我之前从未接触的一种编码思路。第三单元是jml语言的学习,通过这一单元的学习,我体会到了在编写一个工作量比较大的代码时,如何与人协作,当然,在这一单元的代码性能要求也是我之前没接触过的,在写这一单元的作业时,我学习了很多优化性能的算法。第四单元是uml的学习,这一单元感觉上作业的内容,重点和难点都不在uml上,而是统计uml的算法,本质上和第三单元没太大差别。

三、课程收获

面向对象课程给我最大的收获有两个方面。首先,面向对象是一种不同于我以往所学习的编程思想,他是针对的不是事件执行的过程,而是参与事件执行的对象。比如电梯从1楼到5楼的过程,以面向过程的思路来看待这件事儿,就是单纯的电梯前往乘客所在的楼层——>电梯开门——>乘客进入电梯——>电梯关门——>电梯运行到目的楼层——>电梯开门——>乘客出电梯,这样一个事件的完整执行过程,然而如果从面向对象的角度来思考这一过程,就要分为两部分来思考——乘客和电梯,乘客有名字,出发楼层和目标楼层等属性,以及进出电梯的方法,电梯有停靠楼层的属性,以及向上下运行,开关门的方法。然后用电梯对象和乘客对象的这些属性和方法来组成整个事件。

面向对象给我的另外一个收获,是对于多线程的理解。多线程对于我来说是一个全新的概念,线程之间同步异步,交互以及死锁,是一种全新的写代码需要考虑的因素。

四、对课程提出的几点建议

(1)首先是对于互测环节的一点吐槽(针对第三单元),由于第三单元互测的数据量都很大,所以从数据从数据上很难找到自己程序中在强测之前就没找到的问题。而且,更为重要的一点是,很多bug是性能上的问题,这个优化要满足大佬们数据的要求真的很难,就出现了被狼人狂刀而无法自救,心态炸裂的问题。

(2)然后是关于强测数据点给分的问题,由于很多时候强测数据都会不可避免地对一个问题进行反复测试,这样就会出现由于一个bug而倒是全盘崩溃的局面,建议debug阶段,对于强测部分的debug,如果是合并修复,能够返回多一点儿的分数。

oo第四单元作业总结的更多相关文章

  1. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  2. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  3. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  4. OO第四单元作业小结

    一.本单元两次作业的架构设计 1.第一次作业 整体思路:以class为核心,建立MyInterface.MyAttribute.MyOperation.MyAssociation四个类分别储存每个类的 ...

  5. 北航OO第四单元作业总结(4.1~4.3)及课程总结

    前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...

  6. OO第四单元作业总结及课程总结

    一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...

  7. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  8. BUAA OO 2019 第四单元作业总结

    目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...

  9. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

随机推荐

  1. 解决无法通过浏览器访问docker成功安装rabbitMQ后页面问题

    我发现了问题后,花了两天的时间解决了这个问题. 一.测试在docker本机中使用curl "ip地址:端口" 查看是否能访问成功,结果是没问题,排除了docker安装失败的问题 二 ...

  2. 一次VLAN标签引发的网络事件的处置

    一次VLAN标签引发的网络事件的处置 一.背景介绍 事件背景: HZ某分公司新装一套业务系统,通过一条专线和BJ总公司连通.分配给HZ公司的ip地址为:a.b.c.X,掩码24位,网关a.b.c.1. ...

  3. Spring Boot 轻量替代框架 Solon 1.3.15 发布

    Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...

  4. 前端vue使用高德地图

    首先,注册Key 1.注册开发者账号,成为高德开放平台开发者 2.登陆之后,在进入「应用管理」 页面「创建新应用」 3.为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 ...

  5. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  6. springboot项目配置logback日志系统

    记录springboot项目配置logback日志文件管理: logback依赖jar包 SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包: < ...

  7. malloc 函数分析 glibc2.23

    malloc 函数详解 本篇主要是参考了glibc 2.23的源码 首先我们来看看malloc函数的执行流程. strong_alias (__libc_malloc, __malloc) stron ...

  8. SpringBoot自动装配,比较全的吧,来看看吧~

    文章挺长,表达不好,希望能有获~~~~~~~ Spring也提供使用注解来注册bean,为什么要用SpringBoot呢? 使用Spring应用,比如SpringMVC还行需要配置ViewResolv ...

  9. Vue.js小案例、生命周期函数及axios的使用

    一.调色框小案例: 随着三个滑动框的变化,颜色框的颜色随之改变 1.1.实例代码 <!DOCTYPE html> <html lang="en" xmlns:v- ...

  10. 算法tip:栈的可生成性问题

    算法tip:栈的可生成性问题 问题描述 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,判断它们是否可以在最初空栈上进行推入 push 和弹出 pop 操作.(LeetCod ...