Rust neturi vietinio OOP palaikymo, bet vis tiek galite naudoti šiuos metodus, kad pasinaudotumėte paradigma.

Objektinis programavimas (OOP) supaprastina programinės įrangos kūrimą, pabrėždamas objektų naudojimą realaus pasaulio subjektams ir sąvokoms reprezentuoti. OOP skatina techninę priežiūrą, įtraukdama funkcionalumą objektuose.

Rust yra lanksti kalba, palaikanti funkcinį ir procedūrinį programavimą. Nors jis nepalaiko objektinio programavimo iš esmės, galite įgyvendinti OOP koncepcijas naudodami Rust integruotus duomenų tipus.

Inkapsuliavimas rūdyje

Inkapsuliavimas reiškia kodo suskirstymą į savarankiškus vienetus, kurie tuo metu paslepia vidines detales viešosios sąsajos atskleidimas išorinei sąveikai, siekiant sumažinti sudėtingumą ir patobulinti kodą prižiūrimumas.

Galite įterpti Rust kodą su moduliais. Modulis yra elementų rinkinys, įskaitant funkcijas, struktūras, sąrašus ir konstantas. Rūdžių moduliai suteikia galimybę grupuoti ir apibrėžti ribas tarp programos dalių.

Modulių naudojimas duomenims ir funkcijoms sujungti

instagram viewer

Galite apibrėžti modulį naudodami mod raktinis žodis, po kurio yra pavadinimas:

mod mano_modulis {
// modulio elementai eina čia
}

Modulius galite tvarkyti hierarchiškai įdėdami jų deklaracijas:

mod tėvų_modulis {
mod mano_modulis {
// modulio elementai eina čia
}
}

Tada galite nurodyti įdėtus modulius su visa hierarchija, atskirdami kiekvieną modulį dvigubu dvitaškiu, pavyzdžiui, tėvų_modulis:: mano_modulis.

Pagal numatytuosius nustatymus modulių elementai yra privatūs ir pasiekiami tik kodui tame pačiame modulyje. Bet jūs galite padaryti modulius viešus naudodami pub raktažodis:

mod mano_modulis {
pubfnmano_funkcija() {
// funkcijos kūnas eina čia
}
}

Tada galite pasiekti mano_funkcija iš kitų programos dalių.

Bruožų naudojimas elgesiui apibrėžti

Kitas būdas, kaip Rust įgalina kapsuliavimą, yra bruožų naudojimas. Bruožai apibrėžia elgesį, kurį tipai gali įgyvendinti, ir užtikrina, kad skirtingi tipai atitiktų tą pačią sąsają.

pubbruožasGalima spausdinti {
fnspausdinti(&savarankiškai);
}

pubstruktūraMano tipas {
// čia suformuokite laukus
}

impl Galima spausdinti dėl Mano tipas {
fnspausdinti(&savarankiškai) {
// įgyvendinimas čia
}
}

The Galima spausdinti bruožas turi a spausdinti metodas ir Mano tipas struktūra įgyvendina Galima spausdinti bruožas įgyvendinant spausdinti metodas.

Naudodami bruožus galite užtikrinti, kad bet koks tipas, įgyvendinantis Galima spausdinti bruožas turi a spausdinti metodas. Tai patogu dirbant su bendruoju kodu, kuris turi sąveikauti su skirtingais tipais, turinčiais bendrą elgesį.

Paveldėjimas rūdyje

Paveldėjimas leidžia apibrėžti vieną klasę pagal kitą. Poklasis paveldės savo pirminės klasės savybes ir metodus.

Rūdyje esate raginami naudoti kompoziciją, o ne paveldėjimą. Kompozicija yra naujų objektų kūrimo procesas, derinant esamus. Užuot sukūrę naują klasę, kuri paveldi funkcionalumą iš pagrindinės klasės, galite sukurti naują struktūrą, kurioje yra pagrindinės struktūros egzempliorius ir jo laukai.

Naujų tipų kūrimas derinant esamus tipus

Kurdami naujus tipus naudosite enumus ir struktūras. Enums patogu naudoti tipams su baigtinėmis reikšmėmis, o struktūrose gali būti keli laukai.

Galite sukurti enum tipą įvairių tipų gyvūnams.

enumGyvūnas {
Katė,
Šuo,
Paukštis,
// ...
}

Arba galite sukurti struktūrą, kurioje būtų laukai kiekvienam gyvūno tipui. Konstrukcijose gali būti enums ir kitų tipų.

struktūraGyvūnas {
vardas: Styga,
amžius: u8,
animal_type: AnimalType,
}

enumGyvūno tipas {
Katė,
Šuo,
Paukštis,
// ...
}

The Gyvūnas struktūra turi reikšmes Gyvūno tipas surašymo tipas.

