「D言語/オブジェクト指向」の版間の差分

削除された内容 追加された内容
M added Category:D言語 using HotCat
Ef3 (トーク | 投稿記録)
→‎C++とDとのオブジェクト指向の差異: D言語とC++は両方ともオブジェクト指向言語ですが、いくつかの重要な差異があります。
タグ: 2017年版ソースエディター
1 行
D言語は、C++やJavaといったオブジェクト指向言語と同様に、オブジェクト指向プログラミングをサポートしています。オブジェクト指向プログラミングは、プログラムの構造をオブジェクト(実体)として定義し、オブジェクト同士の相互作用によってプログラムを構築する方法です。
クラスは複数の変数を一まとめにし、それらを扱う関数も内包することで、簡潔で他のプログラムに依存しない独立した処理を可能とします。また、クラスは雛形(ひながた)であり、同じ性質を持ったデータ(オブジェクト)を多数作る事ができます。
この章では、D言語におけるオブジェクト指向プログラミングについて、基本的な概念から具体的な実装方法までを解説します。具体的には、クラスやオブジェクトの定義方法、継承やポリモーフィズムといったオブジェクト指向の重要な概念について説明します。また、D言語のオブジェクト指向プログラミングにおける特徴や、他のオブジェクト指向言語との比較についても触れます。
この章を読むことで、D言語におけるオブジェクト指向プログラミングの基礎を身につけ、より効率的で柔軟性の高いプログラムを作成することができるようになるでしょう。
 
=== クラス ===
クラスは複数の変数を一まとめにし、それらを扱う関数も内包することで、簡潔で他のプログラムに依存しない独立した処理を可能とします。また、クラスは雛形(ひながた)であり、同じ性質を持ったデータ(オブジェクト)を多数作ることができます。
 
==== 実体化 ====
12 ⟶ 17行目:
 
==== メンバ変数 ====
classクラスの中に定義された変数の事を特にメンバ変数と言います。
オブジェクトの持つデータそのもので、これを扱いやすくするための仕組みが以下のようになります。
 
==== メンバ関数(メソッド) ====
classクラスの中に定義された関数を特にメンバ関数、メソッドと言います。
メンバ変数に対する決まりきった処理を他のオブジェクトに依存すると、関わるオブジェクト数が増えるため複雑で読みにくく直しにくいコードになります。メンバ変数の処理はメンバ関数に任せましょう。
 
==== コンストラクタ ====
this() という名前を持つ特殊なメンバ関数です。クラスをオブジェクトとして実体化する際に、this() 関数の中で定義された初期化処理を実行します。引数なしの場合はメンバ変数のデフォルト値を与えるのに使います。初期化するだけなので、返り値はありません。
 
<syntaxhighlight lang="D">
92 ⟶ 97行目:
;備考
インターフェース内のメソッドにin-out契約を指定することもできる<ref>[https://dlang.org/spec/interface.html#interface-contracts Interfaces - D Programming Language] 2020年7月20日に閲覧して確認</ref>。
 
 
== C++とDとのオブジェクト指向の差異 ==
D言語とC++は両方ともオブジェクト指向言語ですが、いくつかの重要な差異があります。
 
# クラス定義のシンタックス:D言語では、クラス定義はstructキーワードまたはclassキーワードを使用して行われます。C++とは異なり、structは値型、classは参照型とです。
# プライベートなメンバー:C++では、privateキーワードを使用してクラスの非公開メンバーを定義します。D言語では、privateキーワードはクラス定義にも使用されますが、メンバー変数には、アクセス指定子が指定されていない場合にプライベートになります。
# コンストラクターとデストラクター:D言語では、クラスのコンストラクタとデストラクタはそれぞれthis()と~ this()という名前で定義されます。C++では、コンストラクタはクラス名と同じ名前で、デストラクタはクラス名の前に波線(~)を付けて定義します。
# 継承:D言語では、クラス継承には2つの異なるキーワードがあります。is-a関係を表す場合にはclassキーワードを使用し、has-a関係を表す場合にはinterfaceキーワードを使用します。class型はObjectを暗黙的に継承します。C++では、派生クラスの定義には、単一継承または多重継承を示すキーワードが使用されます。
# GC:D言語では、ガベージコレクションが標準でサポートされています。これにより、C++のようなメモリ管理が必要なくなります。C++では、手動でメモリを確保し、解放する必要があります。
# プロパティ:D言語では、プロパティと呼ばれる独自の機能を使用して、クラスのメンバー変数のアクセスを制御することができます。C++には、同様の機能がありません。
 
以上が、D言語とC++のオブジェクト指向の主な差異です。
 
[[カテゴリ:D言語]]