OO第二单元作业总结要求

0.前言:

对前一阶段的三次作业进行总结分析:

三次作业可以大体区分成三部分内容,一部分是为了让我们懂得如何使用正则表达式去判断输入格式是否正确,水文检测,求导都涉及到了正则表达式内容;第二部分是为了让我们懂得类之间的封装,继承和多态 ,图形继承,图形继承与多态,图形卡片游戏都涉及到了正则表达式内容;第三部分就是让我们懂得如何让代码更简洁,考验到我们的设计思维的附加题求素数,它需要我们有很好的算法思维,如果没有好的算法,题目就会出现代码运行超时的提示,是很不错的题目类型。

1.作业过程总结:

①总结三次作业之间的迭代关系:

第四次作业:依照类图编译代码,相当于给了模式写填空,涉及知识就是简单的类的继承,和如何使用正则表达式;

第五次作业:是两方面知识迭代,一个方面是在继承的基础上加上如何用多态实现对所有该父类类型的子类对象存在同一个对象数组中,并且可以利用多态实现引用父类对象指向子类,另外一方面是正则表达式,从简单的判断是否正确要实现对不同类型的字符串分组,处理,再求导,增加了可用度;

第六次作业:是对继承和多态的进一步深入,在实现对父类排序接口利用多态实现实际对子类的排序。

②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性:

从图形继承到图形排序游戏就很清晰的解释了封装继承和多态关系。图形继承题目里面含有多个图像,包括三角形,圆形,矩形,梯形。这些图形属性的设置都采用了封装,将他们的属性都设置成私有类型,所有的图像都继承了shape这个父类,并且他们的类又有各不相同的内容属性,这就实现了多态。

③作业过程遇到的问题及解决方法:

第四次作业中的第一题水文校验直到作业时间结束我也没有将题目拿到满分,第一个阻碍可能是在正则表达式的测试所用的时间过长,第二个阻碍是老师在这题中没有给出类图,这极大增加了题目的难度,这题就需要我们精心设计各个部分的内容,最终达到目的。第六次作业中需要用到comparable这个接口去实现排序的功能,在老师还没有讲此内容之前我就开始写了,这就导致了我对这个接口内容毫不知情,这时候就需要我自学这部分内容,所以我在网上找了很久的资料,之后还是半蒙半懂。我在电脑上对代码测试了很久,最终学会了怎么使用这个接口进行排序。

④每次作业花费的时间比例:

就拿三次作业一道题平均所用时间来看:

第一次作业所用的时间大概是六个小时。

第二次作业所用的时间大概是十二个小时。

第三次作业几乎每道题都要用到二十四小时。

⑤对编程过程的严谨性的认识及教训:

就比如在水文校验和多元函数求导的两个例题中,它所需要校验输入的格式是否正确的正则表达式需要我们提前测试好,如果在测试的过程中稍加不注意,就会导致编程过程出现报错的情况。正则表达式一般情况下都很长,所以我们要更加的严谨,不要逃有任何的马虎。

2.OO设计心得:

①对面向对象三大技术特性之间关系的理解

封装就是把普通的对象进行封装,对象的属性设为来私有的,对外提供getset方法,其他类只能通过getset对对象属性值进行操作。继承是发生在两个类之间源,一个百类继承另一个类是说这个类属于另一个类,具有另一个类的所有属性和方法,同时它还可以有另一个类不具备的方法和属性。多态是建度立在继承的基础上的,一个父类对象问可以产生多个不同的子类对象答,根据这些子类对象的不同可以具备不同的方法,也就是说表现出了不同的形态即多态 

②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

<单一职责原则>:单一职责原则顾名思义就是一个类它只实现单一的功能,通过设计多个类,再把类的功能一一实现。单一职责的使用降低了类的复杂性,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多,提高类的可读性,提高系统的可维护性,降低变更引起的风险,变更是必然的,如果单一职责原则遵守的好,当修改一个接口的功能时,可以显著降低对其他接口功能的影响。

