面向对象课程感想
面向对象课程即将完成,在这次课程中也对其有了较多的了解。由于我们拥有C语言的基础,起初,对面向课程的学习是有帮助的,之后的学习就跳脱当前的知识面,学习到的知识也就多了起来。
接下来我将简述一下在面向对象课程中学到的知识点:第一个不一样的知识点就是了解了面向对象有五个基本原则:单一职责原则、开闭原则、接口隔离原则、替换原则和依赖倒置原则。单一职责原则一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。开闭原则指程序中的类对于扩展时开放的,但是对于修改是关闭的。应该说该原则是处理现有“胖”接口所存在的缺点。如果类的接口不是内聚的,就表示该类具有“胖”接口。换句话说“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,量引客户程序可以使用一组成员函数,而其他客户程序可以使用其他组的成员函数。替换原则是指父类出现的地方子类也一定可以出现,在程序中,将父类用子类代替,程序的功能也不会出现变化。依赖倒置原则指依赖于接口而不是实现,即应当面向抽象编程而不是面向实体。
其次就是对类与对象的了解及分析。类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是通过new class产生的,用来调用类的方法;类的构造方法。
然后,了解了类与类之间的关系有继承、关联、聚合、组成依赖、实现。
继承:是一个类(子类,子接口),继承另一个类(父类,父接口)的功能,并可以增加自己的新功能的能力。
实现:是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。
依赖:是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。
关联:是两个类之间语义级别的一种强依赖关系,关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。
聚合:是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。
组合:是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。
再然后对不同变量类型的区分使用有里一定的了解:静态变量、局部变量、实例变量。
静态变量:独立于方法之外的变量,用 static 修饰默认值和实例变量类似,除此之外,可以在特殊的静态初始化区赋值。
实例变量:独立于方法之外的变量,不过没有 static 修饰,实例变量有默认值。数字的默认为0,boolean的默认为false,对象引用默认值为NULL。
局部变量:类的方法中的变量,局部变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值。
其中我们会采取修饰符来实现,public、private。
private是指私有的,是不允许其他人访问的,只能在同一类中进行访问;public是公众的,对于所有的类都是可以访问。
正则表达式也是面向对象课程中一块很重要的知识面,它将繁琐的步骤简化。
正则表达式是专门用来操作字符串的,可以用一些特定的符号来进行一些代码操作,用来搜索、编辑或处理文本;并且有很多功能:匹配、切割、替换、获取……
面向对象中还拥有很多较C语言简化了的函数。我们在C语言的学习时,用到的有数组、栈、链表、结构体等数据结构,树和图的构造对于初学者不易,然而在JAVA中因为其丰富的内库,我们可以简单的构造自己的数据类型,我们可以使用JAVA自带的方法来进行排序、查找,无异于减小了编程的难度。ArrayList 相比较于数组,其存储的不再仅仅是一些数字或者字符串,可以是一个类。
import java.util.*; ArrayList<Object> list=new ArrayList<Object>();
当然ArrayList的运用也有好几种,我就列举出几种常用的方法:
list.add(Object); list.get(index); list.indexOf(Object);
设计代码首先就需要将框架搭出来,因此我们还学了UML图,UML图的学习可以让我们在设计和展示代码结构有了一种全新的方法,也能看懂一些利用UML展示的程序结构。
以上知识点的总结均是如何去编写代码,当然对于测试也要有着一定的了解。
测试的应用,是先进性部分的测试,在确保各部分正确的同时,进行整体测试。测试的一个工具是Junit,,测试某个类某个单元是否符合设计需求,对方法的边界进行测试,同时尽量涵盖方法的所有分支。测试这个功能极大程度上减轻了完成代码的工作量。
在面向对象课程中,我还是有很多的收获的。最大的收获是对面向对象的思维有了明显的转换,从思维停留在面向过程逐渐将思维转换到面向对象,我觉得这是一个比较艰难的过程,并且能将其很好的运用在学习中,这是需要我将原来的知识“摒弃”,从而去接受全新的知识。虽然这个过程是不容易的,但是我觉得这是十分值得的,毕竟通过这次学习,学习到的东西不只是一点点,除去本来在课程中学到的,还学会了运用很多对开发有用的工具,比如UML,Junit以及JavaFX等。在课程的学习中,我们还是花了较多的时间去研究如何学习,如何学好,当然这也是为了学习本该做的。