OO第四单元作业(UML)总结

OO第四单元作业(UML)总结


 

1. UML作业架构设计

   在两次的结构设计中,我采用了图的结构存储相关的信息,并且将相关的信息存储在父层结构中,在UML中,存在有类图、顺序图和状态图三种不同的表达方式,针对这三种不同的表达方式,我也分别采用了不同的结构进行存储。

  类图,类图中存在有数据种类,如类,接口,属性,操作,参数等等,我将各类型数据新建为不同的类,并且在高层类中实例话底层类,从而模拟出实际的UML结构,如在类中存储多个属性、在属性中存储参数,并且对于类的继承等,以图的结构进行存储,从而使得各类信息都井然有序的进行存储。

  状态图,状态图主要表达的是状态转移的过程,需要判断不同的状态是否属于同一个TimeMachine,新建多个TimeMachine,在TimeMachine中存储其包含的所有状态,并且将这些状态以图的形式进行存储,这样在查询状态间相互转移的过程,可以利用图结构进行查询,将更加简单。

  顺序图,顺序图主要表达的是类属性间进行消息传递的过程,其结构比较简单,构建多个顺序图,在其中存储相应的生命线,为不同的生命线进行消息的计数即可,较为容易

  所以这次的结构,主要将这些被分解的信息,再统一重新建立新的关系,联系在一起进行存储、分开管理,将十分方便。程序的类图表现如下:

  程序在查询的过程中,如对类的查询,往往需要对其父类进行相应的查询,对于各类信息,在查询的过程中都将被换缓存起来,而对这种需要查询父类的结构,如对A的查询需要查询A的父类B,将对B进行查询,再对A进行查询,此时A可以直接调用B的结果,所以对一个类的查询,将以洪泛的方式遍及其所有的父类,避免重复查询,提高效率。

2. 总结四个单元中架构设计及OO方法理解的演进

2.1 表达式求导

  表达式的求导,关键在于如何分割出不同种类的项,并且将其结结构化的存储起来。在指导书中提供的,将各种因子通过继承相同父类的形式存储起来,为不同的因子实现其独有的求导法则,并且在表达式的层面中完成完整的求导法则,就可以将数据很好的管理起来,并且实现求导的功能,这种架构也被我应用在我的作业中,感觉这种同类间合并并且单独实现其特有功能的方法,对组织数据有着很大的帮助。

  在优化的过程中,基本上就是各显神通了,我只做了前两次的优化,第一次的优化很简单,第二次的优化利用sin2+cos2进行优化,使用了深搜的方法进行优化,但是深搜对于个例数据容易出现问题,最终是限制深搜的深度,从而折中。

  在这次实验中给提出的这种架构,能偶让我们将同类数据合并,并且又为不同的类别实现不同的方法,让我体会到OO的魅力,使用封装、多态、继承。

2.2 多线程电梯

  多线程电梯这次的作业中,主要需要设计电梯、调度器、输入线程,三个线程进行协同操作,主要的作法为,让输入进程不断读取数据,每次读取到数据即提醒调度器进行调度,调度器需要读取所有电梯的状态,判断当前的需求分配给哪台电梯产生的收益最大,即将该任务分配下去,再唤醒电梯执行相应的载人的任务。为了避免轮询对CPU的损伤,在电梯完成任务、以及输入器得到所有的输入则提醒调度器进行判断是否满足退出的要求,满足即可退出。

  从上面的架构的说明上来看,这次的作业更多的是让我们学习如何书写实现并发程序,这里需要注意的是线程的安全性,多个线程之间如何互斥访问临界资源,可以对方法进行synchronized操作,使其原子化,或者使用PV锁的形式,完成限制访问。

  这里更多的是并发编程的一次实践,对于多电梯的实现也需要完成继承等方法,编写高效的调度程序则是这次的难点。

2.3 JML

  JML单元的作业是根据所提供的JML编写可执行相应功能的代码,这里实现的是一次路径的管理系统,让我们体会JML的功能。采用的架构也很简单,即将不同数据以图结构形式存储起来。由于整体的代码框架已经给出,所需要的代码量并不多,更重要的是如何构建图,进行相应的查询搜索。

  这次作业更多是的让我们感受JML的使用,在使用的过程中会发现JML的确具有很好的功能,对于开发过程中也有很好的限制,比较适合在规定化的工程开发中使用。

2.4 UML

  UML这次作业的架构即如上所述。

  本次作业更多的是对Java程序的一次形象化的表示,用来表示类图、顺序图、状态图等转移方式,但是在作图的过程中略有繁琐,这样会更好的表达自己架构的含义,更方便他人理解。

3. 总结自己在四个单元中测试理解与实践的演进

3.1 多项式求导

  在这次作业中,进行测试的时候,需要判断求导的正确性,这次作业其实不太存在边界条件的问题,所以基本上多测几组组合就可以保证正确性。

  这里我采用python进行随机生成测试样例,并且使用matlab进行计算对比结果的方法,保证了正确性。

3.2 多线程电梯

  多线程电梯,多线程电梯,这里的正确性其实也比较容易判断,主要需要判断的点在于:是否会发生死锁,只要避免死锁基本上不会产生正确性问题。这里的测试更需要临界测试,因为多电梯运行速度不同,我们可以使多电梯同时到达某一层,在这一层进行人员的交换,判断是否可以正确的执行,来测试避免死锁。

  这里我采用了python来进行随机测试,并且统计运行时间,来比较自己算法是否较优。

3.3 JML

  JML这次的作业主要是构建图查询,在这次作业的前两次中我自己使用python针对每一种语句都进行了随机的构建,并且使用python进行了相应的正确答案的构建,进行了大规模的批量测试,前两次也都得到了不错的成绩。但是在第三次作业由于作业截止时间突然更改且没有及时通知,仅剩下不到10个小时从看题到做题的过程、根本没有时间进行测试,导致后续的大规模失分。

3.4 UML

  UML作业需要构建图的完整行,测试的过程常是以自己绘制相应图,再经过转换进行测试。

4. 总结自己的课程收获

4.1 java 层面

  在java语言层面自己有了较大的进步,了解熟悉了这门语言

4.2 程序思考

  在这些作业中,写程序之前不再是简单的以自身的角度来看待问题,而实学会如何将各种数据进行拆分,拆分成合理的粒度,以不同的数据结构存储起来,再进行封装使用,使得自己的程序更加竟然有序。

  合理的架构使得自己的程序更加简洁易懂,这点在多次作业中都有所体现,自己也在逐渐的去思考这些问题。

4.3 工程开发应用的增量化设计

  在每次作业的迭代的过程中,如何预留空间给以后进行功能扩展,也是需要思考的问题,这也是在工程上需要着重考虑的问题。

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

建议:

(1) 上机内容实现课上所学本是好的,但是中间没有消化的时间,而且这些内容也很容易,可以将其做成小作业。

(2) 课程平台上在使用中,讨论区不具有索引功能

(3) 本课程的测试流程为中测-强测,强测是在未知的情况下进行的,这就对大家的测试有很高,Junit却是浅尝辄止,不知有没有可能对测试开设相应的单元,进行系统化的训练,让同学真的懂得如何进行测试。

猜你喜欢

转载自www.cnblogs.com/Ti-amo/p/11074075.html