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

Ориентированное на объекты программирование Rust

Языки программирования, направленные на объектно-ориентированное программирование, обычно реализуют обертку данных и наследование и могут вызывать методы на основе данных.

Rust не является языком программирования, направленным на объектно-ориентированное программирование,但这些 функции можно реализовать.

Обертка данных

Обертка данных — это стратегия внешнего отображения, в Rust это можно реализовать с помощью механизма модулей, и каждый файл Rust можно рассматривать как модуль, элементы которого можно экспортировать наружу с помощью ключевого слова pub. Это подробно описано в разделе "Организация управления".

"Класс" часто используется в языках программирования, направленных на объектно-ориентированное программирование. "Класс" обертывает данные, это абстракция для данных одного класса и методов их обработки. В Rust мы можем использовать структуры данных или枚举 для реализации функциональности класса:

pub struct ClassName {}}
    pub field: Type,
}
pub impl ClassName {
    fn some_method(&self) {
        // Тело метода функции
    }
}
pub enum EnumName {
    A,
    B,
}
pub impl EnumName {
    fn some_method(&self) {
    } 
}

Ниже создадим полный класс:

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();
}

Результат вывода:

from public method
from private method

Наследование

Большинство других面向对象的 языков программирования могут реализовать "наследование" и описывают этот процесс словом "extend".

Наследование - это реализация идеи полиморфизма (Polymorphism), под полиморфизмом понимается возможность обработки кодом множественных типов данных языком программирования. В Rust полиморфизм реализуется через характеристики (trait). Подробности о характеристиках приведены в разделе "Характеристики". Однако характеристики не могут реализовать наследование свойств, они могут реализовать функциональность, аналогичную "интерфейсу", поэтому лучше определить методы "родительского класса" в "дочернем классе".

Короче говоря, Rust не предоставляет糖рации для наследования и не имеет официальных средств наследования (полностью эквивалентно наследованию классов в Java), но гибкие грамматические правила все же позволяют реализовать связанные функции.