封装
是什么封装
封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法来访问内部信息或者数据。例如在Java中我们在定义一个类时,会给一个类加属性,我们给将这些类属性设置为private,然后给这些属性添加一些方法,有的只能被获取,不能被修改,有些可以被修改,但是不可以被重置。在Java中是通过一些关键字来提供访问权限控制。如果Java中没有提供这些关键词,所有的属性默认都是public的,那么外部的代码都可以随意的更改对象中属性的值,这样是无法达到隐藏信息和保护数据的目的,也就是无法支持封装特性。
封装的意义
如果我们对类中属性的访问不加以控制,那任何代码都以访问、修改类中的属性,虽然这样看起来更加灵活,但是灵活以为着不可控,属性可以随意被修改,修改的逻辑可能散落在哥哥角落,势必会影响代码的可读性、可维护性。
除此之外,类通过有效的方法暴露必要的操作,也能提高类的易用性。我们把属性封装起来,暴露少许的几个不要的方法给调用者,调用者就不需要了解太多背后的业务细节,用错的概率就减少很多。
抽象
什么是抽象
在面向对象编程中,我们常借助编程语言提供的接口类或者抽象类这两种语法机制,来实现抽象这一特性。例如:在Java中,是通过interface和abstract关键字语法来实现。这种抽象是指把一些类的公共行为抽象到更高的层次。
还有一种抽象是指是通过编程语言中的“函数”这一语法机制。通过函数包裹具体的实现逻辑,这本身就是一种抽象。调用者在使用函数的时候,并不需要去研究函数内部的实现逻辑,只需要通过函数的命名、注释或者文档,了解其提供了什么功能,就可以直接使用了。比如,我们在使用C语言的malloc()函数的时候,并不需要了解它的底层代码是怎么样实现。
抽象的意义
抽象以及封装都是人类处理复杂性的有效手段。在面对复杂系统的时候,人类成熟的信息复杂程度有显得,所以我们必须要忽略掉一些非关键性细节。而抽象作为一种只关注功能点不关注实现的设计思路,能帮助我们大脑过滤到许多非需要信息。
除此之外,抽象是一个非常宽泛的设计思想,在代码设计中,起到非常重要的指导作用。很多设计原则都体现了抽象这种设计思想。
我们在定义类的方法的时候,也要有抽象思维,不要在方法定义中,暴露太多的实现细节,以保证在某个时间点需要改变方法的实现逻辑时,不要去修改其定义。
继承
什么是继承
继承是用来表示类之间的 is-a 关系,比如猫是一中哺乳动物。在Java中使用extends来支持继承机制。
继承的意义
继承最大的好处就是代码复用。假如两个类有一些相同的属性和方法,我们就可以将这些相同的部分,抽取到父类中,让两个子类继承父类。这样两个子类可以重用父类中的代码,避免代码复用。
继承反应的是真实世界中的关系,它是一种 is - a关系,复符合人类的认知,而且,从设计的角度来说,也有一种结构美感。
如果过度使用继承,会导致继承层次过深过复杂,导致代码可读性、可维护性变差。为了了解一个类的功能,我们需要查看很多父类的代码。还有,子类和父类的高度耦合,修改父类的代码,会直接影响到子类。
多态
什么是多态
多态是指子类可以替换父类,在实际的代码运行过程中,调用子类实现的方法。在Java中通过“继承加方法重写”来实现多态。
多态的意义
多态特性能够提高代码的可扩展和复用性。例如在Java中,使用print()函数可以打印不同类型的集合对象,如果我们想要多添加一种,只需要让这个集合类实现接口,重写方法即可。
除此之外,多态也是很多设计模式、设计原则、编程技巧的代码实现基础。
来源:CSDN
作者:帅过吴彦祖
链接:https://blog.csdn.net/zxf15735185131/article/details/103664630