Galite naudoti bruožus, kad įgyvendintumėte paveldėjimą ir pridėtumėte elgseną prie tipo, nesukurdami naujo.

bruožasSkristi {
fnskristi(&savarankiškai);
}

Štai kaip galite įgyvendinti Skristi kelių tipų savybė.

struktūraPaukštis {
vardas: Styga,
sparnų plotis: f32,
}

impl Skristi dėl Paukštis {
fnskristi(&savarankiškai) {
println!("{} skrenda!", savarankiškai.vardas);
}
}

struktūraLėktuvas {
modelis: Styga,
Maksimalus greitis: u32,
}

impl Skristi dėl Lėktuvas {
fnskristi(&savarankiškai) {
println!("{} skrenda!", savarankiškai.modelis);
}
}

The Paukštis ir Lėktuvas struktūros įgyvendina Skristi bruožas ir spausdinimo eilutes su Println! makrokomandą.

Galite skambinti skristi metodas abiejose struktūrose, nežinant konkrečių jų tipų.

fnpagrindinis() {
leisti paukštis = paukštis {
vardas: Styga::nuo("Erelis"),
sparnų plotis: 2.0,
};

leisti lėktuvas = lėktuvas {
modelis: Styga::nuo(„Boeing 747“),
Maksimalus greitis: 900,
};

leisti flying_objects: Sendyn Skristi> = vec![&paukštis, &lėktuvas];

dėl objektas in skraidantys_objektai {
objektas.skristi();
}
}

The pagrindinis funkcija kartoja Lėktuvas ir Paukštis tipai. The skraidantys_objektai vektorius yra objekto egzempliorių vektorius ir dėl kilpa eina per vektorių ir iškviečia skristi atvejus.

Polimorfizmo įgyvendinimas rūdyje

Klasė ar tipas yra polimorfinis, jei keli tipai reiškia sąsają. Kadangi bruožai suteikia galimybę apibrėžti Rust elgseną, kartu suteikia bendrą sąsają bendriniam kodui rašyti, galite naudoti bruožus polimorfizmui įgyvendinti.

Štai savybė pavadinta Piešiamas kuri apibrėžia objektų atvaizdavimo ekrane elgesį:

bruožasPiešiamas {
fnpiešti(&savarankiškai);
}

Tipai, kurie įgyvendina braižymo bruožą, gali pasiekti piešti funkcija.

struktūraStačiakampis {
plotis: u32,
aukštis: u32,
}

impl Piešiamas dėl Stačiakampis {
fnpiešti(&savarankiškai) {
// Atvaizduokite stačiakampį ekrane
}
}

Galite parašyti bendrąjį kodą, kuris nubrėžia objektus, kurie įgyvendina Piešiamas bruožas.

fnpiešti_objektas(objektas: &T) {
object.draw();
}

The piešti_objektas funkcija yra bendro tipo T kaip įvestis, kuri įgyvendina Piešiamas bruožas ir vadina piešti metodas apie bruožą. Įvairūs objektai gali įgyvendinti Piešiamas bruožas ir prieiga prie funkcijų.

Abstrakcijos įgyvendinimas rūdyje

Abstrakcija yra OOP koncepcija kur klasės ir sąsajos yra prieinamos nurodytiems objektams ir tipams. Rudyje abstrakciją galite įgyvendinti naudodami bruožus.

Štai medijos leistuvo bruožo pavyzdys:

bruožasŽiniasklaida {
fnžaisti(&savarankiškai);
}

Struktūros ir enums, kurie įgyvendina Žiniasklaida bruožas turi suteikti įgyvendinimą žaisti metodas.

struktūraDaina {
pavadinimas: Styga,
menininkas: Styga,
}

impl Žiniasklaida dėl Daina {
fnžaisti(&savarankiškai) {
println!(„Leidžiama daina: {}, autorius {}“, savarankiškai.title, savarankiškai.menininkas);
}
}

The Daina struktūra įgyvendina Žiniasklaida bruožas, pateikdamas įgyvendinimą žaisti metodas, kuris spausdina pranešimą su laukais Daina struktūras į konsolę.

fnpagrindinis() {
// Sukurkite dainos struktūros egzempliorių
leisti daina = daina {
pavadinimas: Styga::nuo("Bohemijos rapsodija"),
menininkas: Styga::nuo("karalienė"),
};

// Iškvieskite atkūrimo metodą dainos egzemplioriuje
daina.žaisti();
}

The daina kintamasis yra pavyzdys Daina struct, o kintamasis gali pasiekti ir iškviesti žaisti metodas.

Rūdžių kodą sutvarkyti paprasta

Objektinis programavimas padeda organizuoti kodą. Dėl „Rust“ modulių sistemos galite lengvai tvarkyti „Rust“ kodą įgyvendindami savo programos OOP koncepcijas, kad jūsų kodas būtų tvarkingas, valdomas ir intuityvus.