本文介绍OOP的基本概念
抽象
先看下百度百科的定义:
抽象是从众多的事物中抽取出「共同的、本质性的特征」,而「舍弃其非本质的特征的过程」。
人们所能够解决的问题的复杂性直接取决于抽象的「类型」和「质量」
类型:我要把他抽象成什么。比如鸟会飞,鸡好像也会飞。所以这个飞可以抽象成一个鸟类的特征。只要符合飞(这只是其中的一个特征,涉及到力度)就是鸟类,鸟类就是抽象的类型。
质量:抽象的力度。如果只从一个飞的角度就定义其是鸟类,那么这个鸟类就不够抽象。他应该还有多个特征,也就是抽取出「多个」共同的特征体质
之前语言(C)的抽象方式人们不仅要根据现实问题(“真正待解的问题需求”,称为「问题空间」)考虑还需要根据不同的机器平台(“解决问题的平台”,称为「解空间」)来编写不同的代码,也就是说人们必须要建立问题空间和解空间的映射才能编写代码。
还有一种语言他们的抽象方式是只需要根据问题空间去编写代码,摆脱了 解空间的建立和映射,使得人们专注于解决问题,而不是去考虑在不同的机器上如何实现同样效果(不同的平台可能对一个功能的实现不同,也有可能根本就没有这个功能)。
OOP通过提供更好的表达问题空间的元素而更进了一步
上面这句话的意思是说问题空间中的元素可以被称之为对象,而这也是OOP的思想:「程序可以通过添加新类型(class)的对象使自身适用于某个特定问题」
「OOP允许根据问题来描述问题,而不是根据运行解决方案的机器平台来描述问题」
最后列出“纯粹的面向对象设计方式”的五个特性:
万物皆对象
对问题空间进行建模,抽取问题空间中的元素,这些元素就是「对象」
程序是对象的集合,它们通过发送消息来告知彼此所要做的
对象之间互相「配合」,职责明确,这些对象构成了程序
每个对象都有自己的由其他对象构成的存储
通俗点就是:对象包含对象,这其实类似于「组合」的方式。使得可以构建复杂的程序
每个对象都拥有其类型
比如字符串是String类型的用来表示字符串可以接受有关字符串的行为的调用,类型不同其所负责的功能也就不同
某一特定类型的所有对象都可以接受同样的消息
这个涉及到多态了,即父类可以接受的消息子类也可以接受。也就是「可替代性」
更简洁的表述方式就是:对象具有「状态」 「行为」和「标识」。
状态可以理解为其所持有的数据(属性)
行为就是可以接受什么样的消息(方法)
标识是代表这个对象的唯一性,并后续可以找到(涉及到hashcode了后续将)
原文始发于微信公众号(北洋洋洋):《Think in Java》第一章:对象导论之抽象
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76064.html