Objektorientierung in Rust

Objektorientierte Programmiersprachen implementieren normalerweise Datenkapselung und Vererbung und können Methoden auf Basis von Daten aufrufen.

Rust ist keine objektorientierte Programmiersprache, aber alle diese Funktionen sind implementiert.

Kapselung

Kapselung ist eine Strategie der externen Offenlegung. In Rust kann die äußerste Kapselung durch den Modulmechanismus implementiert werden, und jede Rust-Datei kann als ein Modul angesehen werden. Elemente innerhalb eines Moduls können mit dem Schlüsselwort `pub` nach außen sichtbar gemacht werden. Dies wurde im Kapitel "Organisationsverwaltung" ausführlich beschrieben.

"Klasse" ist ein Konzept, das üblicherweise in objektorientierten Programmiersprachen verwendet wird. Eine "Klasse" kapselt Daten und dient als Abstraktion gleichartiger Datenentitäten und ihrer Verarbeitungsmethoden. In Rust können wir Structs oder Enums verwenden, um Klassenfunktionalität zu implementieren:

Beispiel

pub struct ClassName {
    pub field: Type,
}

pub impl ClassName {
    fn some_method(&self) {
        // Funktionsrumpf der Methode
    }
}

pub enum EnumName {
    A,
    B,
}

pub impl EnumName {
    fn some_method(&self) {

    }
}

Im Folgenden erstellen wir eine vollständige Klasse:

Beispiel

second.rs
pub struct ClassName {
    Feld: i32,
}

impl ClassName {
    pub fn new(value: i32) -> ClassName {
        ClassName {
            field: value
        }
    }

    pub fn public_method(&self) {
        println!("von öffentlicher Methode");
        self.private_method();
    }

    fn private_method(&self) {
        println!("from private method");
    }
}
main.rs
mod second;
use second::ClassName;

fn main() {
    let object = ClassName::new(1024);
    object.public_method();
}

Ausgabeergebnis:

from public method
from private method

Vererbung

Fast alle anderen objektorientierten Programmiersprachen können "Vererbung" implementieren und verwenden das Wort "extend", um diese Aktion zu beschreiben.

Vererbung ist die Umsetzung des Polymorphismus-Konzepts. Polymorphismus bezieht sich auf Code in einer Programmiersprache, der mehrere Datentypen verarbeiten kann. In Rust wird Polymorphismus durch Traits umgesetzt. Details zu Traits wurden im Kapitel "Traits" bereitgestellt. Traits können jedoch keine Eigenschaftsvererbung implementieren; sie können nur Funktionalität ähnlich wie "Schnittstellen" implementieren. Wenn Sie daher die Methoden einer Klasse erben möchten, ist es am besten, eine Instanz der "Elternklasse" innerhalb der "Unterklasse" zu definieren.

Zusammenfassend bietet Rust keinen syntaktischen Zucker in Bezug auf Vererbung und verfügt auch nicht über einen offiziellen Vererbungsmechanismus (vollständig äquivalent zur Klassenvererbung in Java), aber seine flexible Syntax kann dennoch verwandte Funktionalität implementieren.

Andere Erweiterungen