クラス実装ファイル

オブジェクト指向プログラミングでは、クラス実装ファイルは、クラスメソッドの実装コードを格納するためによく使用されます。C++やObjective-Cなどのプログラミング言語では、これらの実装ファイルを利用して、メソッドのインターフェースと実装を分離します。[ 1 ]

動機

この構造を用いることで、クラスとそのメンバーの宣言を含むクラス定義ファイルも作成されます。クラス定義がインクルードされ、そのメソッドの実装ファイルが利用可能な場合、ユーザーはクラスのオブジェクトインスタンス化できます。この構造の目的は、実装コードを隠蔽しつつ、ユーザーが設計を確認できるようにすることです。[ 2 ] [ 3 ]

ユーザーはオブジェクトの公開インターフェースを利用することで、オブジェクトの作成を可能な限り簡単にし、クライアントコードがクラスの実装に関する不要な詳細でユーザーの注意をそらさないようにすることができます。[ 4 ] これにより、ユーザーはクラスを効果的に使用するために必要な情報を得ることができますが、コンパイルされたコードに損傷を与えることを防ぎます。[ 5 ]

クラス実装ファイルの構造

C++プログラミングにおいて、実装ファイルはクラス定義を作成する際にインターフェースと実装を分離するために使用されます。ヘッダーファイルは、クラスが持つすべてのメンバー関数(メソッド)とデータメソッド(フィールド)を宣言します。 [ 6 ] [ 7 ] [ 8 ]

実装ファイルには、ヘッダーファイルで宣言されたメソッドの実際の定義またはソースコードが含まれます。このファイルはヘッダーブロックで始まり、定義されたクラスの目的や、ファイルの作成者や作成日など、実際のファイルの作成に関する詳細を説明するコメントが記述されます。[ 9 ]また、ファイル内で宣言されたメソッドで使用されるC++標準ライブラリ のライブラリをインクルードすることもできます。クラス実装ファイルには通常、関連するヘッダーファイルをインクルードするための行が含まれます(以下の例を参照)。

C++の例

例えば、 というクラスがあるとしますExampleClass。このC++ファイルのヘッダーファイルは「Example.hpp」、実装ファイルは「ExampleClass.cpp」という名前になります。[ 10 ] [ 11 ]

この例では関数の実装は省略されていますが、関数はExampleClass.hppで次のように宣言する必要があります。[ 12 ]

#include <文字列>クラスExampleClass { private : std :: string name ; public : ExampleClass (); // コンストラクタ。void addSomething ( int k ) ; };

ExampleClass.cppの構造の例は次のようになります。

#pragma once#include "ExampleClass.hpp"ExampleClass :: ExampleClass () = default ;void ExampleClass::addSomething ( int k ) { // ... }

この構造は、セマンティクスが若干異なりますが、 C++ モジュールでも 複製できます。

ExampleClass.cppm (宣言ファイル) では次のようになります。

エクスポートモジュールorg.wikipedia.ExampleClass ;stdをインポートしますstd :: stringを使用します名前空間org :: wikipedia {エクスポートクラスExampleClass { private : string name ; public : ExampleClass (); // コンストラクター。void addSomething ( int k ); };}

ExampleClass.cpp(定義/実装ファイル) 内:

モジュールorg.wikipedia.ExampleClass ;名前空間org :: wikipedia {ExampleClass :: ExampleClass () = default ;void ExampleClass::addSomething ( int k ) { // ... }}

これは次のようにMain.cppファイルに含めることができます。

org.wikipedia.ExampleClassインポートますorg :: wikipedia :: ExampleClassを使用しますint main ( ) { ExampleClass myInst ; myInst.addSomething ( 5 ) ; return 0 ; }

Objective-Cの例

クラス実装ファイルがどのように構成されるかを示す別の例は、 iOSプログラミングで使用されるObjective-Cで見ることができます。[ 13 ] この例では「ExampleClass」を使用します。これらの実装ファイルを使用する場合のC++とObjective-Cの顕著な違いは、ファイルの末尾に使用される拡張子です。C++では.cpp [ 14 ] 、 Objective-C では.m [ 15 ]になりますが、 以下の例に示すように、 どちらもヘッダーファイルには 同じ.h拡張子を使用します[ 16 ] [ 17 ]

これはObjective-CExampleClass.hの例です。

#import <UIKit/UIKit.h>@interface ExampleClass  : NSObject { // インスタンス変数の宣言はここに記述します} - ( NSString * ) name ; @end

これはObjective-Cクラスの実装ファイルExampleclass.mの例です。

#import "ExampleClass.h"@implementation ExampleClass - ( NSString * ) name { return @"…" ; } @end

参照

参考文献

  1. ^ Alan Griffiths (2005). 「C++におけるインターフェースと実装の分離」 . ACCU . 2013年5月7日閲覧
  2. ^ Alan Griffiths (2005). 「C++におけるインターフェースと実装の分離」 . ACCU . 2013年5月7日閲覧
  3. ^ Neuberg, Matt (2011年5月26日). 「第4.3章 ヘッダーファイルと実装ファイル」. Programming iOS 4. O'Reilly Media, Inc. ISBN 978-1-4493-8843-0
  4. ^ Alan Griffiths (2005). 「C++におけるインターフェースと実装の分離」 . ACCU . 2013年5月7日閲覧
  5. ^ 「C++のすべきこと、すべきでないこと」。Chromiumプロジェクト。 2013年5月7日閲覧
  6. ^ 「C++クラス入門」2013年5月7日閲覧。
  7. ^ Alan Griffiths (2005). 「C++におけるインターフェースと実装の分離」 . ACCU . 2013年5月7日閲覧
  8. ^ Febil Chacko Thanikal (2009). 「.h ファイルでテンプレートクラスを定義し、.cpp ファイルに実装する方法」 . Code Project . 2013年5月7日閲覧。
  9. ^ 「C++プログラミングにおける実装ファイル」 ITechTalk 2013年5月7日閲覧
  10. ^ 「C++クラス入門」2013年5月7日閲覧。
  11. ^ Neuberg, Matt (2011年5月26日). 「第4.3章 ヘッダーファイルと実装ファイル」. Programming iOS 4. O'Reilly Media, Inc. ISBN 978-1-4493-8843-0
  12. ^ 「C++クラス入門」2013年5月7日閲覧。
  13. ^ Neuberg, Matt (2011年5月26日). 「第4.3章 ヘッダーファイルと実装ファイル」. Programming iOS 4. O'Reilly Media, Inc. ISBN 978-1-4493-8843-0
  14. ^ 「C++クラス入門」2013年5月7日閲覧。
  15. ^ Neuberg, Matt (2011年5月26日). 「第4.3章 ヘッダーファイルと実装ファイル」. Programming iOS 4. O'Reilly Media, Inc. ISBN 978-1-4493-8843-0
  16. ^ 「C++クラス入門」2013年5月7日閲覧。
  17. ^ Neuberg, Matt (2011年5月26日). 「第4.3章 ヘッダーファイルと実装ファイル」. Programming iOS 4. O'Reilly Media, Inc. ISBN 978-1-4493-8843-0