English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Rust 面向对象

I linguaggi di programmazione orientati agli oggetti tipicamente implementano l'encapsulation e l'inherithance dei dati e possono chiamare i metodi basati sui dati.

Rust non è un linguaggio di programmazione orientato agli oggetti, ma queste funzionalità possono essere implementate.

Encapsulation

L'encapsulation è una strategia di visualizzazione esterna, in Rust può essere implementata attraverso il meccanismo dei moduli, e ogni file Rust può essere considerato un modulo, gli elementi del modulo possono essere resi visibili all'esterno tramite la parola chiave pub. Questo è dettagliato nella sezione "Organizzazione e gestione".

"Classe" è un concetto spesso utilizzato nei linguaggi di programmazione orientati agli oggetti. "Classe" encapsula dati, rappresentando l'astrazione di entità dati della stessa classe e dei loro metodi di gestione. In Rust, possiamo utilizzare strutture o enum per implementare le funzionalità della classe:

pub struct ClassName {}}
    pub field: Type,
}
pub impl ClassName {
    fn some_method(&self) {
        // Corpo della funzione del metodo
    }
}
pub enum EnumName {
    A,
    B,
}
pub impl EnumName {
    fn some_method(&self) {
    } 
}

Di seguito costruiamo una classe completa:

second.rs
pub struct ClassName {}}
    字段: i32,
}
impl ClassName {
    pub fn new(value: i32) -> ClassName {
        ClassName {
            字段: 值
        }
    }
    pub fn public_method(&self) {
        println!("从公共方法");
        self.private_method();
    }
    fn private_method(&self) {
        println!("从私有方法");
    }
}
main.rs
mod second;
use second::ClassName;
fn main() {
    let object = ClassName::new(1024);
    object.public_method();
}

输出结果:

从公共方法
从私有方法

继承

几乎其他的面向对象的编程语言都可以实现“继承”,并用“extend”词语来描述这个动作。

继承是多态(Polymorphism)思想的实现,多态指的是编程语言可以处理多种类型数据的代码。在 Rust 中,通过特性(trait)实现多态。有关特性的细节已在“特性”章节给出。但是特性无法实现属性的继承,只能实现类似于“接口”的功能,所以想继承一个类的方法最好在“子类”中定义“父类”的示例。

总结来说,Rust 没有提供与继承相关的语法糖,也没有官方的继承手段(完全等同于 Java 中的类的继承),但灵活的语法依然可以实现相关的功能。