Rust有面向对象特性吗?

structs、traits 和 impls 被解释为在 Rust 中进行 OOP 的一种方式。

关于语言的哲学比较:

  • Rust 具有对象特性,但并不以它们为导向。
  • Java 现在具有函数式特性,但仍然大力鼓励对象设计。

tructs、traits 和 impls 可用让你使用对象。你可用逻辑、多态性封装了数据。

  • Rust最大的缺失特性是继承,继承是子类型的一种形式。Rust 确实已经有了子类型。Rust 支持特征继承。
  • Rust 整体上并不是面向对象的。
  • 您可以编写自由函数,结构不需要有方法。您可以编写过程式或函数式代码。
  • Rust 是一种结构化语言。OOP 只是一种结构化范例。Rust 不是面向对象的。

Traits 非常接近 Java 或 C# 等语言的接口。Rust 没有继承。并且Traits 不能很好地模拟它

  • Rust Traits 不允许您以任何方式在对象之间共享状态(就像继承一样)
  • Rust 对象可以实现任意数量的Traits
  • 在 rust 中,您可以为外部类型实现自己的Traits ,而在 Java 及其 oop 系列(c# 或许其他)中,您只能为您定义的类实现接口。

程序=数据结构+算法。
struct是数据结构,traits是算法

Rust 的类型系统,包括structs、traits 和 impls ,还有枚举,基本上是按照 Haskell 或 ML 等函数式语言建模的,与 OOP 无关。
Rust 将其与更面向 OOP 的语法(特别是方法调用)结合起来,但它根本不做 OOP。

  • structs声明以某种方式组合在一起的数据,例如“字符串”由数据缓冲区和使用的缓冲区量组成。
  • impl 块将功能附加到structs结构,允许您声明特定函数在语义上与特定结构相关。
  • traits 允许您声明某些类型遵循某些相似的模式,从而允许您声明在实现了traits 的类型中通用的类型和函数。

Rust 更关注数据及其移动方式。

  • structs只是一种数据表示
  • impl 只是作用于structs结构体的函数的语法糖。它还充当命名空间,您可以在其中重复已使用的函数名称。除此之外 impl 函数只是普通函数。
  • traits 是为了允许某种形式的遗传约束。

当我使用 OOP 语言时,我觉得它被描述为对象,即与世界交互并更新内部状态的“参与者”。
当我在 Rust 中工作时,我感觉我们拥有来自世界的数据,并且函数作用于数据并将其转换为不同的格式。
  • OOP -> 对象作用于世界和自身
  • Rust(以及更多 FP) -> 函数作用于数据

每种语言(或多或少)都是独特的,并且都有自己的一套习语、模式和功能。
通过尝试改变一种语言以特定的范式进行思考,你会获得不同的思维模式。(思想本身就是一种语言的涌现?

当人们说 OOProgramming 时,他们通常指的是 OODesign,我将其理解为为问题域定义/建模抽象的特定方法。
与此 OOD 不同的是,我们有一组给定的编程语言工具。这些工具可用于将 OOD 转换为具体程序。
然而,这些工具只能映射到 OOD 的属性子集,这有点奇怪,因为人们甚至无法同意 OO 的含义。
举一个有争议的例子,我可以使用 OOD 对我的领域进行建模,然后使用 C 语言以及结构和函数来实现它。人们会说这不是“有效”的 OOP 吗?是的,这是因为缺少封装等语言功能。但是,从建模的角度来看,这仍然是面向对象的。