从面向过程到面向对象
——面向对象程序设计学习心得
经过一个学期的学习,对于《面向对象程序设计》这门课也有了新的认识,在最初接触这门课程时,以为这只是java 这门程序语言的课程,课程的中心是放在java这门语言的编写和使用上。但是现在我发现,这门课程更多的是对编程思维的培养,更注重于将编程思维从面向过程而转变为面向对象。
面向对象设计心得:
- 在面向过程时,基本思路是分析出所需要的步骤和想要获得的结果,然后用函数一步一步实现这些该步骤,使用的时候依次调用,得到最后的结果;而面向对象编程时,时把相关的数据和方法组织为一个整体来看,以各个对象的类为基础,再类里面进行方法的调用,不用像面向过程时一样按顺序进行,需要的时候进行调用就行。
a) 单一职责原则:一个类应该有且只有一个去改变它的理由,这意味着一个类应该只有一项工作。
b) 开放封闭原则:对象或实体应该对扩展开放,对修改封闭。
c) 里氏替换原则:在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时, 对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类)
d) 依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。
e) 接口隔离原则:不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!
- 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
- 传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。
- 面对对象程序设计是尽可能地在模拟人类的思维。通过这样的方式能够让开发的软件更加符合人类的认知,人们使用起来也能够更加顺手。并且通过应用软件能够切实地解决现实生活中的问题。面向对象程序设计使得描述问题的问题空间和问题的解决方法空间组合在一起,并且尽可能地保持一致。能够将客观世界中的抽象问题转化为具体的问题对象。
- 抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节;继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的回时候,可以在一个已答经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容;多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。抽象是为后面继承打下基础,使得继承的类都在一个框架内完成,多态是为了使得对具有更多可操作性。
(1)单一职责原则:所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
(2)“开-闭”原则:“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
- 在面向过程设计时,只用考虑每一步的结果应该是什么,但是在面向对象程序设计时,需要先考虑目标程序的大致结构,如何画出UML图,考虑有没有什么特殊情况,如何根据UML图来建立所需要的类和对象等等。
- 类对于我来说是一个新的概念,类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。在面向对象中,类可以说是最重要的概念,是作为面向对象程序设计的基础,如果不能掌握类的特性,例如抽象类等,就很难以面向对象的思维去编写代码,代码就会显得杂乱无章,在后续对代码进行扩充的时候会显得手足无措。
在这一个学期的学习中,我从最初只会面向过程设计自己的程序,对于程序设计只会将其分步进行,而不会将其考虑为一个一个的对象,在后续的改进中多走了许多弯路。而通过面向对象的学习,不仅让我在每一次的大作业中学会熟练运用java语言中的各个方法,更让我有了面向对象的设计思路,在程序设计中使用类来规划程序的框架,更加清晰而且易于改进。
面向对象的程序设计方法不止局限于java,在python中也可以应用,在学习python的过程中,因为进行了面向对象的学习,让我少走了很多弯路,并且在三小项目的程序编写中也用到了面向对象的思想。本门课程重在面向对象的思想,一旦学会了这种思维方式,将会终身受用。