プログラミング 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


関連記事

SingletonパターンをJUnitでテストする

シングルトンパターンはインスタンスが1つであることを保証する設計です。 Junitを使って、本当に1つだけなのかを検証してみます。 またその手順をテスト駆動開発に従った手順(Red→Green→リファ …

【Spring】バリデーション時に、入力値を保持する方法

登録画面で「登録」ボタンを押した後、 バリデーションで引っ掛かってエラーになっても 入力内容を画面に保持して置く方法についてです。 テンプレートエンジンは、Tymeleafを使用しています。 方法とし …

【Java】LinkedHashSetの使い方(挿入順を保持するSet)

LinkedHashSetはHashSetのサブクラスであり、同じメソッドが実装されています。 メソッドの使い方であればHashSetと同じなので、HashSetの使い方を参照下さい。  ↓ 【Jav …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

no image

XSS対策の基本は入力値制限とサニタイジング(無害化)の2つ

XSS(クロスサイトスクリプティング)の基本的な対策は何をすればいいのかがぼんやりしている方向けの書いています。 対策方法はタイトルの通り、XSS(クロスサイトスクリプティング)対策の基本は入力値制限 …

記事を探す

SpringFramworkの良書

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

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