【Java入門(2)オブジェクト指向:基本編 #3】クラスの定義

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は

Java入門2 オブジェクト指向:基本編 #3
クラスの定義

というテーマでお送りします。

彩香
前回は、オブジェクト指向の考え方について理解できました。

今回の クラスの定義もガッツリ理解できるよう頑張ります。

よろしくお願いします。

剛留
考え方から、実際のプログラミングに入るんですね。

気合が入ってきました。頑張ります。

【Youtube版】

Youtubeでもお伝えしていますので
是非チェックしてくださいね。

【1】クラス

前回、オブジェクト指向は 現実世界の
オブジェクトを中心に 組み立てて行くこと とお話しました。

そのオブジェクト(人・物・概念)を
Javaの仮想世界の中で 表現する時には…

まず、設計図にあたる クラス を作成します。

そして、そのクラスを 実体化(オブジェクト化)して
プログラムで 動かしていく事になるのです。

設計図にあたる クラスを作っておく利点は…

・1つのクラスから実体を複数作成できる。
・必要な時に、必要なだけ実体を作成できる。
・派生した似たようなクラスを作りやすい。

…といった事が 挙げられます。

設計図に当たるクラスを作成する時に必要なのは
『 属性 』と『 振舞い(操作) 』を考えていくことです。

前回もお話しましたが

【属性】は「データ」
【振舞い(操作)】は「処理」

と言えます。

例を 見ていきましょう。

営業部員 を表すクラスを考えます。

クラスを考える時には、『属性』の「項目」を定義します。

ここでは、名前 と 売上合計金額 を 属性の項目とします。

また『 振舞い(操作)』を定義します。

ここでは、売上げる、返品を受ける、情報を表示する、
この3つの振舞いを持つとしましょう。

この クラス から 実体(オブジェクト) を作成します。

例えば、名前が速水剛留・
売上合計金額が100万円というオブジェクトと

名前が河合彩香・売上合計が50万円という
オブジェクトを作成すると…

それぞれが、売上げたり、返品を受けたり、
情報を表示したりする実体として動くこととなるのです…。

彩香
実体(オブジェクト)は 確かに
仮想世界 に生み出された感じになりますね。
剛留
クラスを作っておくと、この場合は
営業部員のオブジェクトが いくつでも作れますね。

管理したい人数分、作れますね。

今回は、Javaで この「クラス」を定義する部分を
学んでいきます。

【2】クラスの構成要素

クラスの構成要素について見ていきましょう。

オブジェクト指向の考えの設計図の部分は
Javaでは、クラスで表現します。

そして、属性にあたる部分ですが
Javaでは「フィールド」と呼ばれるもので表現します。

また、振舞い(操作)ですが
こちらは「メソッド」で表現します。

Javaソースファイル中の 配置を見てみましょう。

1つの Javaソースファイルの中に
クラスを 1つ 記述します。

その中に 複数のフィールドをまとめて記述します。

そして、その下に複数のメソッドをまとめて記述します。

また、このフィールドとメソッドを クラスの「メンバ」といいます。

ここでは、この フィールド・メソッド を このように
クラスの中に配置することを押さえておきましょう。

【3】フィールド

Javaで フィールド は 変数 で表します。

ですので、このように データ型 変数名のセットで
表すこととなります。

フィールドの表しかた
データ型   変数名;

今までの学習では、メインメソッドや
その他のメソッドの中で変数を宣言していました。

フィールドの場合には、クラスの中でメソッドを書く前に
クラスの直下に記述します。

メソッド内で 宣言した変数は、そのメソッド内で
使用できる ローカル変数 になります。

public class SalesEmployee { // 営業部員クラス
    // フィールド
    String name; // 名前
    int salesAmt; // 売上合計金額

    // メソッド
    :
    :
}

この例では、営業部員を表すクラス
SalesEmployee を 宣言しています。

この クラスブロックの中で
メソッドを定義する前に

String型の name という変数と
int型の salesAmt という変数を宣言しています。

これが、フィールドの宣言方法です。

フィールドはメンバである変数ですので
『 メンバ変数 』と呼ばれる場合もあります。

このあたりも、割と使われますので
メンバという言葉と共に押さえておきましょうね。

また、フィールドのスコープは クラス内の全体です。

変数のスコープは、その変数の属するブロック内
という話をしてきました。

そして、フィールドは
クラスのブロックの直下にありますので…

このブロック=クラス全体が
スコープ(有効範囲)となります。

これは、クラス内のメソッドどこからでも
参照・代入ができるという事になります。

