类(Class):定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
对象:是类的实例,有状态(属性)和行为(方法)。
重要的面向对象编程语言包含C++、Java、Python等
举个例子:
面向过程:放入衣服 -> 洗衣机开始清洗 -> 洗衣机开始甩干 -> 取出衣服
面向对象:把洗衣服这件拆出来 2个对象
人 只负责 放衣服和取衣服
洗衣机 只负责 清洗 和 甩干
面向对象的好处是:一个人的 可以对应不同洗衣机;一个洗衣机 也可以对应不同的人
从代码上来说就是提高代码的复用性,解除代码之间的耦合度
属性的访问级别,可以让外部不用关心具体的细节,也便于后期的调整,尽可能少的和外界交互,也是一种设计准则。
核心思想就是“隐藏细节”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有化方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
在父类原有的基础上,加上子类特有的属性方法,比如父类会的子类也会,子类还会一些你父类不会的。这就是继承性。
继承使用层次形的分类方式是为了将多个类的通用属性和方法提取出来,放在它们的父类中,然后只需要在子类中各自定义自己独有的属性和方法,并以继承的形式在父类中获取它们的通用属性和方法即可。
多态性即“一个接口,多个方法”。多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。多态性允许一个接口被多个同类使用,弥补了单继承的不足。
父类引用指向子类对象,继承是多态的前提。同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现。
在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
Person p = new Student();
p.work(); //业务逻辑发生改变时,后续代码无需修改
面向对象编程是利用 类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的继承关系, 一个类和多个类的多态关系。万物皆对象,对象是具体的世界事物,面向对象的三大特征封装,继承,多态,封装,封装说明一个类行为和属性与其他类的关系,低耦合,高内聚;继承是父类和子类的关系,多态说的是类与类的关系。
其他特性:抽象、组合
抽象:能够把复杂问题通过抽象简单化,可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。
组合:对象可以在其实例变量中包含其他对象。
面向对象编程是有诸多优点的:
- 封装特性能够提高类的易用性,减少编程过程中代码出错的风险。
- 继承最大的好处就是能够实现代码的复用。
- 多态最大的好处就是提高了程序的可扩展性。
- 抽象更多的是能够让程序的设计和实现分离。
除此之外,面向对象编程在并发领域也是由明显的优势的。在并发编程领域,我们可以使用面向对象的封装特性将共享变量封装到一个类中,并且这个共享变量使用 private 修饰,也就是说这个共享变量无法被外界直接访问。它只能通过这个类提供的有限个方法进行访问,并且这些方法都通过加锁的方式保证线程安全。这就避免了多个线程同时方法这个共享变量引起的线程安全问题。
附上我写的一个简单的OOP代码