DEENESPTFRRUARHIKOZHNL
AUTOSAR_AP_EXP_ARARustApplications FIG-221e855edb7f7922 375 × 334 px 2 Release(s)

Figure 6.5: Trait and implementation

SHA-256 Inhalts-Fingerabdruck: 221e855edb7f79220889a04a02b5fed7d0f134ed1b5c929aa8a4ee9eb7bcbb4a
✦ KI-generierte Bildanalyse & technische Beschreibung Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07

Backing command execution to allow git status check to complete.

1. Diagrammtyp & Architektur-Kontext

  • Klassifikation: UML-Klassendiagramm / Metamodell-Mapping mit Rust-spezifischen UML-Stereotypen («Trait», «Struct», «impl»).
  • Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Dokument AUTOSAR_AP_EXP_ARARustApplications (Dokument-ID 1079), Kapitel 6.6.5 (Traits and impl blocks), gültig für Releases R23-11 und R24-11.
  • Funktionaler Zweck: Formale Abbildung des Rust-Typsystems auf UML. Da Rust keine objektorientierte Klassenvererbung kennt, sondern Datenstrukturen (struct) und Schnittstellenverträge (trait) strikt über getrennte Implementierungsblöcke (impl Trait for Type) entkoppelt, definiert dieses Diagramm die UML-Modellierungssemantik für explizite Implementierungsblöcke inklusive deren Modullokation (Module Scoping und Rust-Kohärenz-/Orphan-Regeln).

2. Komponenten, Entitäten & Schnittstellen

  • «Trait» module2::Trait1:
    • Stereotyp: «Trait» (UML-Schnittstellenäquivalent).
    • Gültigkeitsbereich: Modul module2.
    • Schnittstellenelemente: Öffentliche Operation/Signatur + func1 (Deklaration der Trait-Methode ohne inhärenten Rumpf).
  • «Struct» module1::MyStruct2:
    • Stereotyp: «Struct» (Repräsentiert den konkreten Rust-Datentyp / struct).
    • Gültigkeitsbereich: Modul module1.
  • «impl» module2:
    • Stereotyp: «impl» (Repräsentiert den konkreten Implementierungsblock impl Trait1 for MyStruct2).
    • Physische Lokation: Liegt explizit im Modul module2.
  • Beziehungen & Konnektoren:
    • Interface Realization (gestrichelte Linie mit geschlossener, nicht ausgefüllter Dreiecksspitze): Führt von «impl» module2 zu «Trait» module2::Trait1. Kennzeichnet die Realisierung des durch den Trait definierten Funktionsvertrags.
    • Assoziation / Typ-Bindung (durchgezogene Linie): Verbindet «impl» module2 mit «Struct» module1::MyStruct2. Kennzeichnet den konkreten Zieltyp, für den der Trait implementiert wird.
    • Rust-Kohärenz / Orphan Rule: Die Zuweisung des «impl»-Blocks zu module2 modelliert grafisch, dass die Implementierung im Modul des Traits stattfindet (erlaubt nach Rust-Orphan-Rules, da Trait1 lokal in module2 deklariert ist, während MyStruct2 via use crate::module1::MyStruct2; importiert wird).

3. Dynamisches Verhalten & Sequenzablauf (falls zutreffend)

  • Statisches Bindungsmodell: Rein strukturelles Modell ohne Laufzeit-Zustandsübergänge.
  • Compile-Zeit-Auflösung (Monomorphisierung):
    • Bei statischem Dispatch (fn call<T: Trait1>(val: T)) löst der Compiler Methodenaufrufe von func1() direkt auf Maschinencodeebene ohne Indirektion oder Laufzeit-Overhead auf.
  • Dynamischer Dispatch (Trait Objects):
    • Bei Verwendung als dyn Trait1 generiert der Compiler für MyStruct2 eine VTable, deren Funktionszeiger auf module2::Trait1::func1 verweist.
  • Fehlerbehandlung: Keine AUTOSAR-spezifischen Laufzeit-Fehlerpfade (DET/DEM); Typprüfung und Gültigkeit der Implementierung erfolgen vollständig zur Übersetzungszeit durch rustc.

4. Normative Relevanz & Entwickler-Hinweise

  • UML-Modellierungskonvention für AP-Rust:
    • Die dreiteilige Repräsentation («Trait» ← «impl» - «Struct») ist die normative Langform. Sie wird zwingend benötigt, sobald:
      1. Der Implementierungsblock in einem anderen Modul als die Struktur liegt (Darstellung der Modul-Zugehörigkeit).
      2. Zusätzliche Trait Bounds oder Generics spezifiziert werden müssen (z. B. impl<T: Send> Trait2<String> for Struct1<T>, vgl. Kap. 6.6.6).
    • Für rein triviale, modul-lokale Bindungen erlaubt die Spezifikation alternativ eine vereinfachte Kurzform (direkte Realisierungspfeil-Verbindung von «Struct» auf «Trait»).
  • Auswirkung auf Anwendungs- und Stack-Entwickler:
    • Scope-Sichtbarkeit: Um func1 auf einer Instanz von MyStruct2 aufrufen zu können, muss der Aufrufer den Trait explizit in den Scope importieren (use module2::Trait1;), sofern es sich nicht um eine Inherent-Methode handelt.
    • Codegenerierung / Toolchain: Modellierungs-Tools und Generatoren für AUTOSAR AP Rust müssen aus dieser Triade exakt den Codeblock generieren:
      use crate::module1::MyStruct2;
      
      impl Trait1 for MyStruct2 {
          fn func1() { /* ... */ }
      }

Versionsvergleich KI-generiert · gemini-3.8-flash (via agy)

R24-11 → R25-11 keine inhaltliche Änderung Nachfolger: FIG-6e0fd1db89d187a3

Keine inhaltlichen Änderungen erkennbar.

Zugeordnete Anforderungen

Diese Angaben zeigt der Versions-Explorer.

Vorkommen in AUTOSAR-Releases (2)

Release Dokument Seite Nr. Bildunterschrift im Dokument
R23-11 AUTOSAR_AP_EXP_ARARustApplications S. 32 6.5 Figure 6.5: Trait and implementation
R24-11 AUTOSAR_AP_EXP_ARARustApplications S. 32 6.5 Figure 6.5: Trait and implementation