《Think in Java》第一章:对象导论之抽象

本文介绍OOP的基本概念

抽象

先看下百度百科的定义:

抽象是从众多的事物中抽取出「共同的、本质性的特征」,而「舍弃其非本质的特征的过程」

人们所能够解决的问题的复杂性直接取决于抽象的「类型」「质量」

类型:我要把他抽象成什么。比如鸟会飞,鸡好像也会飞。所以这个飞可以抽象成一个鸟类的特征。只要符合飞(这只是其中的一个特征,涉及到力度)就是鸟类,鸟类就是抽象的类型。

质量:抽象的力度。如果只从一个飞的角度就定义其是鸟类,那么这个鸟类就不够抽象。他应该还有多个特征,也就是抽取出「多个」共同的特征体质

之前语言(C)的抽象方式人们不仅要根据现实问题(“真正待解的问题需求”,称为「问题空间」)考虑还需要根据不同的机器平台(“解决问题的平台”,称为「解空间」)来编写不同的代码,也就是说人们必须要建立问题空间和解空间的映射才能编写代码。

还有一种语言他们的抽象方式是只需要根据问题空间去编写代码,摆脱了 解空间的建立和映射,使得人们专注于解决问题,而不是去考虑在不同的机器上如何实现同样效果(不同的平台可能对一个功能的实现不同,也有可能根本就没有这个功能)。

OOP通过提供更好的表达问题空间的元素而更进了一步

上面这句话的意思是说问题空间中的元素可以被称之为对象,而这也是OOP的思想:「程序可以通过添加新类型(class)的对象使自身适用于某个特定问题」

「OOP允许根据问题来描述问题,而不是根据运行解决方案的机器平台来描述问题」

最后列出“纯粹的面向对象设计方式”的五个特性:

万物皆对象

对问题空间进行建模,抽取问题空间中的元素,这些元素就是「对象」

程序是对象的集合,它们通过发送消息来告知彼此所要做的

对象之间互相「配合」,职责明确,这些对象构成了程序

每个对象都有自己的由其他对象构成的存储

通俗点就是:对象包含对象,这其实类似于「组合」的方式。使得可以构建复杂的程序

每个对象都拥有其类型

比如字符串是String类型的用来表示字符串可以接受有关字符串的行为的调用,类型不同其所负责的功能也就不同

某一特定类型的所有对象都可以接受同样的消息

这个涉及到多态了,即父类可以接受的消息子类也可以接受。也就是「可替代性」

更简洁的表述方式就是:对象具有「状态」 「行为」「标识」

状态可以理解为其所持有的数据(属性)

行为就是可以接受什么样的消息(方法)

标识是代表这个对象的唯一性,并后续可以找到(涉及到hashcode了后续将)


原文始发于微信公众号(北洋洋洋):《Think in Java》第一章:对象导论之抽象

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76064.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!