Rust, OOP için yerel destekten yoksundur, ancak yine de paradigmadan yararlanmak için bu teknikleri kullanabilirsiniz.

Nesne Yönelimli Programlama (OOP), gerçek dünyadaki varlıkları ve kavramları temsil etmek için nesnelerin kullanımını vurgulayarak yazılım tasarımını basitleştirir. OOP, nesnelerin içindeki işlevselliği kapsülleyerek sürdürülebilirliği teşvik eder.

Rust, işlevsel ve yordamsal programlamayı destekleyen esnek bir dildir. Yerel olarak nesne yönelimli programlamayı desteklemese de, Rust'ın yerleşik veri türlerini kullanarak OOP kavramlarını uygulayabilirsiniz.

Rust'ta Kapsülleme

Kapsülleme, kodun dahili ayrıntıları gizleyen bağımsız birimler halinde düzenlenmesini gerektirir. karmaşıklığı en aza indirmek ve kodu iyileştirmek için harici etkileşim için genel bir arabirimi açığa çıkarma sürdürülebilirlik

Rust kodunu modüllerle kapsülleyebilirsiniz. Bir modül, işlevleri, yapıları, numaralandırmaları ve sabitleri içeren bir öğeler koleksiyonudur. Rust modülleri, bir programın bölümleri arasındaki sınırları gruplamak ve tanımlamak için işlevsellik sağlar.

instagram viewer

Verileri ve İşlevleri Kapsüllemek için Modülleri Kullanma

kullanarak bir modül tanımlayabilirsiniz. mod ardından bir ad gelen anahtar sözcük:

mod benim_modülüm {
// modül öğeleri buraya gelir
}

Bildirimlerini iç içe geçirerek modülleri hiyerarşik olarak düzenleyebilirsiniz:

mod ebeveyn_modülü {
mod benim_modülüm {
// modül öğeleri buraya gelir
}
}

Daha sonra, her modülü çift kolonla ayırarak, tam hiyerarşi ile iç içe geçmiş modüllere başvurabilirsiniz, örneğin, parent_module:: benim_module.

Varsayılan olarak, modüller içindeki öğeler özeldir ve yalnızca aynı modül içindeki kodlar tarafından erişilebilir. Ancak, modülleri kullanarak herkese açık hale getirebilirsiniz. birahane anahtar kelime:

mod benim_modülüm {
birahanefnbenim_fonksiyonum() {
// işlev gövdesi buraya gelir
}
}

Daha sonra erişebilirsiniz benim_fonksiyonum programınızın diğer bölümlerinden.

Davranışları Tanımlamak İçin Özellikleri Kullanma

Rust'ın kapsüllemeyi etkinleştirmesinin bir başka yolu da özelliklerin kullanılmasıdır. Özellikler, türlerin uygulayabileceği davranışları tanımlar ve farklı türlerin aynı arabirime uymasını sağlar.

birahanekarakterYazdırılabilir {
fnYazdır(&öz);
}

birahaneyapıBenim tipim {
// burada yapı alanları
}

ima Yazdırılabilir için Benim tipim {
fnYazdır(&öz) {
// uygulama burada
}
}

bu Yazdırılabilir özelliği vardır Yazdır yöntem ve Benim tipim yapı uygular Yazdırılabilir özelliğini uygulayarak Yazdır yöntem.

Özellikleri kullanarak, uygulayan herhangi bir türün Yazdırılabilir özelliği vardır Yazdır yöntem. Bu, ortak bir davranışı paylaşan farklı türlerle birlikte çalışması gereken genel kodla çalışırken kullanışlıdır.

Rust'ta miras

Kalıtım, bir sınıfı farklı bir sınıfa göre tanımlamanıza izin verir. Alt sınıf, ebeveyninin özelliklerini ve yöntemlerini devralır.

Rust'ta, kalıtım yerine kompozisyon kullanmanız teşvik edilir. Kompozisyon, mevcut nesneleri birleştirerek yeni nesneler oluşturma sürecidir. Temel sınıftan işlevsellik devralan yeni bir sınıf oluşturmak yerine, temel yapı ve alanlarının bir örneğini içeren yeni bir yapı oluşturabilirsiniz.

Mevcut Tipleri Birleştirerek Yeni Tipler Oluşturmak

Yeni türler oluşturmak için numaralandırmaları ve yapıları kullanacaksınız. Numaralandırmalar, sonlu değerlere sahip türler için kullanışlıdır ve yapılar birden çok alanı tutabilir.

Farklı hayvan türleri için bir enum türü oluşturabilirsiniz.

SıralamaHayvan {
Kedi,
Köpek,
Kuş,
// ...
}

Alternatif olarak, her hayvan türü için alanlar içeren bir yapı oluşturabilirsiniz. Yapılar numaralandırmaları ve diğer türleri tutabilir.

yapıHayvan {
isim: Sicim,
yaş: u8,
hayvan_türü: HayvanTürü,
}

