Rust trūkst vietējā OOP atbalsta, taču jūs jebkurā gadījumā varat izmantot šīs metodes, lai izmantotu paradigmas priekšrocības.
Objektorientētā programmēšana (OOP) vienkāršo programmatūras izstrādi, uzsverot objektu izmantošanu, lai attēlotu reālās pasaules vienības un koncepcijas. OOP veicina apkopi, iekapsulējot funkcionalitāti objektos.
Rust ir elastīga valoda, kas atbalsta funkcionālo un procesuālo programmēšanu. Lai gan tas sākotnēji neatbalsta uz objektu orientētu programmēšanu, varat ieviest OOP koncepcijas, izmantojot Rust iebūvētos datu tipus.
Iekapsulēšana rūsā
Iekapsulēšana ietver koda organizēšanu atsevišķās vienībās, kas slēpj iekšējās detaļas publisko saskarni ārējai mijiedarbībai, lai samazinātu sarežģītību un uzlabotu kodu kopjamība.
Jūs varat iekapsulēt Rust kodu ar moduļiem. Modulis ir vienumu kolekcija, tostarp funkcijas, struktūras, enums un konstantes. Rūsas moduļi nodrošina funkcionalitāti grupēšanai un robežu noteikšanai starp programmas daļām.
Moduļu izmantošana datu un funkciju iekapsulēšanai
Varat definēt moduli, izmantojot mod atslēgvārds, kam seko nosaukums:
mod mans_modulis {
// moduļa vienumi atveras šeit
}
Moduļus var sakārtot hierarhiski, ligzdojot to deklarācijas:
mod vecāku_modulis {
mod mans_modulis {
// moduļa vienumi atveras šeit
}
}
Pēc tam varat atsaukties uz ligzdotajiem moduļiem ar pilnu hierarhiju, atdalot katru moduli ar dubultu kolu, piemēram, vecāku_modulis:: mans_modulis.
Pēc noklusējuma vienumi moduļos ir privāti un pieejami tikai kodam tajā pašā modulī. Bet jūs varat padarīt moduļus publiskus, izmantojot krogs atslēgvārds:
mod mans_modulis {
krogsfnmana_funkcija() {
// funkcija ķermenis iet šeit
}
}
Pēc tam varat piekļūt mana_funkcija no citām programmas daļām.
Iezīmju izmantošana uzvedības definēšanai
Vēl viens veids, kā Rust nodrošina iekapsulēšanu, ir īpašību izmantošana. Pazīmes nosaka uzvedību, ko tipi var īstenot, un nodrošina, ka dažādi tipi atbilst vienai un tai pašai saskarnei.
krogsīpašībaDrukājams {
fndrukāt(&sevi);
}krogsstruktūraMyType {
// strukturēt laukus šeit
}
impl Drukājams priekš MyType {
fndrukāt(&sevi) {
// ieviešana šeit
}
}
The Drukājams īpašībai piemīt a drukāt metode, un MyType struct īsteno Drukājams iezīmi, ieviešot drukāt metodi.
Izmantojot pazīmes, varat nodrošināt, ka jebkura veida, kas īsteno Drukājams īpašībai piemīt a drukāt metodi. Tas ir ērti, strādājot ar vispārīgu kodu, kuram ir jāsadarbojas ar dažādiem tipiem, kuriem ir kopīga uzvedība.
Mantojums rūsā
Mantojums ļauj definēt vienu klasi, pamatojoties uz citu. Apakšklase pārmantos tās vecāku īpašības un metodes.
Rūsā jūs tiekat mudināts mantojuma vietā izmantot kompozīciju. Kompozīcija ir jaunu objektu radīšanas process, apvienojot esošos. Tā vietā, lai izveidotu jaunu klasi, kas manto funkcionalitāti no bāzes klases, varat izveidot jaunu struktūru, kas satur bāzes struktūras gadījumu un tās laukus.
Jaunu tipu izveide, apvienojot esošos
Lai izveidotu jaunus veidus, izmantosit enums un struktūras. Enums ir ērts tipiem ar ierobežotām vērtībām, un struktūrās var būt vairāki lauki.
Varat izveidot enum veidu dažāda veida dzīvniekiem.
enumDzīvnieks {
kaķis,
suns,
putns,
// ...
}
Varat arī izveidot struktūru, kurā ir lauki katram dzīvnieku veidam. Struktūrās var būt enums un citi veidi.
struktūraDzīvnieks {
nosaukums: Stīga,
vecums: u8,
animal_type: AnimalType,
}
enumDzīvnieka tips {
kaķis,
suns,
putns,
// ...
}
The Dzīvnieks struct satur vērtības Dzīvnieka tips uzskaites veids.
Varat izmantot pazīmes, lai ieviestu pārmantošanu un pievienotu tipam uzvedību, neveidojot jaunu.
īpašībaLidot {
fnlidot(&sevi);
}
Lūk, kā jūs varat īstenot Lidot īpašība vairākiem tipiem.
struktūraPutns {
nosaukums: Stīga,
spārnu platums: f32,
}impl Lidot priekš putns {
fnlidot(&sevi) {
println!("{} lido!", sevi.name);
}
}struktūraLidmašīna {
modelis: Stīga,
maksimālais ātrums: u32,
}
impl Lidot priekš Lidmašīna {
fnlidot(&sevi) {
println!("{} lido!", sevi.modelis);
}
}
The Putns un Lidmašīna struktūras īsteno Lidot iezīme un drukas virknes ar Println! makro.
Jūs varat zvanīt uz lidot metodi abām struktūrām, nezinot to īpašos veidus.
fngalvenais() {
ļaut putns = putns {
nosaukums: Stīga::no("Ērglis"),
spārnu platums: 2.0,
};ļaut lidmašīna = lidmašīna {
modelis: Stīga::no("Boeing 747"),
maksimālais ātrums: 900,
};ļaut flying_objects: Vecdyn Lidot> = vec![&putns, &lidmašīna];
priekš objektu iekšā lidojoši_objekti {
objekts.fly();
}
}
The galvenais funkcija instantizē Lidmašīna un Putns veidi. The lidojoši_objekti vektors ir objekta gadījumu vektors, un priekš cilpa šķērso vektoru un izsauc lidot metodi gadījumiem.
Polimorfisma ieviešana rūsā
Klase vai tips ir polimorfs, ja vairāki veidi ir saskarne. Tā kā pazīmes nodrošina funkcionalitāti Rust uzvedības noteikšanai, vienlaikus nodrošinot kopēju saskarni vispārīga koda rakstīšanai, varat izmantot iezīmes, lai ieviestu polimorfismu.
Šeit ir nosaukta iezīme Zīmējams kas nosaka uzvedību objektu renderēšanai ekrānā:
īpašībaZīmējams {
fnizdarīt(&sevi);
}
Veidi, kas ievieš pazīmi Drawable, var piekļūt izdarīt funkciju.
struktūraTaisnstūris {
platums: u32,
augstums: u32,
}
impl Zīmējams priekš Taisnstūris {
fnizdarīt(&sevi) {
// Atveidojiet taisnstūri ekrānā
}
}
Varat rakstīt vispārīgu kodu, kas zīmē objektus, kas īsteno Zīmējams īpašība.
fnizdarīt_objekts(objekts: &T) {
objekts.zīmēt();
}
The izdarīt_objekts funkcijai ir vispārīgs veids T
kā ievadi, kas ievieš Zīmējams īpašība un sauc par izdarīt metode par īpašību. Var īstenot dažādus objektus Zīmējams īpašību un piekļuvi funkcionalitātei.
Abstrakcijas ieviešana rūsā
Abstrakcija ir OOP jēdziens kur noteiktiem objektiem un tipiem ir pieejamas klases un saskarnes. Jūs varat īstenot abstrakciju Rust ar iezīmēm.
Šis ir multivides atskaņotāja iezīmes piemērs:
īpašībaPlašsaziņas līdzekļi {
fnspēlēt(&sevi);
}
Struktūras un enums, kas īsteno Plašsaziņas līdzekļi iezīmei ir jānodrošina īstenošana spēlēt metodi.
struktūraDziesma {
virsraksts: Stīga,
mākslinieks: Stīga,
}
impl Plašsaziņas līdzekļi priekš Dziesma {
fnspēlēt(&sevi) {
println!("Atskaņo dziesmu: {} no {}", sevi.title, sevi.mākslinieks);
}
}
The Dziesma struct īsteno Plašsaziņas līdzekļi iezīmi, nodrošinot ieviešanu spēlēt metode, kas izdrukā ziņojumu ar laukiem Dziesma struktūras uz konsoli.
fngalvenais() {
// Izveidojiet dziesmas struktūras gadījumu
ļaut dziesma = dziesma {
virsraksts: Stīga::no("Bohēmas rapsodija"),
mākslinieks: Stīga::no("Karaliene"),
};
// Izsauciet atskaņošanas metodi dziesmas instancē
dziesma.play();
}
The dziesma mainīgais ir gadījums Dziesma struct, un mainīgais var piekļūt un izsaukt spēlēt metodi.
Rūsas koda organizēšana ir vienkārša
Uz objektu orientētā programmēšana palīdz koda organizēšanā. Pateicoties Rust moduļu sistēmai, jūs varat viegli sakārtot savu Rust kodu, vienlaikus ieviešot OOP koncepcijas savai lietojumprogrammai, lai jūsu kods būtu sakārtots, pārvaldāms un intuitīvs.