Rust orienté objet

Les langages de programmation orientés objet implémentent généralement l'encapsulation des données et l'héritage, et peuvent appeler des méthodes en fonction des données.

Rust n'est pas un langage de programmation orienté objet, mais toutes ces fonctionnalités sont implémentées.

Encapsulation

L'encapsulation est une stratégie d'exposition externe. En Rust, l'encapsulation la plus externe peut être mise en œuvre par le mécanisme de modules, et chaque fichier Rust peut être considéré comme un module. Les éléments d'un module peuvent être rendus visibles à l'extérieur à l'aide du mot-clé `pub`. Cela a été détaillé dans le chapitre « Gestion de l'organisation ».

« Classe » est un concept couramment utilisé dans les langages de programmation orientés objet. Une « classe » encapsule des données, servant d'abstraction des entités de données du même type et de leurs méthodes de traitement. En Rust, nous pouvons utiliser des structures ou des énumérations pour implémenter les fonctionnalités d'une classe :

Exemple

pub struct ClassName {
    pub field: Type,
}

pub impl ClassName {
    fn some_method(&self) {
        // Corps de la méthode
    }
}

pub enum EnumName {
    A,
    B,
}

pub impl EnumName {
    fn some_method(&self) {

    }
}

Ci-dessous, nous construisons une classe complète :

Exemple

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

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

    pub fn public_method(&self) {
        println!("depuis la méthode publique");
        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();
}

Résultat de sortie :

from public method
from private method

Héritage

Presque tous les autres langages de programmation orientés objet peuvent implémenter "l'héritage" et utilisent le mot "extend" pour décrire cette action.

L'héritage est la mise en œuvre du concept de polymorphisme. Le polymorphisme désigne du code dans un langage de programmation qui peut traiter plusieurs types de données. En Rust, le polymorphisme est mis en œuvre via les traits. Les détails sur les traits ont été fournis dans le chapitre "Traits". Cependant, les traits ne peuvent pas mettre en œuvre l'héritage de propriétés ; ils ne peuvent mettre en œuvre qu'une fonctionnalité similaire aux "interfaces". Par conséquent, si vous souhaitez hériter des méthodes d'une classe, il est préférable de définir une instance de la "classe parente" dans la "sous-classe".

En résumé, Rust ne fournit pas de sucre syntaxique lié à l'héritage, ni ne possède de mécanisme d'héritage officiel (entièrement équivalent à l'héritage de classes en Java), mais sa syntaxe flexible peut encore implémenter des fonctionnalités associées.

Autres extensions