BUAA面向对象第四次博客

BUAA面向对象设计与构造第四次博客总结

1. 作业构架设计

第一次作业:

​ 首先先弄明白UML中各种类之间的关系,可以得到有些类之间是“包含与被包含”的关系的,比如UmlOperation可能指向UmlClass或UmlInterface,那么可以说UmlClass可以包含UmlOperation。把这次作业设计的所有的类自己可以包含的类有层次的列出来,就形成了一张有层次的图,而把可以有包含的类自己创造一个类,其成员元素为一个包含类,和所有它包含的类,并且为这个类设计最基础的方法。下面以Operation为例,例子如下:

public class MyOperation {
    private UmlOperation operation;
    private ArrayList<UmlParameter> parameters;
    
    public MyOperation(UmlOperation operation) {
        this.operation = operration;
        parameters = new ArrayList<>();
    }
    
    public UmlOperation getOperation() {
        //return operation
    }
    
    public void addParameter(UmlParameter parameter) {
        //add parameter belongs to the operation
    }
    
    public ArrayList<UmlParameter> getParameters() {
        //return all parameters belong to the operation
    }
    
    //other necessary method(s)
}

​ 按照上述方法,创建所有有必要创建的新类,这样便使不同的类之间有了UML本身想表达的关系,接下来只要依据要求添加自己的方法即可。

第二次作业:

​ 和第一次的思路一模一样,第二次多增加了状态图和顺序图,但是只不过是多增加了几个新的类而已。可以按照第一次的方法,先缕清这些类之间的相互关联,然后创造必要的新类,使能表达出UML本身想表达的意思即可。整体构建和第一次作业完全一样。

第三次作业:

​ 第三次作业增加有效性的检测,并没有新增加的类。需要注意的是应该自己研读一下每个规则,注意细节,多考虑一下比较特殊的情况。本次作业理解无误的情况下难度不大,且按照我上两个单元的设计不需要重构,只要实现新增加的方法即可。我这次作业做得不好的一点是我的MyUmlGeneralInteraction类方法行数超过了规定的最大行数,但是由于时间原因并没有修改。

2. 架构与方法理解与演进

第一单元

​ 第一次作业我还处于熟悉java的状态,所以并没有刚开始就尝试用面向对象的思想来编程,而是用了面向过程,分解字符串,化简符号等方法来完成的。后两次作业发现如果用面向过程的思路非常难下手,于是尝试用面向对象的方法来解决。我最后分别创造了多项式类,单项式类,因子类等,其中多项式类包含单项式类,单项式类包含因子,然后采用递归求导的方法解决。这个构架我把多项式,单项式和因子当做一个个对象,其自己进行求导,化简。通过这一单元作业,我初步对面向对象有了自己的思考。

第二单元

​ 第二单元主要是多线程方面的内容,我学习了生产者消费者模式后,这一单元的三次作业都采用了这一模式构建。我在请求输入和电梯之间设置了一个调度器,调度器用来接受请求,对请求进行相应的分析并将请求分配给相应的电梯之中,电梯到了每一层之后,查看目前是否有请求,以及是否能接受该请求。如果能,就让人上来,若不能,就忽略该请求,等下次在满足该请求。

第三单元

​ 第三单元是JML,主要考察的是按照给定的规格实现代码。本单元比较简单,只要严格按照规格实现即可。我在本单元学习了并查集的知识。并查集其中一个应用就是求给定一个图的连通分量个数,在本单元中采用该方法可以有效避免超时。同时,本单元中我也复习了一些有关图的算法和知识。

第四单元

​ 第四单元是UML,主要练习的是UML图的解析。本单元我觉得入手比较困难,所涉及的类比较多,情况也比较复杂。经过分析,我发现这一单元的情况和第一单元有一定的类似性,类之间有包含关系,于是适当借鉴了第一单元的思路,将非底层的类创建一个新类,构建一个图,表示出UML所想表达的意思。然后接下来的三次作业就是在这个思路的基础上不断扩展功能。

3. 测试理解与演进

​ 这个学期,我并没有在测试上花什么时间,刚开始的时候只是简单的手动造几个我认为比较特殊的数据点来做自我测试,后来我尝试了一下自动生成测试数据,并用python测评机进行测试。由于我并没有在测试上花太多功夫,所以这块内容就不多说了。

4. 课程收获

​ oo课程可以说是让我整体体验比较好的一门计算机专业课了,我认为我的主要收获主要有如下几点。首先,我学会了使用java。在大二下之前,我并没有用过java,只是对其“有所耳闻”而已。而这门课程寒假就开始了pre,让我用java写了初步的代码,建立了最初的认识,并在以后的作业中用比较有难度的题目让我熟悉java的各种用法等。不得不说这个过程最初还是比较痛苦的,但是过了一段时间之后便好了起来。其次,这门课程让我了解了一些有用的设计模式和设计思想,这门课程让我了解到诸如工厂模式,生产者—消费者模式等常见的设计模式,并且老师不仅从理论上告诉我们它们长什么样,如何设计,还让我们在每次作业中尝试运用这些模式来解决问题,切身体会模式应用带来的方便与好处,这对我深入理解并接受这些模式是十分有益处的。另外,这门课程老师还告诉了我们一些软件设计的思想,并让我们对于为什么要面向对象有了一个比较深入的理解与感受。最后,我通过这门课程也认识学习了许多其他的工具,例如StarUML等,这些工具都或多或少加深了我对java及所学知识点的理解,同时也让我一定程度上开拓了眼界。

5. 课程建议

​ 1) 希望在课程正式开始之前多一些java的练习,让基础不好的同学在课程开始之前对java最基本的用法做到熟悉。

​ 2) 希望可以适当延长作业开放的时间。

​ 3) 希望每个单元结束之后可以开放一下比较优秀的代码以供学习。

posted @ 2021-06-26 17:07  buaa_lpx  阅读(52)  评论(0)    收藏  举报