Bibliothekskatalog
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 60 von 61.
Aufgabe
EinfachErstelle ein Bibliothekskatalogsystem, das zeigt, wie Traits verschiedene Typen unter einer gemeinsamen Schnittstelle vereinen! Du erstellst einen Katalog, in dem Bücher und Zeitschriften trotz ihrer unterschiedlichen Eigenschaften sich alle durch einen gemeinsamen Trait beschreiben können.
Du organisierst deinen Code über drei Dateien:
catalog.rs: Definiere denCatalogItem-Trait mit einer einzelnen Methodedescription, die einenStringzurückgibt. Dieser Trait legt den Vertrag fest, den alle Bibliothekselemente erfüllen müssen.items.rs: Erstelle zwei Strukturen, die deinen Trait implementieren. EinBookhat einentitleund einenauthor(beides Strings), während einMagazineeinenname(String) und eineissue-Nummer (u32) hat. Jede Struktur sollCatalogItemmit ihrem eigenen, einzigartigen Beschreibungsformat implementieren.main.rs: Binde beide Module ein und erstelle mithilfe der bereitgestellten Eingaben Instanzen von Book und Magazine. Rufe für jedes Element die Methodedescriptionauf und gib die Ergebnisse aus.
Die Beschreibung von Book soll diesem Format folgen:
Book: {title} by {author}Die Beschreibung von Magazine soll diesem Format folgen:
Magazine: {name}, Issue {issue}Bei den Eingaben 1984, George Orwell, Nature und 42 lautet das Ergebnis beispielsweise:
Book: 1984 by George Orwell
Magazine: Nature, Issue 42Bei den Eingaben The Rust Book, Steve Klabnik, Science Weekly und 156 lautet das Ergebnis:
Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156Du erhältst vier Eingaben: Buchtitel, Buchautor, Zeitschriftenname und Zeitschriftennummer (parse die letzte als u32).
Probier es selbst
mod catalog;
mod items;
use catalog::CatalogItem;
use items::{Book, Magazine};
fn main() {
// Eingaben lesen
let mut book_title = String::new();
std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
let book_title = book_title.trim().to_string();
let mut book_author = String::new();
std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
let book_author = book_author.trim().to_string();
let mut magazine_name = String::new();
std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
let magazine_name = magazine_name.trim().to_string();
let mut issue_input = String::new();
std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");
// TODO: Erstelle eine Book-Instanz mit book_title und book_author
// TODO: Create a Magazine instance using magazine_name and magazine_issue
// TODO: Rufe description() für jedes Element auf und gib die Ergebnisse aus
}
Alle Lektionen in Objektorientierte Programmierung
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media PlayerÜbe selbstständig: Online-Rust-Compiler