程序=算法+数据,对象在哪儿?

新闻
严格来看,对象不存在属性,也没有数据组织,只接收消息,给出反馈。对象自身是有状态的。发同样的消息,给出的反馈可能不同。这样的对象方式,非常难以控制。

如果你认可程序=算法+数据,那么会发现,对象好像没有存在的必要。

先来看看算法

按函数式编程的思路,算法就是把输入转换成输出的过程。

比如常见的各种排序算法,不管过程如何,都是把没有顺序的集合转化成有顺序的集合的过程,描述如下:

sort: List -> List

再说数据

对于数据,众说纷纭。最离谱的,是把函数当数据,没有数据组织。

下面的例子以js语言描述了这一思想。

// create_user是一个构造函数,但返回的不是对象,而是函数。
// 两个参数为:(姓名, 年龄)
let user = create_user("张三", 20)
// 通过返回函数的调用,获取属性
// 参数为属性名
let name = user("name")
let age = user("age")

create_user的实现如下:

function create_user(name, age) {
// 返回一个取属性值的函数,而非对象
return function(field_name) {
if (field_name == "name") {
return name
} else if (field_name == "age") {
return age
}
}
}

再一种,是把数据当一个个独立的集合,数据之间没有任何事先声明的关系。

关系数据库是典型的代表。例如,学生表与学生考试表,是两个完全独立的集合,没有具体关系,所谓外键,只是学生考试表的一个字段而已。学生表与学生考试表,数据举例如下:

学生表                        考试表
学号 姓名 学号 课程 成绩
001 张三 001 语文 98
002 李四 001 数学 88
002 语文 78

数据是通过sql语句,临时建立的关系。例如,下面的sql语句,通过笛卡尔乘积、筛选把两个表之间的关系建立了起来。

select * from 学生表,考试表 where 学生表.学号=考试表.学号

第三种,是各种语言都提供的结构体,把数据组织成相互关联的网状结构。

下面的例子用rust语言描述了这个想法。

struct 学生 {
name: String,
考试: Vec<考试>
}
struct 考试 {
}

还有其他一些数据组织形式,不再赘述。

无结构数据

数据除了以上各种组织形式,还有无组织的,非结构数据。比如:

  • 程序源码,程序源码是无组织的数据,这个观点很重要‼️
  • 日志文件,日志文件也是没有被组织的数据。
  • 数据传输,被传输的数据,很多都没有结构。

还有很多。

对于无结构数据,主要观点是:

  • 当流对待!

其次的观点是:

  • 把流转换成有组织的数据!

最典型的例子,把程序源码转换成AST语法树:

编译:string -> Tree

对象是啥

上面的描述过程没有对象存在。真正面向对象与数据无关,对象只接收消息,给出反馈。比如,学生对象:

let x = 一个学生
// set_name是消息名,方法参数是消息参数
x.set_name("张")
// get_name是消息名
x.get_name()

严格来看,对象不存在属性,也没有数据组织,只接收消息,给出反馈。对象自身是有状态的。发同样的消息,给出的反馈可能不同。这样的对象方式,非常难以控制。

责任编辑:未丽燕 来源: 今日头条
相关推荐

2019-07-23 16:00:36

区块链存储5G

2011-12-12 13:09:45

云计算

2012-10-25 16:40:11

WOT高效数据中心数据中心

2013-12-04 09:33:15

软件成本

2015-08-27 13:45:25

2014-04-17 10:16:50

2023-09-12 11:38:18

2013-05-10 10:58:56

ERP

2015-09-24 10:24:38

北京大数据

2014-04-29 14:52:06

大数据

2020-03-25 09:20:21

自然语言处理

2010-06-23 09:41:17

Amazon Simp

2012-08-03 09:03:31

Windows Ser微软

2020-02-11 17:15:09

开发者抛弃 Executors

2020-02-13 09:14:16

Executors开发Java

2016-01-12 17:10:56

嫦娥玉兔美照

2020-04-21 16:01:13

自动驾驶新基建工信部

2011-07-15 10:27:53

Windows微软超级操作系统

2017-10-11 11:17:16

SaaS出路中国式

2018-08-31 08:51:31

C 语言开发编程
点赞
收藏

51CTO技术栈公众号