本文介绍OOP的基本概念
抽象
先看下百度百科的定义:
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
人们所能够解决的问题的复杂性直接取决于抽象的类型和质量
类型:我要把他抽象成什么。比如鸟会飞,鸡好像也会飞。所以这个飞可以抽象成一个鸟类的特征。只要符合飞(这只是其中的一个特征,涉及到力度)就是鸟类,鸟类就是抽象的类型。
质量:抽象的力度。如果只从一个飞的角度就定义其是鸟类,那么这个鸟类就不够抽象。他应该还有多个特征,也就是抽取出多个共同的特征体质
之前语言(C)的抽象方式人们不仅要根据现实问题(“真正待解的问题需求”,称为问题空间)考虑还需要根据不同的机器平台(“解决问题的平台”,称为解空间)来编写不同的代码,也就是说人们必须要建立问题空间和解空间的映射才能编写代码。
还有一种语言他们的抽象方式是只需要根据问题空间去编写代码,摆脱了 解空间的建立和映射,使得人们专注于解决问题,而不是去考虑在不同的机器上如何实现同样效果(不同的平台可能对一个功能的实现不同,也有可能根本就没有这个功能)。
OOP通过提供更好的表达问题空间的元素而更进了一步
上面这句话的意思是说问题空间中的元素可以被称之为对象,而这也是OOP的思想:程序可以通过添加新类型(class)的对象使自身适用于某个特定问题
OOP允许根据问题来描述问题,而不是根据运行解决方案的机器平台来描述问题
最后列出“纯粹的面向对象设计方式”的五个特性:
万物皆对象
对问题空间进行建模,抽取问题空间中的元素,这些元素就是对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的
对象之间互相配合,职责明确,这些对象构成了程序
每个对象都有自己的由其他对象构成的存储
通俗点就是:对象包含对象,这其实类似于组合的方式。使得可以构建复杂的程序
每个对象都拥有其类型
比如字符串是String类型的用来表示字符串可以接受有关字符串的行为的调用,类型不同其所负责的功能也就不同
某一特定类型的所有对象都可以接受同样的消息
这个涉及到多态了,即父类可以接受的消息子类也可以接受。也就是可替代性
更简洁的表述方式就是:对象具有状态 行为和标识。
状态可以理解为其所持有的数据(属性)
行为就是可以接受什么样的消息(方法)
标识是代表这个对象的唯一性,并后续可以找到(涉及到hashcode了后续将)