良い豆を皿に、悪い豆は畑に

童話「シンデレラ」で、異母姉たちのいじめにより豆を選別させられることになったシンデレラがハトの助けを借りる、というエピソードをご存じでしょうか。多くの人にとっては、選別や整理というものは面倒な作業ですが、その一方で仕事を容易に進めるには構造や順序が重要であることは理解しています。C++では、名前空間を使用することで、同類のコードエレメントを構造化し、コードをモジュール化することが可能です。この仕組みによって、関数、クラス、または変数は常にそれぞれの名前空間においてのみ解釈され、曖昧さを確実に排除できるので、開発者はそれらをより自由に命名できるようになります。特に、非常に細かく分散化された開発プロセスでは、各ソフトウェアコンポーネントの名前の曖昧さによってさまざまな問題が引き起こされる可能性があり、それらはインテグレーションの段階の終盤になってようやく発見される場合があります。このブログ記事では、TargetLinkにおける現在の名前空間の使用方法と、TargetLink 2023-Bでリリース予定の興味深い新機能について紹介します。

はじめに:何を
図1:名前空間の宣言と定義

はじめに:何を

C++では、名前空間用のキーワードを使用して名前空間を定義します。また、名前空間用のキーワードの後に波括弧を置くことで、その内部に含まれるシンボル、すなわちタイプ、関数、または変数の範囲を示します。名前空間をネストすれば、コードのモジュール型アーキテクチャを表現する階層を作成することもできます。名前空間のシンボルを指定するには、図1に示すように、シンボルの前に名前空間名を付けます。

次に:なぜ

多くの方は、C++がAdaptive AUTOSAR規格のプログラミング言語であることをおそらくご存知でしょう。Adaptive AUTOSAR規格のサービス指向アーキテクチャを使用することは、自動運転、車両コネクティビティ、高性能コントローラ(HPCs)などの自動車分野の今後の課題に対応するうえで多くのメリットがあります。名前空間を使用すれば、構造化、モジュール化、管理された開発が可能になり、柔軟性、拡張性、および耐久性が向上します。そのため、Adaptive AUTOSAR規格や関連コーディングガイドラインでは、名前空間の使用を推奨しています。

さらに:どうやって

TargetLinkでの名前空間の作成や管理は、TargetLink Data Dictionary(DD)で行えるため、他のデータの場合と同様に簡単です。名前空間とカスタム名前空間グループは、Poolエリアで作成できます。その後、サービスインターフェースなどのAUTOSAR DDオブジェクト、またはtypedefとしてTargetLink DDオブジェクトで、対応する名前空間を参照できます。

図2:TargetLinkでの名前空間の作成と参照

もちろんこれは、アーキテクチャモデリングツールからARXMLファイルを使用して作業を開始する 推奨されたトップダウン型のワークフロー でも有効です。ARXMLをDDにインポートすると、ARXMLに含まれているすべての名前空間が作成され、対応するDDオブジェクトで参照されます。これは、作業用のフレームモデルを生成してAUTOSARソフトウェアコンポーネントの動作をモデリングするうえで必要な準備がすべて整ったことを示しています。

お客様との対話を通じて当社が気付いたことは、すべてのアプリケーションコードがAdaptive AUTOSARコーディングガイドラインやその他の要件に沿って名前空間で生成されているか確認したいと考えている方が多いことでした。そのため、当社はTargetLink 2023-Bの新機能として名前空間を使用できるようにいたしました。一般的な名前空間の機能では、名前空間をモジュールやソフトウェアコンポーネントに割り当てることができます。名前空間はその後モジュールやソフトウェアコンポーネントのすべてのオブジェクトに継承されます。ただし、通常通り、選択中のオブジェクトで他の名前空間を参照することも可能です。ハトが豆の選別でシンデレラを助けてくれたのと同様に、この機能を活用すれば、アプリケーションのすべての変数、関数、およびタイプに名前空間を手作業で割り当てる必要がなくなります。

図3:名前空間機能の使用

図4:NamespaceQualificationコードジェネレータオプションを[ Reduced ]または[ Full ]に設定した場合の違い

当社は常に考えられる限り最良かつ最も適合したコードを生成しようと努めていますが、生成されたコードを自社のニーズに合わせてカスタマイズしたいお客様もいるでしょう。当社にとって重要なのは、お客様がお望みのコードを入手できることです。そのため、名前空間の使用に関してカスタマイズをすることももちろん可能です。たとえば、[ NamespaceQualification ]コードジェネレータオプションを[ Reduced ]に設定すると、生成されたコードのエレメントを名前空間全体で修飾するか、周辺の名前空間とは異なる名前空間のみで修飾するかを設定できます。また、コードジェネレータオプションを[ Reduced ]に設定すると、可読性に優れたコードが得られます。しかし、これには外部コードを統合した場合にシンボル名に関する曖昧さが生じ得るというマイナス面もあるため、コードジェネレータオプションはデフォルトでは[ Full ]に設定されています。

最後に:お客様にとって

Adaptive AUTOSAR規格は最新のC++と密接なつながりを持っており、自動車分野の将来的な課題の解決に多くの利点をもたらします。当社は、お客様の課題に対して最善のソリューションを提供したいと考えており、いつでも喜んでC++に関するお客様の今後のニーズについてお話を伺います。また、既存の機能に関するお客様からのフィードバックもお待ちしています。TargetLink 2023-Bで追加された名前空間機能は、お客様との対話の中で頻繁に議論されたトピックの1つです。お気軽に当社にご連絡いただくことで、当社はお客様をサポートするハトであり続けることができます。

著者について

Sven Siemon

Sven Siemon

テクニカルライター、RD Governance & Competence Partners、dSPACE GmbH

最新の技術開発動向をつかんで、イノベーションを加速。

メールマガジンの購読希望・変更/配信停止手続き

Enable form call

At this point, an input form from Click Dimensions is integrated. This enables us to process your newsletter subscription. The form is currently hidden due to your privacy settings for our website.

External input form

By activating the input form, you consent to personal data being transmitted to Click Dimensions within the EU, in the USA, Canada or Australia. More on this in our privacy policy.