OO第四单元总结

OO第四单元总结

首先恭喜OO课完结撒花~

先来说说这个单元

一、总结本单元架构设计

首先我得说一句“原来UML是这玩意啊”,前几个单元写博客的时候不都让画UML的图嘛,类图,顺序图啥的,当时一方面可以粗浅的理解啥叫类图顺序图,而另一方面每当拿着Intellij IDEA自动生成的类图我都一脸懵逼,看是确实看不懂,但看着还挺高大上的,(还有就是老师让粘就粘吧。但这单元学完我知道啥是UML了,体验还不错。

T1:

 

 

 第一次作业赶上了烤漆好像,就没好好写,思想上来说基本上是面向过程的,不过好在比较简单。

这里犯了一个bug,就是在getImplementInterfaceList中我对于已经添加过的类重复进行了添加,拖慢了程序运行速度并造成了死循环。

T2:

 

 

 第二次作业在第一次的基础上拓展了顺序图和状态图的解析,(我感觉就是写了俩新的程序,这次还比较当人的写了statemachine和Interaction的类,设计这两个类的目的是通过理解UML发现两个图的层次结构很清晰,因此找到了如Statemachine和Interaction这种的比较上层的类简历新的类,意在使管理这一层次下的数据更为方便。这次出现了两个错,一个是错误理解了状态转移,以为从状态A到状态B只有一个状态转移。另一个是少加了一句话(可惜

U4T3:

 

 

 

 

 

 这次简简单单加个格式检查,主要难点在于要求的规范上,得吐槽一下这次的指导书问题有点多...

二、OO总结

啥是OO

这块我还挺乐意说道说道的,之前对于java和面向对象属实是一无所知,我还记得老师讲第一节课的时候,就讲什么是面向对象,当时给我听的还是云里雾里的,什么继承,多态啥的,以及后面讲的规范封装啥的,看起来似乎都在指向这个问题的答案,要说我现在对面向对象的理解有多少,我不敢保证,不过我还挺乐意以我的角度捅破这层“窗户纸”的。


 

我理解的面向对象:以对象(或者说数据)的角度去解决问题。

这看起来属实像是废话,不过我还是想解释解释的,我第一次理解什么叫面向对象是发现,当我们想要把一个问题里设计的那些数据列出各层次的时候,我发现我们似乎通过面像过程是不大好去思考的,比如说,我要去描述一个父亲有许多孩子这么一个问题,用面向过程的思想我们可能要进行的是一个流程,是对每一个孩子进行判断判断他是不是父亲的孩子。而如果通过面向对象的思想,我们可能是要描述一个层次结构,一个父亲对象里面会跟很多的孩子简历上下级从属关系。这就是面向对象与面向过程的一个重要的区别——我们关注的是一个流程,还是一个层次(或者说架构?),我认为这是面向对象的核心,其余的比如说类的继承,接口实现,抽象等就是为了这个核心服务的。然后我们引入了下一个问题:

啥是架构

就像我上面说的,架构似乎就像是一个和流程相对应的,用来描述一个问题(或者系统啥的)的一个视角,我们可以类比UML,类图就像是一个架构,从类和类(数据和数据)的视角去看待问题,而时序图就是一个流程。这两个视角未必分的出优劣,但这一学期下来似乎看起来架构的视角好像解决的问题更顺手。那一个架构怎么样是比较成功的呢?我的理解是只要能够方便的解决问题就是成功的,比如说上面说的爸爸孩子问题,我建立了一个父亲类里面包含许多孩子类也许比每个孩子类指向一个父亲类更适合描述一个父亲有多个孩子的问题,因此这种架构就更加好,经过四个单元的学习,我认为一个好的架构应该可以做到:

1.层次会比较的清晰简单:这个并不强求,但是在解决问题的基础上一个简单的结构更容易被理解

2.可以完全的表现出对应的问题:这是最基础的,(不然连强测都进不了

3.通过这些类我们可以简化函数的编写:在面向对象里我们仍然需要函数作为处理问题的主体,但是类的引入有时候让函数的编写相当的舒适(有点类似写了几行伪代码就解决问题的感觉

4.可拓展性:这个不是面向对象要求的,而是一个好的程序应该做到的,但是基于面向对象视角下问题的处理依赖架构,因此我认为一个好的架构应该具有拓展性

(这里我又重新读了一下感觉自己写的有些抽象,用大白话再说几句,就是说一个架构是我们要关注的一些东西之间的关系,我们也许会在脑子里构建个图,比如说一个爸爸对应一个妈妈,一个夫妻有好多孩子,每个孩子有自己的配偶.....这个图我们的表现形式是多样的,但是他我认为都可以说是一个架构,而在编程中,我们需要通过面向对象的语言把图啥的转换成可执行代码,差不多就是这么一个关系

测试,说多了都是泪:

我感觉这四个单元最多的时间都花在了测试上(强测互测制度太难顶了),说说测试的一些理解吧

自动化测试:前两个单元就是用的自动化测试,结果为了写一个合适的测试程序花了不少的时间....自动化测试的结果跟你写的测试代码有直接关系。

单元测试+测试驱动编程:这不是啥新东西,但是我最近几周才去尝试这个,这样的测试流程是我先写实现一个小的功能(几十到一百多行),然后根据这个小的功能去写相应的测试,一方面它符合单元测试的思想,而另一方面我们也在遵守根据测试来写代码的思想,结果上来看还算可以,只是整个编程时间被拉长了不少。

对拍:对拍真的香,但真的不实用,这里的实用是说在工业上,如果我们要去解决一个展新的问题,没程序对拍诶...

我还学了啥:

多工具编程:我们需要合适的工具去做合适的事情,性能分析,单元测试,git.....

多线程:多线程是崭新的问题,线程安全是我们需要主要考虑的问题,抓住共享资源就可迎刃而解。

算法和优化:算法不主要,但不代表不重要!能优化性能时候不要偷懒,但有时候评估到优化效果不好时候也要果断放弃。

多交流,多学习:这门课我感觉绝大部分内容还是要靠自学,多搜刮下往年博客,大佬分享啥的,赞!

博客:我写博客确实有些糊弄事,主要还是人懒,不愿意打字或者多表达,不过我也发现了博客好像另一方面还挺不错的,因为自己好像可以随便说说啥都行,这里老哥说话又好听,个个都是人才,我超喜欢这里的,博客暑假还是想用起来。

建议:

1.指导书可以写的再详细些,好多小错误和没说明的地方确实在写代码时候令人血压升高。

2.整点新的题啥的,年年多项式电梯uml啥的不够革新。

3.吴老师讲课相当的棒(实话),不过如果能不拖堂就更好了


最后,OO圆满结束,感谢这半年来吴际老师,每一位助教,我请教过的每一位同学和hack房里的每一位同学,你们都让我在这半年来有所进步,对于编程这个东西有了新的思考,感谢。

 

posted @ 2021-06-26 18:47  19373699  阅读(63)  评论(0)    收藏  举报