课程总结
前言:一整个学期的java课程到这里也算告一个段落了。
从刚开始的线上课程-线上作业到课堂讲解再到PTA作业到五次实验,最后的三次Blog作业,工程量对我来说还是很大的,从全局来说,有的题难度不是很大,花些时间就可以解出来,但是有的难度真的很大,也很耗时间,真的有的不花时间肯定做不出来,但是有的真的也是花时间了也做不出来,每当谈到难度大的这个问题我的脑海里还是会浮现电梯调度问题,第一次做的时间确实是挺手足无措的。细分的话,针对于Blog作业来说,这种就是属于完成的过程比较轻松愉悦,只要肯花时间就可以完成的类型。PTA作业就是属于摇摆不定了,写的出来的多花时间想想就可以啦,写不出来的再怎样苦思冥想也还是无动于衷。实验的话,中等吧,总感觉题目模棱两可的,但是能写。线上课程就是预习的作用,但是里面的习题有的就真的挺变态的,感觉有的题目有点问题呀,如果没问题就当我没说哈。
技术总结:
这门课程首先接触的是“对象和类”,书中以“希望开发一个如图所示的GUI,该如何编程实现呢?”开头,我天真的以为学会了这个“对象和类”就可以设计出图形用户界面,其实不是,目前的实现还是在控制台阶段。要设计出一个类,就需要先了解一下“对象”,对象代表现实世界中可以明确标识的一个实体,比如我们现在使用的电脑,桌子,鼠标等。对象的属性(数据域,以长方形举例,长和宽就是它具有的数据,也就是属性)和对象的行为(我们可以要求这个对象做什么,比如一个长方形要求它求面积或者周长)就构成了一个完整的对象。设计出一个长方形类,由这个长方形定义出具体的长方形就是类的实例化就好比--学生,学生可以是一个整体,有很多整体,但是指明道姓的点名出学生就是实例化了。对于类,需要重点强调的是构造方法,这个构造方法不能少,很重要,但是往往也很容易忘记。
现在我们已经会写出一个类,但是这个类不是很安全,因为它所有的东西都是公开透明的,改变值很简单,但是后续的维护会很麻烦的。所以我们现在要做的就是用“面向对象”的技术进一步设计出类。为了解决被轻易改变的问题,我们引入了“封装”的概念,也就是说类的实现的细节被封装并且对用户隐藏,比如说要求长方形的面积,我们只需要相应的创建长方形对象,尽管不知道怎么计算长方形的面积,但是还是能够求出。
在实际的解决问题过程中,只有一个类往往是不够的,这时候就需要多个类,所以就需要先了解类与类之间的关系。总共可以分为6个关系,也就是关联,依赖,聚合,组合,继承,实现(接口)。关联是比较通用的一个概念,只要两个类对象有交互,有联系我们就可以称为关联。关联是一种强关系,表示一个类拥有或包含另一个类的对象作为属性或者变量。依赖是一种弱关系,表示一个类使用或者调用另一个类的对象作为参数或者局部变量。这里我们可以举一个例子,我们用笔写字,如果是把笔作为属性添加到人中,就是关联,也意味着我们做什么事都会用到这支笔。但是如果把笔作为参数放到写作业这个方法中,这就是依赖,表明只有写作业的时候会用到,即使用关系是偶然的,临时性的,是弱关系。聚合是特殊的关联,也可以成为“has-a”关系,或者是包含的关系,例如学院是教授,表明教授是学院的所有物。组合是特殊的聚合,关系越来越强,表明复合类的实例是由成分类组成的。这两个都可以看成是整体与部分之间的关系,但是组合中的个体不能脱离整体,例如一本书由很多张书页构成,但是书被烧毁了,书页也一定不存在了。但聚合不一样,可能学院不开设了,但是教授不出意外的话肯定是还在的。继承表明一个类继承于另一个类,并且还可以增加自己的新功能。实现就是对接口的实现。
通过多个类我们已经可以解决很多问题了,在一定程度上来说,只要类足够多,问题就能解决。但是这样往往会使问题复杂化,有的时候也在不断重复写着相同的代码。为了解决这种问题,我们引入了继承与多态。刚刚说继承是一个类继承与另一个类,被继承的我们称作父类,继承者我们称为子类。那什么时候会用到呢?在不同的类可能会有一些共同的特征和行为,我们用一个通用类来表达这些共同之处。父类与子类的关系我们称为“is-a”关系。要注意在父类里面定义一个无参构造方法。这里以我们做实验中的类图为例:
可以看到老虎和狮子都属于动物类,并且都有“名字”“重量”“创建次序”“11攻击力”这些属性以及进入电器的方法,这时候我们就可以以动物为父类,把这些公共有的放在父类中,老虎和狮子进行继承。已经有的属性和实现好的方法子类都可以直接使用了,因为每个子类的实例都是父类的实例所以我们通过父类型的变量来引用子类型的对象,这就是多态。
举例的类图中,“叫”这个方法比较特殊,因为方法要知道是什么动物才知道怎么叫,所以这里引入了抽象类。我们还是把“叫”这个方法放在了父类中,但是把这个方法定义为了抽象方法,即让子类去具体实现,因为有了抽象方法,所以这个类也就是抽象类了。称为抽象类之后,和普通类就有些区别了,抽象类不能够创建实例。上面提到类之间的关系还有一种是实现,即接口的实现,当一个抽象类里面没有属性的时候,我们也可以把它做成一个接口,让子类去实现这个接口。
有的时候我们的类是一样的,但是对象往往是很多个,怎么去存储这些对象呢。我们可以使用ArrarList类或者LinkedList类去存储,不仅仅添加对象方便,进行相关的操作也很方便。
对于一个问题,可能我们当下是解决了,但是日后进行相关维护可能会比较困难,因为没有对类进行相应的规范。也就是六大设计原则。第一个就是单一职责原则,也就是说我们的类只负责一个明确的职责。第二个是开闭原则,核心思想就是对扩展开放,对修改封闭。举例说明,我们的动物类中,是不支持将已有的方法进行修改,但是可以添加新的方法,比如说“跑”。第三个是里氏替换原则,也就是说我们要重写父类的抽象的方法,但是不能重写父类的非抽象方法,子类也可以添加自己特有的方法。第四个迪米特原则,即一个对象类对于其他对象知道的越少越好,保持最少关联性。第六个接口隔离原则,即我们可以把一个庞大的接口细分成多个小接口。第六个就是依赖倒置原则,即我们应该面向接口编程,从而降低类之间的耦合。此外还有一个合成复用,即优先使用组合,在需要多态的时候使用继承。
最后就是javaFx这一块,知识点比较零零散散的,感觉每个界面都是东拼西凑才能凑出一个完整的图形界面。这里就放这次实验得到的界面吧。

