设计模式之美(1)理论基础

896 阅读4分钟

以下的内容大部分来自极客时间的专栏-设计模式之美。

1、什么是面向对象与面向对象变成语言 面向对象变成的英文缩写的oop,全称是Object Oriented Programming,面向对象编程语言英文缩写是oopl,全称Object Oritented Programming Launguage。面向对象有2个比较重要的概念:类和对象。

面向对象变成是一种编程范式或编程风格。以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。
面向对象编程语言是支持类或对象的语法机智,并有现成的语法机智,能方便的实现面向对象编程四大特性(继承,抽象、封装、多态)的编程语言。

2、封装、抽象、继承、多态可以解决那些问题?

封装

也叫做信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(函数)来访问内部信息或者数据。

封装的特性,需要编程语言本身提供一定的语法机制来支持。这个语法机制就是访问控制权限。java中,有4种访问控制权限,public,private,protected,default.

封装的意义,如果没做访问控制的话,任何代码都可以访问、修改类中的属性,这样虽然看起来更加灵活,但是也意味着不可控,属性可以随意被各种修改,修改地方散落在各处,会印象代码的可读性、可维护性。

另外有一点,调用者并不需要太了解业务的细节,提供一些控制方法即可,这样可以最大限度的降低错误,减少出错的概率。

抽象

封装主要讲的是如何隐藏信息、保护数据,而抽象讲的是如何隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知道如何实现的。

面向对象编程中,通过借助编程语言提供的接口类(interface)或者抽象类(abstract)来实现抽象的特性。

抽象有时候不被看为是面向对象的情况,他可以用来指导架构设计,而且并不需要编程语言提供特殊的语法机制来支持,只需要提供“函数”这个基础的机制就可以实现抽象特性,这就是他有时候不被看作面向对象编程的特性之一。

在面对复杂系统的时候,人能承受的信息复杂程度是有限的,所以必须忽略掉一些关键性的实现细节。抽象作为一种只关注功能点不关注实现的设计思路,整好帮我妈过滤许多非必要的信息。

继承

继承是用来表示类之间的is-a关系,比如狗是一种动物。继承可以分为两种模式,单继承和多继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类。

java不支持多继承,为什么? 多重继承有副作用:钻石问题(菱形继承)

假设类B和类C继承自A,都重写了类A中的同一个方法,而类D同时继承了类B和类C,那此时类D会继承B、C的方法,对于B、C重写的A的方法、类D会继承哪个?这里就是问题点,因此Java不支持多继承。但是java支持多接口实现,接口中的方法是抽象的,就算一个类有多个接口,且接口中存在同名方法,实现接口的时候,这个同名方法需要由自己类来实现。 继承的好处是代码复用。例如有一些相同的方法和属性,就可以将这些抽出来,放到父类中,两个子类继承父类即可。

多态

多态是指,子类可以替换父类,在实际的代码运行过程中,调用子类的实现。

多态可以提高代码的可扩展性和复用性。可以利用多态的特性,用一个print函数,实现遍历打印不同类型集合的数据。当再增加一种类型的时候,只需要实现接口就可以了。

对于java中的多实现出现重名方法如何解决?