第四次博客作业

本单元架构设计

第一次作业

在自己尝试画了第一次作业的类图后,发现自己作业的架构依旧混乱不堪。第一次作业中,我总共建了四个类,除去MyUmlInteraction类外,ClassRelevance类是储存与类有关的相关信息,如类的属性,方法,直接父类,顶级父类等;ClassifyFactory类用于处理输入,将输入进行分类,储存到对应的区域;ComputeFactory虽然取了一个工厂模式的名字,但实际只是一个简单的在输入完成后,对输入进行对应计算和处理,如通过直接父类得到顶级父类等。从上次作业的工厂模式中感觉到了架构的优美,但是自己在实现时一堆毫无关联的计算又不知如何处理,只能将其堆叠在一个类中。

第二次作业

第二次作业其实和第一次并无太大区别,只是增加了StatusDiagramSequenceDiagram两个类,这两个类与ClassRelevance类的作用相同,分别用来储存状态图的相关信息与顺序图的相关信息。因此这两个类和ClassRelevance与其他类的组合依赖关系相同,不过在尝试加上去以后图过于混乱于是省略。 
状态图,顺序图以及三个UML检查都放在了ClassifyFactory类中,类略显臃肿。

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

第一单元

第一单元是我第一次接触面向对象与OO这一门课--多项式求导。整个作业由输入类和集求导,储存,输出为一体的类构成。当然这种情况在第三次作业中有所改进,在第三次作业中,将输入的多项式拆分为了简单因子多项式因子两种,通过递归下降求解。
而对于OO方法的理解只是简单的,需要实现什么,就在一个类下面新构建一个方法,仅此而已,甚至对构造方法都没有什么概念。

第二单元

第二单元主要学习多线程和各类之间的交互,因此第二次作业主要重心放在了如何处理调度,互斥资源的处理上,架构方面对于架构的理解只是从一股脑一个类的堆叠变为了每个类有自己的任务。 
因此在第二单元的作业中,输入线程为单独的一类,电梯为单独的一类,调度器为一类,调度器是输入线程与电梯之间的桥梁,负责将输入进行分配调度给各个电梯。
但也仅限于此,接口实现,继承等概念依旧显得很陌生,不知道如何运用这些面向对象的独特知识来优化自己的代码。
因为电梯、调度器等实体的出现,以及二者的交互,逐渐对构造方法,get,set等方法有了更深的理解,同样,方法的重写也在优化架构,减少代码重复方面起到了很大的作用。

第三单元

第三单元表面是JML的练习,我觉得更多的反而是架构和数据结构的练习。
第三单元作业中,(特别是第三次),作业正式进化为地铁系统,需要提供最短路径计算,最低票价,不满意度等计算。我也第一次在例程中感受到了架构的优美,相比于自己写的代码实在是感叹例程极高的可读性和优美的架构设计,也是第一次接触到工厂模式,第一次理解和体会到接口,继承等的作用,之前一直认为这些东西可有可无,也从未去尝试这些,失败...希望自己在以后接触面向对象中能多多优化思考自己的架构,让自己的代码也具备可读性,易扩展性等。
第三单元由于次次作业间进行了继承,对方法的理解突然有了继承这一概念的加入而深入。子类重写父类的方法,子类中调用子类的方法或属于父类的方法等等,super()的应用等。

与实践的演进

在四次作业中,我的强测十分悲惨的炸过三次,可以说是十分高的比例。在这三次强测的错误中,十分低级的错误占了两次,分别是equals的使用和多项式中‘+-’的化简问题;以及第一次JML作业中由于优化不当的超时问题。
可以说我在测试方面的长进并不是很大,但是对于测试的态度有所变化。
第一单元作业中,我只是简单的通过手动输入一些能想到的输入进行测试,于是就导致了碰到负号整个符号化简结果就为负号的极端愚蠢的错误,如果或许只是能多尝试几组测试或许这个问题就能被发现。
第二单元作业中,由于多线程测试较为困难,于是我就成为了一个甩手掌柜,代码完成并通过弱中测后就不管不问,于是又顺理成章的又炸了一次,或者说万幸只炸了一次。
到了第三单元作业,我开始自动生成一些测试数据进行大规模的测试,但是又忽略了运行时间的问题。边界测试和压力测试的重要性又给了我当头一棒,在后两次的作业中也进行了一些极端情况的压力测试和边界测试,于是顺利度过后两次作业。
OO这门课程还教会了我Junit进行单元测试,但是对这个测试理解的并不是很深,觉得犹如鸡肋食之无味弃之可惜。还有并没有搞懂如何进行自动化测试,也就是各位大佬手写的测评机,差距如鸿沟一般。

课程收获

通过一学期的OO课程,我觉得我的收获主要分为以下几个方面

  • 对面向对象这一概念的初步理解和对面向对象这一概念的精髓内容的初步理解和尝试。如对象,继承,接口,架构等方面的理解,优化和尝试。使用面向对象思想来实现某一需求,在这之前只有面向过程的思维从未尝试过面向对象进行实际问题的解决。
  • 代码之外的东西,如checkstyleJMLUML,通过这些来规范自己的代码风格,保证代码的准确性以及优化自己的代码架构等。
  • 编程能力应该也是自己的一个收获,能够较为快速的实现每次作业的需求,实现OO这个课程的目标。

但收获总是与遗憾并存的,对架构的实现只是止步于基础,没有实现过如同例程所给的优美架构;没有尝试过自动化测试,对于测试只是停留在自动生成测试样例,手动进行测试和对拍;许多Java编程语法也没有尝试过,如泛型等。这些遗憾希望自己能在今后的锻炼中去完善,改进。

