Объектно-ориентированное программирование
ООП
Кратко
некоторые полиморфные свойства (не все)
Абстракция: объект содержит данные и поведение — Objects Contain Data and Behavior
Инкапсуляция: скрытие деталей реализации — Encapsulation that Hides Implementation Details
Наследование: наследование как система типов и способ переиспользования кода — Inheritance as a Type System and as Code Sharing
trait object
Box
— это trait object; Rust разрешает его во время выполнения, что расходует часть производительности — по возможности не используйте pub trait Draw { fn draw(&self); } // trait object pub struct Screen { pub components: Vec<Box<dyn Draw>>, } impl Screen { pub fn run(&self) { for component in self.components.iter() { component.draw(); } } } // generic type + trait bound pub struct Screen<T: Draw> { pub components: Vec<T>, } impl<T> Screen<T> where T: Draw, { pub fn run(&self) { for component in self.components.iter() { component.draw(); } } }