オブジェクト指向プログラミング
要点と定義
オブジェクト指向では、対象の特徴や必要な操作を取り出して抽象化し、データと操作をまとめて扱います。クラスはオブジェクトを作るための設計図で、オブジェクトはクラスに基づく個々の実体です。カプセル化は、データとそれを扱う操作をひとまとまりにし、内部の状態を適切な方法で管理する考え方です。継承は、既存クラスの性質を引き継いで新しいクラスを定義する仕組みです。これらはオブジェクト指向の基本概念として問われます。
Javaの例では、電気料金プランを表すクラスが、名前や基本料金、料金計算用のテーブルを保持します。料金テーブルを別クラスに分けると、料金の段階計算とプラン全体の計算を分けて記述できます。抽象クラスは共通のデータや処理の枠組みを示し、抽象メソッドの具体的な処理は継承先のクラスが実装します。抽象メソッドを持つクラスはabstractとして宣言し、抽象クラス自体はそのままインスタンス化しません。
継承先で上位クラスと同じ名前・引数のメソッドを再定義することをオーバーライドといいます。上位クラスの同じメソッドの処理を利用するには、Javaではsuperを使います。thisは現在のオブジェクトを指すため、同じ名前のメソッド内でthisを使うと、自分自身のメソッドを呼び出す形になり、意図せず再帰することがあります。
メソッドの引数や戻り値を通して、処理に必要な値を渡し、結果を受け取ります。たとえば料金計算では、使用量を引数にして料金を求め、基本料金との合計を戻り値にします。段階料金なら、各段階の開始値と単価を組にして保持し、使用量が次の段階の開始値を超える間は段階ごとの使用量に単価を掛けて足します。543kWhなら、120kWhまで、120から300kWhまで、300kWh超過分に分けて計算します。
集計処理では、処理対象の順序と、集計値を更新するタイミングが重要です。年月ごとに売上をまとめるなら、年月順に並べ、年月が変わる時点で直前の月の集計を確定して書き出します。支店別金額には伝票金額を加算し、月の書出し時には支店別金額を順に合計します。四半期合計は月単位のレコードが完成した時点で加え、四半期末の月に表示します。これは、ループ、条件分岐、累積値の初期化と更新の位置を読み取る例です。
文字列探索でも、候補を順に調べるループと、判定関数の呼出しが使われます。回文判定では英字の大小をそろえ、記号などを読み飛ばして、両端から文字を比べます。探索範囲を変えた関数では、候補の長さや開始位置、範囲の端を正しく引き継ぐ必要があります。呼出し回数を数えるときは、候補にならない文字での探索も含め、終了条件や途中終了のreturnまで追います。
適用条件と例
段階料金を計算する例として、開始値が0、120、300、単価が19.62、26.10、30.12のとき、使用量543kWhの料金は、120×19.62+180×26.10+243×30.12です。各段階の上限までの使用量を一度だけ計上し、最後の段階では実際の使用量から開始値を引きます。使用量がちょうど120kWhなら、次の段階の単価を適用する部分はありません。階層表の各組が「開始値、単価」の順に並ぶことも、計算式を読む前提です。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む