什么是对象?
对象就是某一事物抽象的集合(类)的实例,万事万物皆对象。对象有一下几个特征:
- 对象具有唯一标识,具有唯一性。唯一性通过内存地址来体现,对象具有唯一的内存地址
- 对象有状态,不同语言有不同叫法。在C++语言中叫“成员变量”;在java中叫“属性” 。状态分私有和公有
- 对象有行为,不同语言有不同叫法。在C++中叫“成员函数”;在java中叫“方法”
面向对象
面向对象(Object Oriented Programming),即面向对象编程,它是相对于面向过程来说的,引用维基百科中面向对象的描述:面向对象是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
从维基百科中可以体现出面向对象的三大特性:封装、继承、多态
面向对象历史
早在1960年的Simula语言中就面临着软件可复用性这一危机,面向对象正好完美的解决了这一危机。20世纪70年代的Smalltalk语言在面向对象方面堪称经典。在Samlltalk语言中是这样描述面向对象的:
- 一切都是对象(Everything is an object)
- 对象通过发送和接收消息进行通信(就对象而言)Objects communicate by sending and receiving messages (in terms of objects)
- 对象具有自己的内存 (就对象而言) Objects have their own memory (in terms of objects)
- 每个对象都是一个类的实例 (必须是一个对象)Every object is an instance of a class (which must be an object)
- 该类保留 其实例的共享行为(以程序列表中的对象形式)The class holds the shared behavior for its instances (in the form of objects in a program list)
- 要评估程序列表,将控制权传递给第一个对象,其余的视为其消息 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类的公共属性和方法
多态性
多态是指同一操作作用于不同的对象上,可以产生不同的解释和不同的结果。比如:猫和狗都会叫,但发出的叫声不一样,猫叫“喵喵喵”,狗叫“汪汪汪”
以上内容来自一个小菜鸟的总结,如有不严谨之处,欢迎各位大佬指正!