从这篇博客开始,我们进入了一个崭新的领域——面向对象(OOP,Object Oriented Programming)。
这篇博客只会讲述一些基本的概念,因为面向对象要讲述的东西有很多,先理解了概念,才能写出高质量的面向对象的代码。
程序大体可以分为面向过程的语言(C语言),面向对象的语言(C++, Java, C#)。当然还有其他分类,如面向函数的语言(ML, Haskell)
主要区别一下面向过程的语言和面向对象的语言。
面向过程
可以这么说:在学习面向对象之前,我们写的代码都是面向过程的。我们写一个程序,一般的思路是:
- 确定程序的目的。即为什么要写这个程序,要实现什么功能。
- 分析程序的步骤。比如我们要写一个两数运算的小程序。那么很简单,大概的步骤是:1) 提示用户输入两个数字和要执行的操作 2) 对两个数字进行运算操作 3)把求和的结果返回给用户。
- 根据分析好的步骤一步步写出代码。即将这个程序实现。
这样的思想就是面向过程的:从问题出发,分析问题,然后按照分析好的步骤实现功能。
面向对象
面向对象,就是把有相同属性或动作的事物归为一个类。这里提到了“类”,类就是一系列事物的抽象。比如说,人就是一个类。你,我,他都是人,我们都分别是人这个类的实例。类是抽象的,并不具体指代某一个事物。而它里面的一个实例,叫做对象,才是具体的事物。再类比“人”来说,人是一个类,而作为人的实例的你、我、他,是三个对象。
我们说类不是对象的集合,而是对对象集合的描述,或者说是对对象抽象的定义。如何来描述呢?就要靠类中的属性和方法。
之前说过,一个类是具有相同属性和动作的一个抽象。拿人来类比,人具有什么属性呢?比如年龄,身高,体重,名字……这些都是每个人都有的属性。虽然每个人的年龄,身高,体重和名字都不一定相同,但是它是属于一个具体的人(对象)的独一无二的属性。那么人有什么动作呢?比如吃饭,睡觉,学习,工作……每个人都会干。但是对于具体的任何两个人来说,他们吃的饭可能不同,睡觉的姿势不同,学习和工作的内容也不尽相同。
那么我们为什么要提出类的概念呢?写程序的时候一个人一个人的去处理也不是很好吗?
这么做当然可以。但是写出来的代码会显得很杂乱无章,不容易让人理解,找不到内在的联系。面向对象的代码符合人的思考习惯,会让人更加容易理解。
真正好的程序,并不是冰冷的代码,而是像一首诗。不仅易读,而且读起来有一种美感。
而且面向对象还有其他的很多好处,主要实践了软件工程的三个目标:可维护性,可重用性,可扩展性。这里就不得不说到面向对象的三大特性:封装、继承、多态(也有四大特性的观点,阿里就支持四大特性,即抽象、封装、继承、多态)。
有关于三大特性,要讲的东西实在太多。这里不过多展开,请读者自行上网查找资料。博客末尾有一些链接可供参考。
面向对象的语言不等于面向对象。面向对象是一种思想。我们可以用面向对象的语言写面向过程思想的代码,也可以用面向过程的语言写出面向对象思想的代码。
参考链接: