クラス名を名詞にする、Javaプログラミングで、わかりやすいクラス名の付け方

Javaプログラミングで、わかりやすいクラス名を付ける方法が、よくわかりません…。

Javaプログラミングのクラス名は、名詞にします。

クラス名を名詞にすると、クラスの役割を「分類している感じ」がして、わかりやすいです。

クラス名を名詞にする、Javaプログラミングで、わかりやすいクラス名の付け方

Javaプログラミングでクラス名を名詞にすると、クラスの役割を「分類している感じ」がします。

よって、わかりやすいと思います。

例えばMIDIシーケンスを作成する、というクラス名について、

「作成する・Make」を、「作る人・Maker」という名詞(役割名)にして、クラス名を付けます。

名詞にしたクラス名の例。

MidiSequenceMakerクラス。
「MIDIシーケンスを作る人」を表すクラス名です。

英語の一文になる、クラスのメソッド名を動詞にすること

クラス名を名詞にした場合、クラスのメソッド名を動詞にすると、クラス名とメソッド名が一つの文のように「まとまった感じ」になります。

次のようなメソッド名の場合、

saveMidiFile( … )メソッド。
「MIDIファイルを保存する」メソッド。

「クラス名とメソッド名の繋がり」は、次のようになります。

MidiSequenceMaker . saveMidiFile( … )
「MIDIシーケンスを作る人」が、「MIDIファイルを保存する」。

名詞(主語)+ 動詞(述語)となり、一つの「文のような感じ」がします。

少し強引な意見かもしれませんが、「英語の一文のような感じ」となります。

※この見出しの記事は、2003年6月当時の記事になります。

Javaプログラミングのクラス
Javaプログラミングのクラス・イメージ画像

クラス名がわかりやすい場合、クラス名にパッケージ名を含める必要なし

もしも、クラス名にパッケージ名を含めなくても、クラス名が表す意味がわかりやすい場合は、クラス名にパッケージ名を含めない方が良い、と思います。

クラス名にパッケージ名を含めると、クラス名自身がパッケージ名の情報を持つことになります。

ですがそのように、クラス名自身がパッケージ名の情報を持つことについて、利点がある場合はそれほど多くない、と思います。

それほど意味はなく、単にクラス名が長くなっただけという場合が多い、と思います。

掲示板プログラムのログイン処理をするクラス名の付け方

例として、
掲示板プログラムのログイン処理をするクラス名について、クラス名の付け方を考えます。

  • 「パッケージ名」で、「掲示板という情報」を示します。
  • 「クラス名」で、「ログイン処理という情報」を示します。

次の2通りのクラス名を考えます。

クラス名の付け方の種類ログイン処理をするクラス名(パッケージ名付き)ログイン処理をするクラス名の説明
クラス名その1board . LoginAction「掲示板」の「ログイン処理」
クラス名その2board . BoardLoginAction「掲示板」の「掲示板ログイン処理」
掲示板プログラムのログイン処理をするクラス名

通常は(クラス名その1)の「掲示板」の「ログイン処理」で、わかりやすいと思います。

(クラス名その2)のように、「掲示板」の「掲示板 … 」という風に、繰り返す必要は少ない、と思います。

よってログイン処理のクラス名に、掲示板というパッケージ名を示す単語Boardを含めず、LoginActionだけで良いと思います。

もしもソースコードにおいて、ログイン処理だけでなくて、
「掲示板のログイン処理」という風に、掲示板を強調した書き方をしたい場合は、
パッケージ名とクラス名の両方を書けば良いです。

パッケージ名とクラス名を書く例。

board.LoginAction action = new board.LoginAction();

クラス名にパッケージ名を含めている例

もちろんプログラマーの方が、クラス名にパッケージ名を含めた方が「わかりやすい」と判断した場合は、
クラス名にパッケージ名を含めても良い、と思います。

以下、クラス名(HttpServletRequest)に、パッケージ名(servletとhttp)を含めている例です。

クラス名(パッケージ名付き)クラス名の説明
javax . servlet . http . HttpServletRequest「サーブレット」の「http」の「Httpサーブレットリクエスト」
パッケージ名(servletとhttp)を含めているクラス名

