Rust Orientado a Objetos
Los lenguajes de programación orientados a objetos generalmente implementan encapsulamiento y herencia de datos, y pueden invocar métodos basados en los datos.
Rust no es un lenguaje de programación orientado a objetos, pero todas estas funcionalidades se pueden implementar.
Encapsulamiento
El encapsulamiento es la estrategia de exponer hacia el exterior. En Rust, se puede lograr el encapsulamiento más externo mediante el mecanismo de módulos, y cada archivo de Rust puede considerarse un módulo. Los elementos dentro de un módulo pueden hacerse públicos mediante la palabra clave `pub`. Esto se detalló en el capítulo "Gestión de Organización".
La "clase" es un concepto comúnmente utilizado en lenguajes de programación orientados a objetos. La "clase" encapsula datos, es una abstracción de entidades de datos del mismo tipo y sus métodos de procesamiento. En Rust, podemos usar estructuras (struct) o enumeraciones para implementar la funcionalidad de una clase:
Ejemplo
pub field: Type,
}
pub impl ClassName {
fn some_method(&self) {
// Cuerpo del método
}
}
pub enum EnumName {
A,
B,
}
pub impl EnumName {
fn some_method(&self) {
}
}
A continuación, construimos una clase completa:
Ejemplo
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();
}
Salida:
from public method from private method
Herencia
Casi todos los demás lenguajes de programación orientados a objetos pueden implementar "herencia", y usan la palabra "extend" para describir esta acción.
La herencia es la implementación de la idea del polimorfismo (Polymorphism). El polimorfismo se refiere a que un lenguaje de programación puede manejar código de múltiples tipos de datos. En Rust, el polimorfismo se implementa mediante traits. Los detalles sobre los traits se han dado en el capítulo "Traits". Sin embargo, los traits no pueden implementar la herencia de atributos, solo pueden implementar una funcionalidad similar a "interfaces", por lo que, si se desea heredar los métodos de una clase, lo mejor es definir una instancia de la "clase padre" en la "clase hija".
En resumen, Rust no proporciona azúcar sintáctico relacionado con la herencia, ni tampoco un mecanismo oficial de herencia (totalmente equivalente a la herencia de clases en Java), pero su sintaxis flexible aún puede implementar funcionalidades relacionadas.
Otras extensiones