<开-闭原则>:开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件复设计中,当制对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件百实体的情况下对其进行扩展。这种软件设计方式其实是一种目标,它考虑了度软件后期的维护等其它因素。一个软件系统如果可以达到这个目标,那它就是问可扩展、易维护的。在软件设计中,众多的设计模式的应用就是为了达到这个目答标。 

③OO编程思维的理解:

面向对象的思维更符合人认识和思考问题的方式,面向对象的概念和应用已经超越了软件开发和程序设计,扩展到多个的领域,其中一个应用的分支就是面向对象的知识表示法。这种表示法把组成客观世界的实体抽象为数据和对数据的操作,并使用类把数据和对数据的操作封装成为一个不可分割、互相依存的整体。

④类设计心得:

如何设计一个合理的类,让设计的多个类形成有机的链接,最终将程序的要求实现出来,这是我们编程中面临的问题。我们在写作业的时候,老师几乎都是在实验指导书中已经给好了类图,但是细想一下,如果老师没有给出类图,这题的难度可就不单单是翻倍而已了,它需要我们精心设计我们的类图,让程序实现。类的设计需要我们对程序中的内容逻辑清晰,把各个内容之间的关系合理的连接起来,并且要在保持代码的简洁性的情况下将类包设计出来,这对于我们初学者来说是一个很有难度的事情。

3.测试的理解与实践:

①测试对于编码质量的重要性:

测试可帮助你对你的代码放心。对一个稍复杂的问题写一个解决方案,然后手动测试,你只需要这么做就可以了。如果你的代码难以测试,那么可能是你代码没有写好。通常情况下,因为它迫使你去思考边缘情况——010 ^12nullundefined。这使得你有机会来思考。这些灵感突现的时刻也可能来自最令人沮丧的情况之一:当你的代码和测试不一致的时候。你正处于不知道哪个才正确的两难境地。如果你碰到这种情况,那么设计可能有问题,或者你的前提假设发生了变化。把它看成是一个好兆头!你的代码将会更满意。

②查阅资料,假设使用Junit进行程序的测试是否可行:

JUnit 4.x 引用了注解的方式来对方法进行测试。通常测试方法都是被包含在一个 测试类

使用下面的代码来创建一个单元测试 . 通过如下操作: FileNewJUnitJUnit Test case.

    @Test

    public void testMultiply() {

        MyClass tester = new MyClass();

        

        assertEquals( "10 x 5 must be 50 " , 50, tester.multiply( 10, 5 ) );

    }

JUnit 假设可以使用任意的顺序执行测试方法。因而测试不依赖于其他的测试方法。

可以使用注解 @org.junit.Test 来修饰方法,以创建一个测试方法。然后使用预期的值 与 真实的值来检查方法是否正确。

你可以使用 Eclipse IDE方式来运行一个测试类,通过如下操作:右键点击需要测试的类并且选择 Run Run AsJUnit Test

也可以使用类 org.junit.runner.JUnitCore运行测试类,而不依赖于Eclipse

该方法可以标记需要测试的类,选择要执行的测试。只有被选定的测试将会执行。 

4.课程收获:

通过这几周的学习,对于面向对象编写程序的学习有了更深的了解,相比较面对过程,了解了面对对象的优点,这对于Java下一阶段的学习打下了很好的基础。

相比于上学年的c语言学习来看,我感觉java有很多更方便的地方,就拿建立起学生信息这个题来说,java就可以用简单的二维数组来完成,而c语言则需要用到结构体。

5.

①第三阶段作业难度、题量的建议:

<作业难度>对于我们大一的新生来说,作业难度还是挺大的,仅仅利用老师所讲解的内容去把作业写出来是有点难度的,因为题目中会涉及Java本身自带的一些类方法,我们自己如果对这些类包不清楚,就会卡在某个地方。

<题量>老师现在所给的体量一般是2~3题,平均一题两天的话,其实挺均衡的,作业量对学生的压力不会太大,比较合理。
②课程内容讲解方面的建议:

希望老师增加对例题的讲解,通过一些具体的例题,对需要学习的内容进行讲解,这样可以强化学生思维,更容易接受新的知识。

猜你喜欢

转载自www.cnblogs.com/Pjh18/p/12801251.html
今日推荐