SıralamaHayvan Türü {
Kedi,
Köpek,
Kuş,
// ...
}

bu Hayvan struct değerleri tutar Hayvan Türü numaralandırma türü.

Kalıtımı uygulamak ve yeni bir tür oluşturmadan bir türe davranış eklemek için özellikleri kullanabilirsiniz.

karakterUçmak {
fnuçmak(&öz);
}

İşte şu şekilde uygulayabilirsiniz: Uçmak birden fazla tür için özellik.

yapıKuş {
isim: Sicim,
kanat açıklığı: f32,
}

ima Uçmak için Kuş {
fnuçmak(&öz) {
yazdır!("{} uçuyor!", öz.isim);
}
}

yapıUçak {
modeli: Sicim,
Max hız: u32,
}

ima Uçmak için Uçak {
fnuçmak(&öz) {
yazdır!("{} uçuyor!", öz.model);
}
}

bu Kuş Ve Uçak yapılar uygular Uçmak özellik ve baskı dizeleri ile Yazdır! makro.

arayabilirsin uçmak belirli türlerini bilmeden her iki yapıda da yöntem.

fnana() {
izin vermek kuş = Kuş {
isim: Sicim::itibaren("Kartal"),
kanat açıklığı: 2.0,
};

izin vermek düzlem = Düzlem {
modeli: Sicim::itibaren(Boeing 747),
Max hız: 900,
};

izin vermek uçan_nesneler: Vecdin Uç> = vec![&kuş, &uçak];

için nesne içinde uçan_nesneler {
nesne.fly();
}
}

bu ana işlev, örneğini başlatır Uçak Ve Kuş türleri. bu uçan_nesneler vektör, nesne örneklerinin bir vektörüdür ve için döngü vektör boyunca hareket eder ve uçmak örnekler üzerinde yöntem.

Rust'ta Polimorfizmi Uygulamak

Bir sınıf veya tür birden fazla tür bir arabirimi temsil ediyorsa polimorfik. Nitelikler, Rust'ta davranışların tanımlanması için işlevsellik sağlarken genel kod yazmak için ortak bir arabirim sağladığından, Traits'i polimorfizmi uygulamak için kullanabilirsiniz.

İşte adlı bir özellik çekilebilir ekranda nesneleri işleme davranışını tanımlayan:

karakterçekilebilir {
fnçizmek(&öz);
}

Drawable özelliğini uygulayan türler, çizmek işlev.

yapıDikdörtgen {
Genişlik: u32,
yükseklik: u32,
}

ima çekilebilir için dikdörtgen {
fnçizmek(&öz) {
// Dikdörtgeni ekranda göster
}
}

uygulayan nesneleri çizen genel kod yazabilirsiniz. çekilebilir karakter.

fnçizim_nesnesi(nesne: &T) {
nesne.draw();
}

bu çizim_nesnesi işlev genel bir tür alır T uygulayan girdi olarak çekilebilir özellik ve çağrılar çizmek özellik yöntemi. Farklı nesneler uygulayabilir çekilebilir özellik ve işlevselliğe erişin.

Rust'ta Soyutlamayı Uygulamak

Soyutlama OOP kavramıdır sınıfların ve arabirimlerin belirtilen nesneler ve türler tarafından erişilebilir olduğu yer. Rust'ta soyutlamayı özelliklerle uygulayabilirsiniz.

İşte bir medya oynatıcı için örnek bir özellik:

karaktermedya {
fnoynamak(&öz);
}

Şunu uygulayan yapılar ve numaralandırmalar medya özellik için bir uygulama sağlamalıdır oynamak yöntem.

yapıŞarkı {
başlık: Sicim,
sanatçı: Sicim,
}

ima medya için Şarkı {
fnoynamak(&öz) {
yazdır!("Şarkı çalınıyor: {} yazan {}", öz.başlık, öz.sanatçı);
}
}

bu Şarkı yapı uygular medya özelliği için bir uygulama sağlayarak oynamak alanları ile bir mesaj yazdıran yöntem Şarkı konsola yapılar.

fnana() {
// Song yapısının bir örneğini yarat
izin vermek şarkı = Şarkı {
başlık: Sicim::itibaren("Bohemian Rhapsody"),
sanatçı: Sicim::itibaren("Kraliçe"),
};

// Şarkı örneğinde oynatma yöntemini çağırın
şarkı.play();
}

bu şarkı değişken, örneğinin bir örneğidir Şarkı struct ve değişken erişebilir ve arayabilir oynamak yöntem.

Rust Kodunu Düzenlemek Çok Kolay

Nesne yönelimli programlama, kod organizasyonuna yardımcı olur. Rust'ın modül sistemi sayesinde, kodunuzu düzenli, yönetilebilir ve sezgisel tutmak için uygulamanız için OOP kavramlarını uygularken Rust kodunuzu kolayca düzenleyebilirsiniz.