微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OO第四单元总结——我的踩坑历史大全与顿悟之路

一、第四单元架构设计

​ 这三次作业中架构一脉相承,第一次作业搭建类图分析,第二次作业加入顺序图、状态图分析,第三次作业加入有效性检查器。下面以第三次作业为例,谈架构设计。

  • 解决输入顺序导致空指针的情况——多次遍历elements:

    ​ 先建立UmlClass,UmlInterface等的索引表,避免element中相关元素还没有被输入,如UmlGeneralization中target还未被输入等情况。

    ​ 如先把UmlClass,UmlInterface存进HashMap里,最后再遍历UmlGeneralization。

  • 对设计到请求操作的属性,建立Myxxx,(如MyUmlClass),并在其中建立其拥有的属性层次,封装好相关请求操作。

二、在四个单元中架构设计及OO方法理解的演进

​ 感谢OO给我一个顿悟如此多思想的机会,下面将结合我踩过的坑,谈谈我在架构设计以及OO思想方面上的学习之路。

  • 第一单元初探OO——函数求导:

    • 慌忙的开头——赶时间赶成面向过程

      把预习作业拖到第一周的后果,就是第一周忙于学正则表达式赶作业,一边赶预习作业。直接导致写作业的时候巨慌没架构没思考

    • 顿悟的后继——领悟抽象
      递归下降抽象加减乘除的运算成为一个项,只考虑项与项之间的计算,分层处理。这些都是我在编程作业完成之后学到的宝贵的东西。当然学到最深刻的东西还是面向对象这种抽象方法解决复杂问题时的简便性,以及分析问题架构结构的重要性。

  • 第二单元多线程——电梯换乘:

    • 混乱的开头——过度耦合的混乱
      在电梯问题里,继续踩新的坑,继续学习。第一周把两个不该放一起的结构(调取器和等待队伍)写在了一起,导致出现了玄学bug连弱侧都没过,谢谢助教的帮助,重构解耦解决了问题。
    • 顿悟的后继:
      分析清理解透问题,是我在这单元学到的最宝贵的思想。之前之所以会把错误结构耦合,本质上是不理解结构的作用不理解此结构为什么适配这个情境
      莽必出事儿,小是写千行代码,大是程序根本不能用。
      在第二单元中还学到了生产者消费者模式集中/分布式调度,处理死锁,优化调度策略等。
  • 第三单元JML——社交网络:

    • 细心是种能力&性能的重要性:
      由于这个单元是依照JML写代码,所以架构基本依照给定的JML。按理来说比较轻松,但这是我得分最差的单元。
      细心是种能力好的测试可以亡羊补牢。事后根据给定的错误数据点改bug很容易,但难的是在写的过程中严格依照细节,在写完一部分后进行单元测试。并且兼顾性能 ,避免O(n^2)的算法。
  • 第四单元UML——UML解析器:

    • 学习UML知识:
      根据UML结构,建立简单的映射、索引结构。领悟UML作为一个标准的建模语言,描述的准确性。

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

在这个学期中我对测试的理解与实践都不太好,与大佬交流不太够,自己不会python的我好菜啊...仅从我目前的理解谈一下对测试的理解:

  • 边界数据的必要性:

    ​ 像在第一单元中依据数据限制,有必要构造超长数据进行测试。

    ​ 对特例情况,也有必要进行测试,以满足程序的完备性。

  • 警惕可能的空指针:

    ​ 不知道哪个方法会给你RE的惊喜,有必要构造返回值为null的数据进行测试。

  • 测试需要建立在一定的强度上:

    ​ 手动构造的数据,需要建立在具有一定强度,即具有一定复杂性的基础上。如在第四单元里构造继承、实现接口、自关联等多层的复杂数据。

  • 测试的本质还是理解问题:

    ​ 不提对拍测试法,自己构造数据自己对照结果的测试,本质还是考查自己对问题的理解。若对问题理解有误,则对理想结果的理解就会偏差,无从与自己的结果对比,失去测试的意义。

四、总结自己的课程收获:

通过OO课,在写代码的思想和方法上都受到了很大的启发。每个思想顿悟的具体内容见(二)总结,此处不做重复,仅作列出。

  • 写程序的方法

  • 理解“架构”对写程序的意义

  • 理解"测试"的重要性

  • 写程序的思想:分析问题,感谢课程组提供以完成一个目标为导向的过程,

  • 理解"抽象思想"“分层思想”,

  • 理解"解耦"

五、立足于自己的体会给课程提三个具体改进建议

1.改进讨论区结构:

​ 在讨论区的讨论中,帖子是同学们的分散式讨论为结构的。即使在标题上进行简单标注,由于楼内内容也具有一定价值,所以也需要辛苦爬楼。而由于讨论区内容的繁多,容易出现重复提问,找不到相应问题的答案等情况。

​ 建议:以第四单元为例,建议以对每个rule的讨论建立专楼

  • 在楼中显示回复顺序把助教官方解答,高赞回答优先显示
  • 跟帖时可选添加关键词,描述自己回帖的主要讨论范围。
  • 同学们可以搜索相关关键词回答,直接找到关心的问题。
2. 希望实验课课后有反馈:

本学期一些涉及到编程的较难实验没有反馈,只是交上去告知是否编译通过,没有改正的环节,起到的学习的效果有限。

3. 希望助教更清楚的阐释题意,避免描述太过简短,尽量减少表述不清。

​ 在第四单元的作业指导书中,每个rule的描述只有一两句,语义有很多模糊的地方,并且示例给的太过简单没有覆盖到我疑惑的点,给我的理解造成了一定的麻烦。

4.希望每单元提前公布整个单元要涉及的内容,方便架构:

​ 在第一单元中,因为不清楚后面作业要干什么,所以在写方法的时候为了省事进行了转换处理。导致下次作业条件变化时适配不能,只得重构,希望改善这个问题。

最后的感谢:

​ 谢谢为我解决疑惑的大佬、助教们,谢谢把课上的这么有趣的纪老师,谢谢踩了很多坑没有放弃修的自己。

Sein heißt werden, leben heißt lernen,

wenn du das Gold von den Sternen suchst,

musst du allein hinaus in die Gefahr.

继续学习继续成长。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