OO第四单元总结

UML单元架构设计 java

第一次UML做业程序员

这一单元的做业是要求咱们对数据之间的联系进行解析,重建数据结构来存储有效信息以方便查询工做。算法

这一单元我没有像不少人同样,以类为一个单元进行封装,我是以整个类图来进行操做的。由于此次做业只是对类图的查询,因此我用多个hashmap存储类图的信息,在一个类里面完成了全部的操做。我起初觉得这样的架构不是很好,但当我作第二次做业的时候,以为这样以hashmap存储全图信息,也不失为一种很好的封装结构。编程

第二次UML做业设计模式

此次做业是上一次做业的扩展,总体架构思路没有太大变化。我用第一次做业的方法扩展了三个类,分别存储类图、状态图、顺序图的有效信息。类内部实现自身对应的查询操做。数据结构

本次做业最难的是实现模型有效性检查。其中让我惊艳的是将类的继承关系,类的实现关系,接口的继承关系,所有以点线的形式存入图中的方法。以某一点为源点,利用dfs算法就可获得一条路径。若是加入的节点在visit路径队列中已经存在,如果源点则是循环继承,不然为重复继承。在没有循环继承以及重复继承的基础上,以类为源点,则其获得的路径中包括他所有继承的类以及他所有实现的接口,以接口为源点,则其获得的路径为其全部的继承的接口。这些数据能够存储下来,可用于类图的相关查询。多线程

 

OO课程总结架构

1.四个单元中架构设计及OO方法理解的演进 编程语言

OO课程的每一个单元分红两到三个阶段,后一个阶段都是在前一个阶段的基础上进行扩展的。所以一开始有一个良好的架构是很是重要的。工具

好的架构的特色是简洁、清晰、高内聚、低耦合、易维护、可扩展的。他须要咱们对做业进行抽象。这抽象的过程能够凭借不少咱们生活中的经验数学方面的知识等。好比电梯那一单元,将咱们要实现的电梯程序,可必定程度上地映射到现实生活中的电梯:现实中的一我的可抽象为一个请求,每一个电梯开关门的控制数据可映射到电梯的按钮,电梯运行的算法也能够联系实际状况中的运行状态。好比JML格式地铁那一单元的第三次做业,它的思路就运用了数学知识,问题的核心在于解决换乘次数的统计(其他新增的问题的根本仍是在于换乘统计),经过将一条path连成彻底图来表达从该path 上的任意两点间能够直达。直达则只需通过一条边,赋予边权重,计算出两点间的权值则可知两点间的换乘次数。而在这一个图上给边赋予不一样的权值,经过相同的计算方法就能够解决不一样的问题。不得不说这个模型太巧妙了。因而可知,在生活中咱们就须要学会对事物进行层次划分与联系映射,培养本身的抽象能力与思惟的逻辑性。再者,对于计算机这门专业,数学有着无可替代的重要性,端正本身对待数学的态度,学好数学是必须的。

 

2.四个单元中测试理解与实践的演进

OO做业中用到的测试方法基本上可分为三种:

(1)根据程序特性自我设计测试数据;

(2)生成大量随机数据进行测试;

(3)经过OpenJML、JMLUnitNG等工具进行自动化测试。

第一种方法效率比较低,但能够锻炼咱们的逆向思惟,培养自身逻辑的严密性。这种方法,是咱们在编程的过程当中自我改进修复经常用到的方法。针对程序的处理过程,咱们会意识到哪些地方容易出错,自我检查的同时也能够对他人进行hack。

第二种方法是效率很高的,并且几乎能覆盖到全部状况,但要求能正确编写数据生成脚本。(这都是大佬用的方法,菜鸡不会~)

第三种方法,也是OO课程想培养咱们学会的测试技能,即经过JML工具链,自动化地生成测试样例。我对这方面的了解与掌握并非很深刻,只是停留于课程的要求。了解了它的简单操做。这种测试方法的好处在于,测试数据的生成全程自动化,且理论上能覆盖到全部的状况。但它的弱势也是显而易见的:学习成本高,须要花更多的时间在代码中编写JML测试相关的语句,这是有必定难度的。

 

3.课程收获

这一个学期的OO课程学习,收获仍是不少的。

首先,我学会了一门语言,基本掌握了Java的使用。java是一门面向对象编程语言,不只吸取了C++语言的各类优势,还摒弃了C++里难以理解的多继承、指针等概念,所以Java语言具备功能强大和简单易用两个特征。Java语言做为静态面向对象编程语言的表明,极好地实现了面向对象理论,容许程序员以优雅的思惟方式进行复杂的编程。

其次,OO结合OS让我对多线程有了较深刻的理解。我经过查阅大量的博客自学了不少知识。从彻底陌生到慢慢熟悉,基本掌握了多线程间的同步、互斥问题,也了解了一些设计模式的知识。

再者,对图的操做有了进一步的提升。当初学数据结构的时候,图的部分并无掌握得很好,这学期后两个单元对图的操做不少,是来还债的。学习了不少新的算法,并能根据本身的须要进行自我设计。

而后,还学习了UML和JML的相关知识。JML是基于“契约式编程”的一种规格描述语言,相比于天然语言注释,JML更加严谨和清晰。咱们双向地学习了这一语言,即根据需求撰写规格,以及根据规格实现代码。UML经过可视化的图形形式,帮助开发者对大规模、复杂系统进行建模,这对于设计面向对象的架构具备重要的意义。经过对UML文件的解析,咱们对UML以及面向对象语言的特性有了更深的理解。

最后,也是最重要的是,这门课让我创建了面向对象的思想。面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言能够概括为如下几类:系统中一切事物皆为对象;对象是属性及其操做的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的惟一形式,也是计算的惟一形式;方法是消息的序列。面向对象不只是一种编程技术,它更是一种思考问题的方式,一种世界观,一种哲学。在这一学期的课程学习中,我对此有了更深刻的感悟。

 

课程改进建议

  1. 但愿BUG修复能够挽回强测中必定比例的分数。强测的数据并无覆盖性,每每强测满分的人互测中也会被找出不少bug,然而由于一个同质错误而强测爆炸的人的分数几乎没有挽救的机会。强测的分数几乎起到了决定性做用。BUG修复能够挽回强测中必定比例的分数,能够适当地提升公平性。
  2. 但愿课程组能合理安排实验课时间,让同窗们有准备地参加实验课,提升实验课的实际价值与效率。
  3. 但愿课程组之后课程安排变更可以提早必定时间在公众平台给出官方通知。不是在鱼塘随口一说,或者等同窗问了再说。
相关文章
相关标签/搜索