English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Языки программирования, направленные на объектно-ориентированное программирование, обычно реализуют обертку данных и наследование и могут вызывать методы на основе данных.
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), но гибкие грамматические правила все же позволяют реализовать связанные функции.