阶段性学习总结

在面向对象程序设计这节课上不知不觉已经学习了五周的时间了,我也从开始的仅对java有简单了解的程度转变到了对java有着一定的了解(也许在实际上我还没入门哈,尽管我自认为有一定的了解了)。现在我将对我目前五周所学的知识做出一个大概性的总结。

第一周学习总结

在这一周中我们简单学习了类与对象,对类与对象有了初步的了解,同时我们也做了第一次的作业,这第一次作业在老师给足了提示的情况下完成。我们做的第一次作业是关于雨刷的问题。众所周知 ,雨刷就是在一般的车前窗上所具有的主要用来在下雨天时将车窗上的雨水刷去的工具,这可以有效地为我们提供良好的视野要求,防止由于视野不清晰而引发的诸多事故。在接触这个雨刷的学习之前,包括我在内的大多数人相信都是对雨刷的运行原理不甚了解的,有时甚至会认为不就一个简单的雨刷吗,有什么难的,不就由几个简单的部件所组成的而已。要是这么想那就大错特错的。在一个看似简单的雨刷系统中,其实也是有着许多不简单之处的。我的作业所要解决的只是软件方面的编程问题,当然,凭我目前的知识水平也是不能够做出一个完整的雨刷系统出来的,我做的只是能够实现雨刷的少部分的功能的“青春版”雨刷系统。

第一周作业做了两次,除第一次外的每一次都是在上一次的基础上增加或修改了内容,让代码逐步地具有更多的功能。

第一周中的第一次作业我们只是用最简单的方法将我们的雨刷系统做了出来。仅仅是由一个类中的不同函数来实现几个功能。同时我们还写了Python的以及C语言的相同的题目,而在其他两种语言中都可以使用清屏函数来实现“刷新”功能。但java我所使用的eclipse却是不能做到的。其中的部分结果截图如下:

 

升降档则对应我们现实生活中的雨刷档位,而如上图显示的“刻度”则为之适用于档位为“2”时的情况。可以在档位“2”中做出较为细微的速度改变。

在第一周的第二次作业中我们开始用不同的类来作不同的功能。对前一次的代码做出了较大的改动。

类图如下:

最终所实现的功能还是和第一次作业中的是一样的,但是代码却变得更加复杂,但这样也可实现更多的功能。而在我这次的代码作业中为了让各个类之间产生关联,我主要是将一个类作为另一个类的私有成员变量来达成,只要在外面对其进行传参,在利用这种管理者的特性可以实现所调用和改变的是同一个类。

第二周学习总结

在第二周中我们开设了MOOC的视频学习,在这一周的视频中我们学习了类与对象,同时也完成了一次对应的作业。也是运用到了类的知识。同时在这周我们也完成了PTA上发布的作业。PTA上的作业对于目前的我来说还是带有一定的难度的,尤其是后面的两道只给类图而要我们写相应的代码的题目。

 

这两道题目让我确实地大费头脑,但在完成了之后我确实对类图有了更多的认识与了解。

 

在这周中我们也完成了我们的第三次雨刷问题的作业,并且这次的作业要求也增加了,要求我们在第二次的基础上,需求不变,采用面向对象技术,合理设计实体类、业务(控制)类、接口类及各个类之间的关系,务必符合SRP(Single Responsibility Principe,单一职责原则)以及Demeter法则(Law of Demeter)。可对我的这次代码来说并没有做多大的改变。

第三周学习总结

在第三周的学习中首先我们是进行了MOOC视频的第二周的学习,在第二周的视频学习中,主要给我们介绍了对象交互,对类的访问属性的封闭与开放,java的包和将类作为变量的知识进行了学习。这次给我们布置的是关于数字时钟的问题的作业,而在这次的作业中我学习到了对类的复用,只要传不同的参数,就可以多次调用一个类来表达类似但不同的功能。

 

 而我的代码如下:

因为对于时间的小时、分钟和秒来说有相同的特点。所以只要设置一个变量,在在外界创建这个类时传入不同的方法就可以实现反复调用。

 

