答案很复杂,有两个原因。
计算机科学中的不同人对术语“对象”的解释不同。一种是对象由打包在一起的一些数据和操作组成。另一个是对象是所有但还具有“状态”的对象,即它是可变实体的某种形式。
与“变化”的含义(以及不断变化的“实体”的含义)以及数学描述是否实际上捕获了可变的实体有关的哲学问题很深。
数据+运算意义上的对象:这在数学上是很标准的。拿任何小组理论教科书。它将在某处有一个定义,例如HG(x )= gXG− 1。(它是一个共轭运算符。)HG是该术语中的“对象”。它有一些数据(G)和一个运算 X ↦ 克XG− 1。或者您也可以选择一对⟨ 克,X ↦ 克XG− 1⟩ 或三重 ⟨ 克,X ↦ 克XG− 1,X ↦G− 1X g ^⟩。您可以使用具有lambda抽象和某种方式形成元组的任何功能编程语言来构造此类“对象”。阿巴迪和卡德利的“对象理论”广泛地处理了这种对象。
有状态的对象(或变化的对象):数学有这样的东西吗?我不这么认为。我还没有看到数学家谈论任何改变的东西,而不是他/她的职业生涯。牛顿曾经写过X 假设粒子的位置发生了变化,并且 X˙对于它的变化率。数学家们最终发现,牛顿在说的是一个函数x (t ) 从实数到向量空间,以及 X˙ 是另一个这样的函数,它是 x (t ) 关于 Ť。由此,许多具有深远思想的数学家得出结论,变化并不真正存在,而您所拥有的只是时间的函数。但是牛顿力学的变化不是位置,而是粒子。该位置是其瞬时状态。没有数学家或物理学家会假装粒子是数学概念。这是物理上的事情。
对象也是如此。它们是“物理”事物,状态是它们的数学属性。有关此方面的详细讨论,请参见《 Abelson和Sussman的计算机程序的结构和解释》的第3章。这是麻省理工学院的一本教科书,他们将其教给所有科学家和工程师,我认为他们完全理解“物理”事物。
粒子不是数学的事实并不意味着我们不能在数学上处理它们。如果您要求数学家为两粒子系统建模,他将立即组成两个函数并调用它们X1个(吨) 和 X2(吨)。因此,两个粒子减少为两个无意义的索引(1和2)。这是数学家的说法,我们不知道这些粒子是什么,我们不在乎。我们需要知道的是它们的位置独立(或独立)发展。因此,我们将通过两个单独的函数对它们进行建模。
同样,建模面向对象程序的标准数学方法是将每个对象视为状态空间的索引。唯一的区别是,由于对象来来去去,并且系统的结构是动态的,因此我们需要将其扩展到“可能的世界”模型,其中每个世界基本上都是索引的集合。对象的分配和释放将涉及从一个世界转移到另一个世界。
不过有一个问题。与机械学不同,我们希望对象的状态被封装。但是,对对象的数学描述使状态无处不在,从而完全破坏了封装。有一种称为“关系参数性”的数学技巧,可用于将内容缩减为大小。除了强调这是一个数学技巧,而不是封装的非常概念性的解释之外,我现在不再赘述。用封装进行数学建模的第二种方法是精化状态并根据可观察事件描述对象行为。为了对这两种模型进行很好的讨论,我可以向您介绍名为Algol-like Languages的Objects and classes的论文。
[添加说明:]
关于对象的数学基础的很好的分析可以在William Cook的文章“ 重新理解理解数据抽象 ”中找到。