OO第四单元及课程总结
第四单元及课程总结
第一次作业
UML类图如下:
这次作业还是实现一个接口,实现九个方法对应九个功能。一开始没什么太好的思路,所以导致整体架构并不好,都是针对功能一个一个去实现,每次都用for循环,需要什么就for一遍去搜索...因此写了很多方法,对复杂度的处理不是很好,因为没想出别的什么方法...我感觉唯一比较好的一点是构建了一个能通过id找到对应UMLElement的HashMap(idToEleMap),不过这一点应该很容易想到...
这种方法写完之后,对UML图的结构和这次作业也有了更进一步地理解,于是想改一改架构,想构建出一个类似概念梳理图的东西,这样不仅会使架构清晰一点,也会方便很多操作,但比较难的是构造出这个体系。比如,每个Class有自己的Operation,也有自己的Attribute,Operation又有自己的parameter,并且对于这些Class、Operation、parameter之类的还会有对应的一些其他参数,比如说明是public、private,类型是return还是in等,还有Class的父类,实现了哪些接口等。其实就是实现一些映射关系,当然也可能有其他的比较好的架构,但是我没想到,并且我想到的这些自己也没有实现,也只是一个初步想法,实现之后对于这个体系的查询也有一些难度,一环套一环的
一些同学说需要构建图,树,但具体我不太理解
第二次作业
UML类图如下:
整体上和第一次差别不大,第一次架构就拉稀不太好。在检查有效性的部分,002和008比较容易实现,在不关心复杂度的情况下,一个一个统计出来并进行对比,写了很多for循环...但在检查009时的重复继承,涉及到了类的继承,类和接口的实现关系,接口和接口的继承关系,情况一下就变得复杂了,这样的架构很难进行一次性的覆盖检查,因此我将这三种情况分别进行检查。但检查接口的继承遇到了问题,接口支持多继承,在搜索一个接口的所有父接口时,感觉与树的DFS和BFS很相似,但我一开始并没有构建出树之类的良好结构,他们都是一行一行Json字符串,因此这方面实现起来比较困难。这次也再次感受到了架构的重要性,架构在写代码的后期作用非常大,也就是在完善、添加功能时,好的架构能省去不少时间,但在前期就感觉架构没什么用,有时候还会使代码异常的复杂,可能会做一些不必要的事。而且,想要实现好的架构也很困难。所以面临了一个问题,是花时间精力先制定一个好的架构再写代码,还是根据要求一个一个完成,像填坑一样写代码,按理来说前者肯定好一点,但我一般都选择了后者...主要是为了完成作业,其次是想到的一些好的架构自己实现不了...
四单元架构设计及OO方法理解
第一单元:刚接触Java、OO,没有架构的概念,第一单元作业没有架构...甚至在第一次作业中一main到底...如果能像老师说的写出对应的求导接口,专门的解析类,架构应该还不错
第二单元:接触了多线程,虽然对架构的概念依旧不是很清晰,但是有了一点OO的思想,学会了写功能独立的类,写的代码看上去也不像之前那么臃肿,如电梯类负责上下移动,接人,专门写了一个Person类存储一些关于人的信息,并且配置进出电梯的方法,整体上比第一单元好
第三单元:这单元作业主要是完成官方提供的接口,比较重点的架构设计就是对层次的处理,以及最后一次作业对地铁图的构建,注意高内聚,低耦合的原则。自己在写的时候没有想到把图建模层和一些基本数据层分离开,揉到了一起,看上去又有些臃肿。
第四单元如上面说的
关于架构的理解,这四单元整体上还是有一些进步的,从一开始没有架构的概念,到后面每次写代码之前会稍微提前设计一下架构,虽然最终可能没有实现,但有了一个思考的过程,也为实现这样的架构进行过一些尝试。每次作业的过程基本是想出了一种感觉还不错的架构,然后慢慢实现,发现实现不了,于是简化,最后简化的跟没架构一样...而且架构好像永远没有最好的,只能说是否合适,合适程度怎么样,比较有主观性,我认为适合自己的架构就是好架构。有的架构是真的好,但是你如果没法实现,那他确实没有使用价值,但能参考参考倒也不错...关于用OO方法写代码,从第一次作业后我们都在努力改变,最明显的就是写的类多了,不一个main写完了,会用接口,继承,public、private等关键字了。但就个人而言,我对接口的使用不是很多,理解也还差一点,以后还需要继续加强对接口的理解,对Java特色——多态,继承的理解
关于测试
见识了对拍器、Junit测试,自己写脚本生成随机测试数据,这样的测试是比较保险、全面的,但同时需要花费足够的时间去部署实现,也需要一定的技术。我跟着讨论区学了学,但具体怎么用还是没搞太懂,一直在手搓数据...没事闲的时候自己思考思考,看看有什么特殊情况,然后构造几组数据试一试,这样确实是不太好的,运气成分太大。测试部分一定不能轻视,尤其是自我测试,他也是我们代码的一个组成部分。一个代码好不好,能不能投入使用,应该只能通过测试数据来反映了,这是个硬性指标,因此,debug能力也是相当重要的。他和测试是分不开的,因为你发现了bug就会忍不住去de,这是任何事都阻挡不了的
课程收获
OO课极大地培养了我的自学能力,自力更生的能力,以及尝试、坚持的精神。从对Java几乎一无所知,到现在能用Java写一些看上去比较牛逼厉害的程序,虽然这些都是很基础的东西...其实不应该说我们学的Java,应该是我们学的OO,因为我们的课并没有针对这门语言进行学习,像大一学C那样,学习语法等(类似软院那样)。我们学的更偏向Java的应用,也就是OO这种方式。因此,在慢慢掌握一门新的(编程)语言的同时,还增强了对面向对象的编程语言应用的理解(C++,java,C#)
尝试:有时候刚看到指导书的时候,就会感觉这次作业没救了,写不出来了,交不上去了。但是作业不交不太好,分数低,还可能被塞进补给站,只能强迫自己思考。但是尝试后,发现事情好像没有想象的那么难,下下功夫好像能行,于是继续尝试
坚持:尝试后觉得可行,秉着放弃了可惜,之前的努力会白费的心理,以及补给站的无形压迫,无论结果如何,坚持完成作业
虽然写代码很累,很烦,但是每次写完时还是会收获一种奇怪的满足和快乐(尤其是AC的时候),也有一种自豪感
三个改进建议
1.感觉一开始的实验难度有些大,后面几次还行,实验难度可以适当调整一下(大佬除外)
2.实验(上机)和理论课的时间搭配可以调整一下,早上刚学,下午就要用。尤其是新开一单元时,刚接触新的东西,可能很难理解(大佬除外)
3.还有一些看法个人主观因素比较多,就不提了,但是建议OO课越办越好