文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Rust实现面向对象的方法

2022-11-13 18:48

关注

前言

面向对象的编程语言通常实现了数据的封装继承并能基于数据调用方法。“设计模式四个小帮手”在《设计模式》中给出面向对象的定义:面向对象的程序由对象组成,对象包装了数据和操作这些数据的过程,这些过程通常被称作方法或操作。Rust 并不是面向对象的语言,但是面向对象的功能都可以通过自身的特点来实现。

1、实现封装(pub)

调用对象外部的代码无法直接访问对象内部的实现细节,唯一可以与对象进行交互的方法就是通过它公开的 API,在Rust 中使用 pub关键字来供外部访问。

封装的示例:

pub struct AveragedCollection{
    list:Vec<i32>,
    average:f64
}

impl AveragedCollection{
    pub fn add(&mut self,value:i32){
        self.list.push(value);
        self.update_average();
    }

    pub fn remove(&mut self)->Option<i32>{
        let result=self.list.pop();
        match result {
            Some(value)=>{
                self.update_average();
                Some(value)
            },
            None=>None
        }
    }

    pub fn average(&self)->f64{
        self.average
    }

    fn update_average(&mut self){
        let total:i32=self.list.iter().sum();
        self.average=total as f64 / self.list.len() as f64;
    }
}

代码解释:

由此示例可知 Rust 结构体等类型默认是私有的,相当于C++/Java中的private,而被pub修饰后相当于public,合理利用这些关键字可以做到封装的效果。

2、实现继承(trait)

继承可以使对象沿用另外一个对象的数据和行为,无需定义相关代码,代码复用效率高。Rust 中不存在继承,但是可以通过 trait 方法来实现代码共享,且可以在 trait 中覆盖定义的方法,这就相当于主流语言中的子类继承父类与重写父类方法。

2.1、为共有行为定义一个 Trait

Rust 避免将 structenum 称为对象,因为它们与impl块是分开的。

2.2、Trait 对象执行的是动态派发

2.3、Trait对象必须保证对象安全

3、实现多态(结合泛型)

继承是多态(Polymorphism)思想的实现,多态指的是编程语言可以处理多种类型数据的代码,在 Rust中使用泛型trait 约束(限定参数化多态 bounded parametric)模拟多态的使用。

有关Rust 泛型与特性的知识在本专栏前面已经介绍过,帮大家放个链接:Rust 泛型与特性

4、面向对象的设计模式

状态模式(state pattern)是一种面向对象设计模式:

Rust不仅能够实现面向对象的设计模式,还可以支持更多的模式,例如:
将状态和行为编码为类型:
Rust 类型检查系统会通过编译时错误来阻止用户使用无效的状态。

面向对象的经典模式并不总是Rust编程实践中的最佳选择,因为Rust具有所有权等其它面向对象语言没有的特性!

到此这篇关于Rust实现面向对象的方法的文章就介绍到这了,更多相关Rust面向对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