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

RustOrientiert nachObjekten

Objektorientierte Programmiersprachen implementieren in der Regel die Encapsulation und Vererbung von Daten und können Methoden auf Basis von Daten aufrufen.

Rust ist keine objektorientierte Programmiersprache, aber diese Funktionen können alle realisiert werden.

Encapsulation

Encapsulation ist die Strategie der Außenansicht, in Rust kann die äußere Encapsulation durch das Mechanismus der Module realisiert werden, und jeder Rust-Datei kann als Modul betrachtet werden, die Elemente im Modul können durch den pub-Schlüssel extern angezeigt werden. Dies wird im Kapitel "Organisation und Verwaltung" im Detail beschrieben.

"Klasse" ist ein häufig verwendetes Konzept in objektorientierten Programmiersprachen. "Klasse" encapsuliert Daten und ist eine Abstraktion von Datenobjekten desselben Typs sowie deren Verarbeitungsmethoden. In Rust können wir Strukturen oder Enum-Klassen verwenden, um die Funktionen der Klasse zu realisieren:

pub struct ClassName {}}
    pub field: Type,
}
pub impl ClassName {
    fn some_method(&self) {
        // Methodenfunktion
    }
}
pub enum EnumName {
    A,
    B,
}
pub impl EnumName {
    fn some_method(&self) {
    } 
}

Below wird ein vollständiges Klassendiagramm erstellt:

second.rs
pub struct ClassName {}}
    field: i32,
}
impl ClassName {
    pub fn new(value: i32) -> ClassName {
        ClassName {
            field: value
        }
    }
    pub fn public_method(&self) {
        println!("from public method");
        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

FastalleorientiertenObjektprogrammiersprachenkönnen "Vererbung"realisieren unddieserAktionsbeschreibungwird mit demWort "extend" gegeben.

Vererbungist dieImplementierung desPolymorphismusdenks, Polymorphismusbezeichnet, dass einProgrammiersprachemehrfacheDatenartenverarbeitenkann. InRustwirdPolymorphismusdurchEigenschaften(trait)realisiert. Details zurEigenschaftsbehandlung sind imKapitel "Eigenschaften" gegeben. AllerdingskönnenEigenschaftenkeineVererbungvonEigenschaftenrealisieren,sondernnurFunktionenähnlichzu "Interface" bereitstellen, deswegenist esam besten, dieMethode einer "Klasse" im "Unterklassen" zu definieren.

Kurz gesagt, Rust bietet keine SyntaxSugar fürVererbung undkeine offiziellenVererbungsmittel (vollkommen gleichwertig mit der Vererbung vonKlassen inJava), aber flexibleSyntax ermöglicht dennochzugehörigeFunktionenzu realisieren.