Die guten ins Töpfchen, die schlechten ins Kröpfchen.
Sie kennen vielleicht die Szene aus Aschenputtel, in der Aschenputtels Stiefschwestern sie mit dem Sortieren von Erbsen schikanieren. Für viele von uns ist das Sortieren und Organisieren eine lästige Pflicht, auch wenn wir wissen, dass Struktur und Ordnung unsere Arbeit erleichtern können. In C++ können Namensräume verwendet werden, um zusammengehörige Code-Elemente zu strukturieren und so den Code zu modularisieren. Diese Reihenfolge gibt dem Entwickler mehr Freiheit bei der Benennung von Funktionen, Klassen oder Variablen, da sie sicherstellt, dass diese Dinge immer nur im jeweiligen Namensraum verstanden werden und es keine Mehrdeutigkeiten geben kann. Besonders in stark verteilten Entwicklungsprozessen können Namensmehrdeutigkeiten in verschiedenen Software-Komponenten zu Problemen führen, die erst spät in der Integrationsphase entdeckt werden. In diesem Blog-Beitrag zeigen wir Ihnen, wie Namensräume aktuell in TargetLink eingesetzt werden können und welche interessanten neuen Funktionen wir mit TargetLink 2023-B veröffentlichen werden.
Vorname: Das Was
In C++ werden Namensräume mit dem Schlüsselwort namespace definiert. Dem Schlüsselwort folgen geschweifte Klammern, die einen Geltungsbereich für die darin enthaltenen Symbole, d. h. Typen, Funktionen oder Variablen, vorgeben. Sie können Namensräume verschachteln, um Hierarchien zu erstellen, die die modulare Architektur Ihres Codes darstellen. Um ein Symbol aus einem Namensraum zu adressieren, stellen Sie dem Symbol einen Namensraum-Namen voran, wie in Abbildung 1 gezeigt.
Zweitens: Das Warum
Viele von Ihnen wissen wahrscheinlich, dass C++ die Programmiersprache des Adaptive-AUTOSAR-Standards ist. Die dienstorientierte Architektur des Adaptive-AUTOSAR-Standards hat viel zu bieten, wenn es darum geht, zukünftige Herausforderungen im Automobilbereich zu meistern, z. B. autonomes Fahren, Fahrzeugkonnektivität oder den Einsatz von Hochleistungssteuerungen (HPCs). Der Adaptive-AUTOSAR-Standard und die zugehörigen Kodierrichtlinien ermutigen Anwender zur Verwendung von Namensräumen, da diese eine strukturierte, modulare und kontrollierte Entwicklung ermöglichen, was die Flexibilität, Skalierbarkeit und Haltbarkeit verbessert.
Drittens: Das Wie
Das Anlegen und Verwalten von Namensräumen in TargetLink erfolgt im TargetLink Data Dictionary (DD) und ist genauso komfortabel wie bei anderen Daten. Sie können Namensräume und benutzerdefinierte Namensraumgruppen im Pool-Bereich erstellen. Den entsprechenden Namensraum können Sie dann bei AUTOSAR-DD-Objekten wie Service-Interfaces oder TargetLink-DD-Objekten als Typedefs referenzieren.
Natürlich funktioniert dies auch im empfohlenen Top-Down-Workflow , bei dem Sie mit einer ARXML-Datei aus einem Architekturmodellierungswerkzeug beginnen. Nach dem Import der ARXML in die DD werden alle in der ARXML enthaltenen Namensräume für Sie erstellt und bei den entsprechenden DD-Objekten referenziert. Das bedeutet, dass alles für die Erstellung eines funktionierenden Rahmenmodells und die Modellierung des Verhaltens der AUTOSAR-Software-Komponente bereit ist.
Wir wissen von unseren Kunden, dass Sie sicherstellen wollen, dass Ihr gesamter Anwendungscode in einem Namensraum generiert wird, entweder aufgrund der Adaptive-AUTOSAR-Kodierrichtlinien oder aufgrund anderer Anforderungen. Aus diesem Grund führen wir mit TargetLink 2023-B eine neue Funktion ein: den allgemeinen Namensraum. Mit der allgemeinen Namensraumfunktion können Sie einem Modul oder einer Software-Komponente einen Namensraum zuweisen. Der Namensraum wird dann an alle Objekte im Modul oder in der Software-Komponente vererbt, obwohl Sie weiterhin wie gewohnt auf andere Namensräume für ausgewählte Objekte verweisen können. So wie die Tauben dem Aschenputtel beim Sortieren der Erbsen geholfen haben, erspart Ihnen diese Funktion die manuelle Zuweisung von Namensräumen zu allen Variablen, Funktionen und Typen der Anwendung.
Obwohl wir immer versuchen, den bestmöglichen und konformsten Code zu generieren, möchten Sie den generierten Code vielleicht dennoch an Ihre Bedürfnisse anpassen. Es ist uns wichtig, dass Sie genau den Code erhalten, den Sie wünschen, daher haben wir natürlich auch die Anpassung für die Verwendung von Namensräumen vorgesehen. Wenn Sie beispielsweise die Code-Generator-Option NamespaceQualification auf Reduced einstellen, können Sie konfigurieren, ob Elemente im generierten Code mit ihrem vollständigen Namensraum qualifiziert werden oder nur mit dem Namensraum, der sich vom umgebenden Namensraum unterscheidet. Wenn Sie die Code-Generator-Option auf Reduced setzen, erhalten Sie besser lesbaren Code. Nachteilig ist, dass bei der Integration von externem Code Mehrdeutigkeiten in Bezug auf Symbolnamen auftreten können. Daher ist die Code-Generator-Option standardmäßig auf Full eingestellt.
Zuletzt: Ihre Meinung
Der Adaptive-AUTOSAR-Standard hat für den Automobilbereich und seine zukünftigen Herausforderungen viel zu bieten und ist eng mit modernem C++ verknüpft. Wir bei dSPACE wollen Ihnen die beste Lösung für Ihre Herausforderungen bieten. Deshalb freuen wir uns immer, mit Ihnen über Ihre zukünftigen Anforderungen an C++ zu sprechen und Ihr Feedback zu bestehenden Funktionen zu erhalten. Die allgemeine Namensraum-Funktion von TargetLink 2023-B ist eines der Themen, die wir in Kundengesprächen häufig besprochen haben. Wir möchten Sie daher ermutigen, sich mit uns in Verbindung zu setzen, damit wir weiterhin die Tauben sein können, die Ihnen helfen.