ここ、ポイントになりますので
押さえておきましょうね。

彩香
クラス全体がスコープだから
各メソッドから 参照・代入 できるのですね。
剛留
書く場所を 間違えないようにしないと…。

【4】メソッド

メソッドの定義方法は、以下の記事でお伝えしています。

併せて、参考にしてくださいね。

【Java入門(1)メソッド編 #1】概要・引数・戻り値

設計図となるクラスの中では、メソッドは
フィールドの後に、記述することとなります。

戻り値の型を書いてメソッド名

その後に丸括弧で囲んで、データ型 仮引数名のセットで
仮引数を 複数記述します。カンマ区切りです。

その後に、メソッドのブロックの中に
メソッド内のステートメントを記述していきます。

呼び出し側に戻るときいは…

キーワード return を記述して
右側に戻り値を記述します。

ここで
Java入門1メソッド編 #1~5 で説明した時には…

戻り値の型の前に static をつけていました。

しかし、今回の説明では static をつけていません。

この部分は、少し先で正確に説明していきますが…

今回は、設計図となるクラスの定義方法を
サクッと学ぶために、このように 理解しておきましょう。

「設計図」となるクラスのメソッド定義には
static をつけない。

今のところは、この認識でいきましょう。

また、設計図となるクラスでは
フィールドが定義されていて…

メソッドではこのフィールドを
使用することができます。

この例では、クラス SalesEmployee の
フィールドの宣言の後に

メソッドを定義しています。

売上げ処理という『振舞い(操作)』を
表すメソッドです。

int型の仮引数 amt は売上金額です。

メソッド内では、フィールド salesAmt に
売上金額 を足し込んでいます。

そして、その結果の 処理後の売上合計金額を
戻り値として return しています。

彩香
こうして見ると、フィールド・メソッドが
密接に絡んでいる事が分かりますね。

オブジェクトとして一体化しているんですね。

剛留
ん~、メソッドの復習をしておかないと…。

演習問題を解き直してみようっと…。

【5】クラス図

オブジェクト指向で プログラムを作る時に
用いられる図に 「 クラス図 」 があります。

クラス図では、クラスの「属性」と「振舞い(操作)」
を表すほかに、クラス同士の関係性も表します。

これは、UMLという標準化された図の表し方の1つなので
ここで見ておきましょう。

クラスはこのように 四角形で囲んで表し、
クラス名・フィールド・メソッドを線で区切って表現します。

3分割された上の枠ががクラス名です。

真ん中の枠がフィールド記載部分です。

そして、フィールドの表し方は

「フィールド名:データ型」となります。

…Javaの記法とは、少し違いますね。

下の枠がメソッド部分となります。

メソッドの書きの表し方は

「メソッド名(引数名:引数の型,…) : 戻り値の型」

となります。

こちらも、型の記法が Javaとは異なります。

このよう、プログラムを意識した識別子や型を
定義したクラス図を詳細クラス図といいます。

これに対して、システム化の分析を行う時に
用いられる 概念クラス図 もあります。

概念クラス図は、クラスの概念を日本語で
表現したものです。

このようにクラス図を書くと
クラスを視覚的に 認識しやすくなりますので…

この部分も押さえておきましょうね。

彩香
クラスのなかに
フィールドとメソッドを書いていくこと理解しました。

いよいよ次は、このクラスを使って
動かして行くんですね。楽しみです…。

剛留
クラスの中での記述位置や、スコープを
間違いないようにすれば 大丈夫そうです。

次回を 楽しみにしています。

【まとめ】

● クラスの定義

【1】クラス
・ オブジェクト指向プログラミングでは
  設計図にあたるクラスを作成する。

・ クラスを作成する時には
  「属性」と「振舞い(操作)」
  を考える。

【2】クラスの構成要素
・ 属性はフィールドで表現する。

・ 振舞い(操作)は
  メソッドで表現する。

・ フィールドとメソッドを
  クラスの「メンバ」と言う。

【3】フィールド
・ フィールドは変数で表す。

・ クラスの中で
  クラスの直下に記述する。

・ フィールドの スコープ は
  クラス全体。

・「メンバ変数」とも呼ばれる。

【4】メソッド
・ 「設計図」となるクラスの
  メソッド定義には
  static をつけない。

・ フィールド を メソッド で
  使用することができる。

【5】クラス図
・ UMLという標準化された
  図の表し方の1つ。

・ クラスの「属性」
 「振舞い(操作)」の他に
  クラス同士の関係性も表す。