其次在这周中还给我们布置了第一次的实验题,在本次实验中有以下要求:

1、练习类的构造方法、方法的调用、参数传递、对象的构造与使用;

2、练习循环结构、控制结构;

3、练习数据的输入与输出;

4、学习编写结构清晰、逻辑正确、功能完善的java代码。

5、学习使用工具对代码进行跟踪调试。

作业类图如下:

 

通过这次实验,我对一些代码的函数运用更加熟练了,对数据的格式化输出知道了更多使用方法。我自身对类以及数组有了更多的了解。同时我明白了网络是个好东西,对目前阶段的我来说,当遇到不太会的知识时,上网查阅往往可以找到我想要的资料。就如对随机字符串的给出和数据的格式化输出的相关资料都是从网上查找资料所得。

而在本次实验的第二题修改代码中,我有过最终程序可以运行,但结果一直都是错误的的问题,最后经过调试逐步检查找出了错误,原来是有一个参数的错误未发现。通过这次的修改代码,我学会了使用调试功能,相信这对我以后写代码是的纠错能力有所提高。而且在这次修改代码中还锻炼了我能够静下心来看代码的能力。

 

最后在这周又有了雨刷问题的进阶版题目,要求如下:

1、重构上次作业雨刷问题,需求不变,采用面向对象技术,再次合理设计实体类、业务(控制)类、接口类及各个类之间的关系,务必符合SRP(Single Responsibility Principe,单一职责原则)、Demeter法则(Law of Demeter)(强制要求)

2 、设计必须符合MVC模式,且尝试嵌入单例模式(独身模式)

在这次作业中我对应题目要求完成后代码类图如下:

在这次的代码中我们用上了单一职责原则以及MVC模式将代码的不同功能进行了分类。

第四周学习总结

在这周中我们学习了java中的继承与多态,通过MOOC视频学习,让我们了解到继承中的父类与子类之间的关系,也对向上与想下造型有了一些了解,但对这造型没有过多的深入了解。多态是我们学习java的一个核心点,有了多态的应用,可以让我们的代码实现可复用、可拓展等功能。避免了当客户需求发生变化时的代码难修改等问题。

在这一周中也发布了两次PTA作业,不过这两次作业以复习基础知识为主。而在这两次的作业中我发现了在基础中的的我的一些不足之处。

在这之中我写代码的习惯一般都是整形和浮点型只用int 和 double,这让我在这次的作业中吃尽了苦头,题目虽然不难,但在这之中的多道题目在我写完提交之后总是不能完全正确,在花费了大量时间之后仍然没有成功修正。直到问了同学之后我才明白这些题目的测试点都是之能用float过得,一旦用double则会让算出的结果产生微小的误差,可这对题目固定的答案来说就是错误的,于是造成了我那个难以发现错误的结果,想不到竟是这种问题,那时将我的鼻子都气歪了。

 

 

在第二次的PTA作业中则主要让我们复习了关于String的知识,这也是让我有了更多的知识储备,对String的函数学到了更多。

第五周学习总结

在第五周学习中,我们仍然有着MOOC的学习视频。在这期视频中则学习了对象容器的知识,学到了顺序容器、对象数组、集合容器和散列表。

在课上所学的也不多,主要是学习了一些类的使用。也学习了泛型、容器以及一些简单的数据结构知识,在链表的知识也有所学习,但也主要是接触学习为主。

这周又布置了新一期的实验,不过却是不难而有趣,是关于“过河”问题的内容

实验目的如下:

1、  掌握类与对象的基本概念;

2、  掌握类的声明、创建与使用方法;

3、  掌握类的构造方法的定义与使用方法

4、  掌握类的成员变量、成员方法的定义与使用方法;

5、  理解类变量、类方法与实例变量、实例方法的区别;

6、  理解Java语言中包的概念以及package、import语句的使用。

7、  理解引用变量与对象实例之间的关系与区别;

8、  理解方法调用时引用类型参数的传递过程;

9、  掌握private、protected、public等关键的使用场合与使用方法;

10、              掌握对象组合的方式与方法;

11、              理解Java中方法重载的实现方式。

第一题的题目要求是:

1、  农夫过河问题:一个农夫带着一匹狼、一只羊、一颗白菜要过河,河上只有一条船能够渡河,而且农夫每次最多只能带一个动物或物品过河。当农夫不在的时候狼会吃羊,羊会吃白菜。

    请以代码为基础,将程序代码补充完整,实现农夫过河游戏功能:由用户选择角色过河,系统自动判断游戏的胜负:当出现有生物被吃掉的时候,游戏失败,所有角色都到了河的另一边,游戏成功。

 

以实验给出的代码为基础,让我们在所给的错误代码的基础上将代码修改正确且符合逻辑。我将其修改正确之后可以得到以下结果:

第二题则是在第一题的基础上稍作修改便可,得出的结果也是与第一题一样的。

第六周学习总结

 在这一周中布置了两次PTA上的作业,而在这一周中来时也给我们讲了软件质量,让我们对于软件检测有了一定的了解,让我们对于做题时的哪些检测点可以由我们自己更好的发现,尤其是在容易出检测点的边界值问题上。

对于边界值测试可以如下:

1.边界值测试
程序的缺陷往往容易发生在输入数据的边界
健壮性边界值测试
任何一个输入:min-,min,min+,nom,max-max,max+
a:0.99,1,1,01,89,199.99,200,200.01
b:0.99,1,1,01,89,199.99,200,200.01
c:0.99,1,1,01,89,199.99,200,200.01
(a,b,c)/?三角形

 

单缺陷假设:假设程序的缺陷都是由一个变量的异常引起的
(0.99,89,79|一般三角形)
假如有n个变量,健壮性边界值测试用例数:6n+1

也有等价类测试的方法,这里就不全写出来了。

而在这两次的PTA作业中第一次主要就是让我们学会了ArrayList容器以及泛型的使用。对于一个容器来说,它就如同C语言中的链表类似,是不想数组那样有界定范围的,只有你一直往里面add()即为增加就可以全部都包括进去。

而我在这次作业中使用了ArrayList<Integer> list = new ArrayList<Integer>();以及ArrayList<Card> cardList = new ArrayList<Card>();在<>之中的就是泛型,表示该创建的容器中只能输入符合该类型的成员。而Integer则是int的 包裹类型,第二个的Card则是我自己创建的一个Card类,当把他作为泛型是,那么在cardList中的每一个成员都是一个Card类。

而在第二次的PTA作业中则是刚好可以运用到我们所学到的软件测试的方法,这回题目并没有给出具体的测试点,所以我们可以利用所学知识自己“寻找”测试点。

 

在这周的实验作业中,我们依旧是农夫过河问题,不过是在原先的基础上改进了而已,而这其中最重要的改进则是增加了继承与多态的使用。在我的代码中我是将所有生物都归为了Biology这个抽象父类中。这样写的好处是多余那些生物类之中相同的代码可以写入到父类之中,避免了代码的大量重复,同时在各个子类中可以利用eclipse的特性款速创造方法,只需要对其进行重构便可。

本次实验的实验目的为:

1、  掌握Java语言中继承的基本概念及使用方法;

2、  掌握Java语言中super关键字的使用方法;

3、  理解继承与组合的区别;

4、  理解程序设计中代码复用的重要性。

5、  掌握Java语言中继承的基本概念及使用方法;

6、  掌握Java语言中super关键字的使用方法;

7、  理解继承与组合的区别;

8、  理解程序设计中代码复用的重要性。

类图如下:

第一题:

 

第二题:

 

 

使用继承与多态可以让各子类之间没有直接联系,也为之后的代码修改减少麻烦。而第二题则正好应了这一句,第二题便是在第一题的基础上在只对主要的类中做了修改之外对于其他类并未做任何修改,极好的避免了大量代码的修改,因此在做第二题是我才可以快速完成。

 

posted @ 2022-04-03 23:47  心の導き  阅读(98)  评论(0)    收藏  举报