※この見出しの記事は、2004年7月当時の記事になります。

役割名とスーパークラス名、Javaプログラミングで、わかりやすいサブクラス名の付け方

Javaプログラミングにおける、わかりやすいサブクラス名の付け方についてです。

サブクラス名の付け方として、

サブクラスの役割名 + スーパークラス名にすると、わかりやすいと思います。

サブクラス名の付け方の例

例として、サブクラス名PostActionの名付け方について、お話したいと思います。

public class PostAction extends Action {
    ....
}

この場合、スーパークラス名はActionです。

このActionという名称は、ユーザのマウス操作などに対する処理を行う、ということを示します。
例えば、java.awt.event.ActionListenerのActionと似ている、と思います。

サブクラスの役割名は、Postです。

Postは、投稿(メッセージ投稿)という役割を示します。

以上から、

サブクラス名を、サブクラスの役割名(Post) + スーパークラス名(Action)とします。

このように名付けることで、
PostActionサブクラスは、投稿に関係するマウス操作の処理を行う、ということを示します。

参考:ここではPostという単語が、掲示板に「メッセージを投稿する事」を示す、と考えました。

※この見出しの記事は、2003年6月当時の記事になります。

ソースコードの品質や効率性を向上させる、わかりやすいクラス名

Javaプログラミングにおいて、わかりやすいクラス名を付ける際、以下の点が重要です。

  • クラス名は、簡潔かつ具体的な名詞であること。
  • クラス名では、キャメルケースを使うこと。
  • クラス名が長すぎないこと。

これらの点を意識してクラス名を付けることで、ソースコードの品質や効率性を向上させることができます。

簡潔で具体的な名詞のクラス名

クラス名は、そのクラスが表すものや処理することを、簡潔かつ具体的に表すと良いです。

例えば以下のように、名詞でクラス名を付けると良いです。

  • 銀行口座を表すクラスなら、BankAccountと名付ける。
  • 動物を表すクラスなら、Animalと名付ける。

キャメルケースで名付けたクラス名

複数の単語を組み合わせてクラス名を付ける場合は、
キャメルケース(※)を使うと、読みやすくなります。

※各単語の先頭を大文字で始めること。

例えば、以下のように名付けます。

  • 学生を表すクラスなら、Studentと名付ける。
  • 学生管理システムを表すクラスなら、StudentManagementSystemと名付ける。

Java言語で用いられる、キャメルケースとローワーキャメルケース

Java言語では、一般的に以下のように命名します。

  • 変数やメソッドについては、ローワーキャメルケースで命名する。
  • クラスやインターフェースについては、キャメルケースで命名する。

ローワーキャメルケースとは、キャメルケースの変形です。
最初の単語だけ小文字で始める方法です。

例えば、「helloWorld」という名前は、
最初の単語が小文字で始まり、次の単語が大文字で始まっています。

キャメルケースとは、単語の区切りを大文字で示す方法です。

例えば、「HelloWorld」という名前は、
HelloとWorldという二つの単語が大文字で始まっています。

Javaプログラミングにおいてキャメルケースで命名することは、コードの可読性や一貫性を高めるための慣習と言えます。

15文字以内のクラス名

クラス名については、あまり長くなりすぎないように注意する必要があります。

長すぎるクラス名は、読みにくいです。
そのため、ソースコードの可読性や保守性を低下させる可能性があります。

一般的には、クラス名は15文字以内に収めると良い、とされています。

なお個人的には、クラス名を15文字以内で名付けられるかと言われたら、できない場合もありそうです。

日本語でクラス名を考えて、それを英語に自動翻訳したら、長い英文になったりします。
文字数のある長い英文を15文字以内にまとめるのは、なかなか難しいです。

もしもクラス名が長くなりそうな場合は、そのクラスが担う役割が多すぎないかどうかを、見直してみましょう。

実際に役割が多すぎる場合は、そのクラスを分割することで、よりわかりやすく簡潔なクラス名を付けることができます。

【まとめ記事】へのリンク

【まとめ記事】Javaアプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を限定する書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス…