面向对象编程的三大特性及其含义

面向对象编程的四大特性及其含义

Java/C++是每个人接触面向对象这个词汇的开始,但是很多人在学习了很长一段时间可能都不知道到底面向对象是什么意思,没能真正理解其中的含义。笔者就是这种人,实在是感到不好意思。
首先来说说面向对象的含义。
OOP(object oriented programming),面向对象的编程。学习面向对象之前还必须普及一个概念,就是面向过程,一般的学院派毕业的程序员,接触到的第一门语言一定是C语言,不是因为C语言简单,恰恰相反,C语言很难,很多人学过之后可能再也不会再用了。C语言兼备了底层语言和高级语言的特性,但是在以后的工作中可能更偏向于底层的一些开发,比如嵌入式开发。

想要学习面向对象就必须和面向过程结合起来学。
首先看一下百度百科对面向对象的解释:

早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。

好的看糊涂了吧?反正我是有点绕晕了,但还是要抓住这段文字的重点,“抽象”,先记住,之后再解释。

先回到上文,我们来说一说生活中的例子,我看到别人的一个很好的例子是这样的:有一天你想吃糖醋排骨了,为什么是糖醋排骨呢,因为我喜欢。这个时候你有两个选择:
1、自己买材料,排骨,糖,老抽,生抽,芝麻等等然后焯水,炒糖色,还要看准时机放后续调料,调节火势,最后盛到盘子里。
2、去饭店,张开嘴:老板!来一份糖醋排骨!

这很明显了吧?这就是1是面向过程,2是面向对象。
面向过程的时候,你必须亲历亲为的做每一步,而且必须要正确,否者结果就是不好的。如果突然不想吃了,一切就要从头来过。可是面向对象不是,你什么都不需要做,只是到了想要的时候,就找老板,相当于是调用,,总的来说,降低了耦合性,提高了维护性。

面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。
面向过程:
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差

面向对象的三大基本特性

  1. 封装
  2. 继承
  3. 多态
封装

我在大一的时候模模糊糊自学了一阵的Java,只知道有封装,可是却没有真正的理解到什么是封装,直到学习了数字电路吧,把一块设计图打包在一起时才真正意义上明白了封装。

封装,Package,是把集成电路装配为芯片最终产品的过程,简单地说,就是把铸造厂生产出来的集成电路裸片(Die)放在一块起到承载作用的基板上,把管脚引出来,然后固定包装成为一个整体。

以上是百度百科的解释。
稍微解释在程序语言中就是把客观事物的特性写在一个类里,用一种抽象的方式表示一个客观的事物。并且类只让可信的类和对象操作自己的数据和方法,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

继承

可以让某个类型的对象获得另一个类型的对象的属性的一种方法,不是Java的那个方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。
继承的过程是从一般到特殊的过程。要实现继承,可以通过 “继承”(Inheritance)和“组合”(Composition)来实现。
继承概念的实现方式有二类:实现继承与接口继承。
实现继承是指直接使用 基类的属性和方法而无需额外编码的能力;
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。

多态

在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,那些操作可以通过相同的方式予以调用。

你可能感兴趣的:(面向对象编程的三大特性及其含义)