普普通通的,进行完善会更好一些,但是这三个小动物的图片真是太可爱了呀。
心得:从这一整个学期下来,踩的坑还真不少。从最开始的没有理解题意,到理解不了题意再到清楚不了题意,真是无力啊。还有就是不知道能不能使用这个方法,但是到最后发现只要没有说不可以的,就是可以的意思。其实还有一个就是注意题目的要求以及给的示例,要根据给的示例再进行具体的剖析。但是学了这么一个学期,学会的知识点或许在将来的某一天就给忘了,但是老师说的“好好想清楚自己要什么,要干嘛”这句话是怎样都忘不了的。人各有志,恍恍惚惚又过去一年大学,很多东西都是鱼和熊掌不可兼得,学会取舍,有舍才有得,或许这样才能走的更远。条条大路通罗马,适合自己才是最好的。老师最后一节课问,不知道你们回去有没有好好想,哈哈,我回去是真的有想过噢!
改进建议及总结:整门课程学习下来,或多或少都从无到有的建立起了一个java体系架构,主要学会的就是设计类,以及如何合理的设计出类。建议的话,就是在课堂上进行举例说明的时候可以速度稍微慢点,更好消化和理解,然后就是线上课程的习题,可以看看有没有出bug,感觉有些题确实挺奇怪的,百思不得其解。
浙公网安备 33010602011771号