プログラミング Java

【Java】オブジェクト指向の練習題材(会計オブジェクト)

投稿日:

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。

ここでは3つのオブジェクトを作成していきます。
– 会計オブジェクト:会計金額の算出
– 請求書オブジェクト:請求明細の保持と合計金額の算出
– 請求明細オブジェクト:請求する内容の保持

 

目的

オブジェクト指向プログラミングの練習。
仕様理解、フィールド、コンストラクター、メソッドの実装に慣れる。

 

仕様

会計クラス

・クラス名:Account
・以下のフィールドを持つ。
 請求書クラス
・コンストラクターの引数は請求書クラスとする。
・以下のメソッドを持つ。
 請求書クラスの合計額から消費税を算出する。
 請求書クラスの合計に消費税を加算した、総請求額を算出する。。

請求書クラス

・クラス名:Invoice
・以下のフィールドを持つ。
 請求先名
 請求詳細クラスのリスト
・コンストラクターの引数は請求先名とする。
・以下のメソッドを持つ。
 請求先名の表示
 請求詳細の追加
 請求額の合計算出

請求詳細クラス

・クラス名:InvoiceDetail
・以下のフィールドを持つ。
 商品名
 請求額
 品数
・コンストラクターの引数は、商品名、請求額、品数とする。
・以下のメソッドを持つ。
 商品名を取得
 請求額を取得
 品数を取得

Mainクラス

・クラス名:Main
・請求書オブジェクトを生成する。
・請求書オブジェクトに請求詳細のオブジェクトをいくつか追加する。
・会計オブジェクトを生成する。
・合計額を算出する。

 

手順

会計クラスの実装(1)

・フィールドにInviceクラスを定義する。
 この時点でInvoiceクラスは無いため、空のInvoiceクラスを作成しておく。

・コンストラクターを実装します。

・メソッドを実装します。
– 消費税額の算出
– 総請求額の算出
 税率は10%の固定値にしています。
 まだInvoiceクラスから合計金額を取得できない(未実装の)ため、
 固定値「0」で仮実装しておきます。

会計クラスは一旦ここまでです。
先に請求書クラスと請求詳細クラスを実装してから、再度メソッドの中身を実装します。

 

請求書クラスの実装(1)

・フィールドを実装します。
 請求者名はStringとします。
 請求詳細クラスのListを定義します。
 請求詳細クラスはこの時点ではまだ、空のクラスとして作成しておきます。

・コンストラクターを実装します。
 請求詳細クラスのフィールドは、空のListで初期化しておきます。

・メソッドを実装します。
 請求先名はGetterです。
 請求詳細の追加は、Listのaddを使います。
 請求詳細の合計算出メソッドは、固定値「0」 で仮実装しておます。

請求書クラスは一旦ここまでとします。
請求明細クラスの実装を行い、請求明細からの値が取得できるようになったら残りを実装します。

 

請求詳細クラスの実装

・フィールドに、商品名、請求額、請求数を定義します。

・コンストラクターを実装します。

・メソッドを実装します。
 実装するのは、各フィールドのgetterです。
 私は個人的に、getHoge()という「get」が好きではないため、name()というメソッド名にします。
 そうすると、呼び出しの際、「invoiceDetail.name()」となり、
 「請求詳細の名称」のような自然言語に近い表現になると感じているためです。

請求詳細クラスはこれで完成です。

請求書クラスの実装(2)

・請求明細の合計算出メソッドを実装します。
 Listで実装してるので、拡張for文が使えます。

これで請求書クラスの実装は完了です。

 

会計クラスの実装(2)

– 消費税を算出
– 請求総額を算出
 仮実装で「0」としていた請求金額を、「invoice.totalAmount()」に修正します。

これで会計クラスの実装は完了です。

 

メインクラス

以下の順で実際に合計額が表示されるか見てみましょう。
・請求書オブジェクトを生成する。
・請求書オブジェクトに請求詳細のオブジェクトをいくつか追加する。
・会計オブジェクトを生成する。
・合計額を算出する。

 

まとめ

・仕様に基づき、複数のクラスを実装する経験をした。
・他のクラスが未実装の場合、仮の値を設定しておくこともある。
・フィールドは、各クラスに適切な値のみ持つ。
・コンストラクターは、オブジェクト生成(インスタンス化)に必要な値を与える。
・メソッドは、各オブジェクトに必要な機能を実装する。

 

サンプルコード

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

gradle

gradleタスクのビルド時にプロパティを引数に付与する方法

概要 gradleタスクのビルド時にプロパティを引数で付与するには、「-Pに続けてプロパティ名=値」で指定します。 <usage>

  …

どっち,比較

Javaに向いている人・向いていない人

プログラマ、エンジニアを目指している方の中で、どんな言語がいいのか? という悩みをもっている方に向けて、Javaに向いている人と向いていない人という観点でお話しします。 Javaができること Java …

junit, テスト, junit5

【Junit5】最小構成のテストクラス

概要 Junit5の最小構成のテストクラスはテストメソッドを1つだけもつクラスです。 テストメソッドが0個だとテストクラスとして認識されません。 環境 Java11 Junit5.7 Gradle7. …

【Spring+Thymeleaf】リクエストパラメーターをControllerで受け取る方法

概要 Spring+Thymeleafにおいて、リクエストパラメーターをControllerで受け取るパターンを紹介します。 リクエストパラメーターのパターンは以下の通りです。 ・単一(inputタグ …

Thymeleafで1000円単位をカンマ区切りで表示する方法

Thymeleaf(テンプレートエンジン)で金額などの数値を 1000円単位のカンマ区切りで表示する方法です。 ここでは、カンマ区切りの機能はオブジェクト側で実装し、 Tymeleaf(View)は表 …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。