什么是面向对象(OOP)?

1,527 阅读3分钟

什么是对象?

对象就是某一事物抽象的集合(类)的实例,万事万物皆对象。对象有一下几个特征:

  1. 对象具有唯一标识,具有唯一性。唯一性通过内存地址来体现,对象具有唯一的内存地址
  2. 对象有状态,不同语言有不同叫法。在C++语言中叫“成员变量”;在java中叫“属性” 。状态分私有和公有
  3. 对象有行为,不同语言有不同叫法。在C++中叫“成员函数”;在java中叫“方法”

面向对象

面向对象(Object Oriented Programming),即面向对象编程,它是相对于面向过程来说的,引用维基百科中面向对象的描述:面向对象是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
从维基百科中可以体现出面向对象的三大特性:封装、继承、多态

面向对象历史

早在1960年的Simula语言中就面临着软件可复用性这一危机,面向对象正好完美的解决了这一危机。20世纪70年代的Smalltalk语言在面向对象方面堪称经典。在Samlltalk语言中是这样描述面向对象的:

  1. 一切都是对象(Everything is an object)
  2. 对象通过发送和接收消息进行通信(就对象而言)Objects communicate by sending and receiving messages (in terms of objects)
  3. 对象具有自己的内存 (就对象而言) Objects have their own memory (in terms of objects)
  4. 每个对象都是一个类的实例 (必须是一个对象)Every object is an instance of a class (which must be an object)
  5. 该类保留 其实例的共享行为(以程序列表中的对象形式)The class holds the shared behavior for its instances (in the form of objects in a program list)
  6. 要评估程序列表,将控制权传递给第一个对象,其余的视为其消息 To eval a program list, control is passed to the first object and the remainder is treated as its message

封装性

封装是通过限制只有特定类的对象可以访问这一特定类的成员,而它们通常利用接口实现消息的传入传出。封装数据(封装状态)和分装实现(封装行为)。
对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。防止了程序相互依赖性而带来的变动影响,面向对象的封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为的包装和信息隐藏。

继承性

继承性是继承一种层次模型,比如A类继承B类,那么B类就是基类,A类属于一个派生类,A类可以继承B类的公共属性和方法

多态性

多态是指同一操作作用于不同的对象上,可以产生不同的解释和不同的结果。比如:猫和狗都会叫,但发出的叫声不一样,猫叫“喵喵喵”,狗叫“汪汪汪”

以上内容来自一个小菜鸟的总结,如有不严谨之处,欢迎各位大佬指正!

资料:
维基百科-面向对象
Smalltalk