课程改进建议

  • 希望OO课的上课讲的内容能稍微的贴近大众一些。OO课的内容毫无疑问都是OO领域的精华,但是自己在听课的过程中总是感觉到云里雾里,无法从一个小白的角度去理解这些较为高深的知识。导致后期的OO课无法从中获取很多有用的信息,只是觉得难以消化。
  • 建议能强制对架构进行要求或者对架构能多一些讲解和指导。总是觉得自己的架构很烂,但是又无从下手去优化;总是想尝试去优化自己的结构又总是为了实现需求而放弃部分可能的架构优化。希望课程能对架构方面有更直接的要求和更深入的讲解指导。
  • 建议JML单元能进行优化。总是觉得这一单元与JML的关系实在不大,可能架构和数据结构的优化的比重更大一些,或者说大家的重心也只是放在了这个方面,这单元最终的学习并不是很深入。

最后,感谢一学期以来各位老师和助教的付出,为我们面向对象的学习提供了一个体系化,渐进的过程。衷心的感谢各位老师和助教对着门课的付出!

转载于:https://www.cnblogs.com/tsfics/p/11073497.html

OO第四单元作业总结相关推荐

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

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

  2. OO第四单元作业小结

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

  3. 面向对象课程第四单元作业总结

    面向对象第四单元作业总结 一.第四单元架构设计 1.1 思考过程 本单元涉及到UML图的解析和查询,那么架构设计的核心便在于存储结构的设计.由于原本.mdj文件中元素的存储是使用树形结构来组织的,那么 ...

  4. OO第四单元小结暨2019春季学期OO课程总结

    OO第四单元小结暨2019春季学期OO课程总结 目录: OO第四单元总结 一.总结本单元两次作业的架构设计 第一次作业 第二次作业 学期最终总结 二.四个单元中架构设计及OO方法理解 2.1 第一单元 ...

  5. OO第四单元博客作业

    一.UML作业架构设计 1.第一次作业 其中 Main 是入口类,MyUmlinteraction实现了接口,UmlInteractionBase为MyUmlinteraction实现提供了底层功能, ...

  6. 2019年北航OO第四单元(UML任务)及学期总结

    第四单元两次作业总结 第十三次作业 需求分析 本次作业需要完成一个UML类图解析器,所需要解析的只有符合UML标准和能够在Java 8中复现的UML类图.查询指令存在两种:仅与所查对象有关的指令,以及 ...

  7. OO第四单元——UML及其解析器——总结 暨 OO课程大总结

    第四单元总结 第四单元主要内容是写代码解析UML,因此需要理解UML UML相关 starUML的储存方式是一个.mdj文件,通过使用文本编辑器观察这个文件,我们可以看出这是一个json格式储存的文件 ...

  8. OO第三单元作业总结

    OO第三次作业总结 一.JML (一)JML语言理论基础 (1)JML表达式: JML表达式包括以下几种: 原子表达式如\result(方法执行后的返回值).\old(表达式在相应方法执行前的取值): ...

  9. 第四单元作业——UML分析总结学期总结

    本单元主要学习关于Unified Modeling Language (UML)的设计与分析的内容,重点对UML中的类图.顺序图和状态图的表达方式和有效性进行了分析. UML与上个单元学习的JML同样 ...

最新文章

  1. jquery源码解析:pushStack,end,ready,eq详解
  2. c语言220程序,《C语言程序实例大全》原代码220例
  3. python之进程和线程2
  4. 跨链(5)“蚂蚁区块链”之跨链数据连接服务
  5. sqlserver ssms ctrl+e快捷键问题
  6. 一行代码不用写,就可以训练、测试、使用模型,这个 star 量 1.5k 的项目帮你做到...
  7. oracle spring 分页查询,SpringJDBC 调用oracle 通用存储过程分页
  8. 阿里云ECS服务器多种实例规格如何选择
  9. javafx做的天气预报小程序
  10. 「ECharts」电商平台数据可视化实时监控系统之后台开发
  11. UML全程实训(2012-7-7 广州)
  12. 遗传算法GA原理详解及实例应用 附Python代码
  13. 互联网公司干不好上门维修?
  14. 电商小程序基础开发教程(一)需求分析
  15. LintCode168.吹气球
  16. Python时间序列建模基础
  17. 20145213《Java程序设计》第五周学习总结
  18. 王道计算机组成原理课代表 - 考研计算机 第五章 中央处理器 究极精华总结笔记
  19. 蚂蚁员工激励达到1376.9亿元 人均可在杭州买一套283平房子
  20. 用老版计算机弹音乐少年,15年前,这部电影用音乐,拯救了一个迷失少年!

热门文章

  1. centos7搭建公共/私有xss平台
  2. eclipse运行,提示错误:The selection cannot be launched,and there are no recent launch
  3. SQL查询作业执行情况
  4. webstorm 破解方法
  5. Java Email-用Java实现发送电子邮件
  6. 工控机 安装 mysql_安卓系统远程数据库MySql的操作
  7. 失传百年的致富经典(一):投资真经(股票,债券,基金)
  8. 经典语录-每日积累-04
  9. 全网最详细的搭建【青龙面板】+网页登录搭建教程,实现京东代挂教程
  10. IP网络摄像头GB28181协议视频平台EasyGBS中设定录像计划后不进行录像问题原因分析