學習Rust 物件導向

安全劍客發表於2020-12-30
Rust 語言是一種高效、可靠的通用高階語言。其高效不僅限於開發效率,它的執行效率也是令人稱讚的,是一種少有的兼顧開發效率和執行效率的語言。

學習Rust 物件導向學習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 中的類的繼承),但靈活的語法依然可以實現相關的功能。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2746439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章