クラスの基礎(2): メソッド

前回のまとめ

  • パッケージ(教科書P.164〜)
    • クラスをひとまとめにしたもの
    • パッケージが違えば名前のクラスでも同時に存在できる
  • クラスの基礎(教科書P.66〜)
    • 「フィールド」と「メソッド」で構成され(それ以外のものは無い)、それらを「メンバー」という。
    • クラスは「設計図」。そのままでは使えない。「実体(インスタンス)」を作る必要がある(「クラスは設計図」という比喩だけでは説明できない機能があることに注意)。 
    • 教科書ではインスタンスではなく「オブジェクト」という言葉を使っているが、「オブジェクト」は文脈によって意味が違ったりするので、本講義では「インスタンス」という言葉を使う。
    • インスタンス化(インスタンスを作ること)にはnew演算子を使う。

準備

  • パッケージ「d00000.lecture05」を作成する。
  • 前回作ったMedicalRecord.javaを右クリックしてコピーする。
  • 今回作ったパッケージを右クリックして、貼付け→リファクタリング コピー→リファクタリングを選択する(パッケージ宣言を変更してコピーが行われる)。
  • 今回作ったパッケージにMainクラスを作成し、さらにmainメソッドを作成する。

メソッド

MedicalRecordクラスにメソッドを追加しよう。

注: クラスやフィールドにアクセス修飾子の「public」が追加されている。解説は次回。

  • メソッドの定義
    • アクセス修飾子(public、private、protected、無し)
    • 戻り値(返り値)の型(戻り値がない場合はvoid)
    • メソッド名
    • 引数(型と引数名のペア)が0個以上
    • 本体
      • return文(本体の実行を終了し呼び出し元に値を返す)
  • メソッドが所属するクラスのフィールドにアクセス(読み・書き)できる。
  • メソッドが所属するクラスのメソッドを呼び出すことができる。
  • 他のインスタンスのメソッドを呼び出すときは次のよう記述する。
    インスタンス名.メソッド名(引数)

パッケージ(1)、クラスの基礎(1): フィールド

前回のまとめ

  • 配列を作成するにはnew演算子を使い、次のように書く。
    double[] weight = new double[3];
    あとはC言語と大体同じ。
  • 配列の宣言と同時に初期化も行う場合は次のように書く。
    double[] height = {181.2, 167.5, 175.0};
  • メソッドはC言語の関数と大体同じ。
    • 戻り値(返り値)の型
    • メソッド名
    • 引数(引数の型と引数名)
    • return文

パッケージ

  • プログラミングでは、名前をつける作業が沢山ある。クラス名、フィールド名、メソッド名、インスタンス名(変数名)、等々。これらの名前を適切につけることはわかりやすいプログラムを書くことにおいて非常に重要。
  • 名前がかぶると困る。
  • 名前空間(Namespace)
  • Java言語における名前空間の仕組み: パッケージ
  • パッケージ名はユニーク(一意)なものをつける。ドメイン名を逆から記述するのが慣例。
  • 今回は「ユーザ名.lesson04」

NetBeansでパッケージを作る

ソースパッケージを右クリックして新規、Javaパッケージを選択する。

package1.png

パッケージ名を入力。場所がソースパッケージになっていることを確認する。

package2.png

ソース・パッケージの下にできていることを確認する。

package3.png

パッケージに対応してフォルダ(ディレクトリ)ができていることを確認する。

package4.png

クラスとは

  • データと処理をまとめたもの(教科書)
  • 構造体に関数がついたもの(C言語がきちんとわかっている人向けの説明)
  • 型の定義
  • etc..

クラスはフィールドとメソッドで構成される。例えば、下図は、フィールド2つ、メソッド2つを持つクラスを表す。

class.png

クラスの基礎(1): フィールド

カルテ(medical record)を表すクラスを作ろう。今回は、先ほど作ったパッケージに所属させる。パッケージを右クリックして作成する。パッケージが指定されていることを確認する。

medicalrecordclass.png

MedicalRecord.java

ポイント:

  • パッケージ宣言(1行目)
  • フィールドが3つだけのクラス

前回のプログラムでは、体重と身長を別の変数(配列)で管理していたが、同じ人のデータを1つのクラスで表すことができるようになる!

実際に、これを使ってBMIを計算するプログラムを作る。mainメソッドを持つMainクラスを作成しよう。先ほどと同様にパッケージに所属させる。

Main.java

ポイント:

  • パッケージ宣言(1行目)
  • クラスを実際に使う(インスタンスを作る)には、new演算子を使う。
    MedicalRecord mr1 = new MedicalRecord();
  • フィールドにアクセスするには「インスタンス名.フィールド名」とする。
    mr1.name = "たろう";
  • 配列の作成も同様。
    MedicalRecord[] mrArray = new MedicalRecord[3];
    ただし、これは、MedicalRecordが3つ入る配列を作る、というだけなので、それぞれの要素がインスタンス化されているわけではないことに注意!

オブジェクト指向プログラミング的ではないJavaプログラム

前回のまとめ

  • 数値を表す変数の型はC言語と大体同じ。
  • 整数はintを、実数はdoubleを使っておけば大抵は問題ない。
  • boolean型:
    • 真偽を表し、取りうる値は「true」か「false」の2つだけ。
    • C言語にはない型。C言語では0を偽、それ以外を真として扱っている。
    • if文等で使う。
    • 「==」、「>」、「<」等は演算子でboolean型を返す。例えば
      boolean a = (1 == 2);
      のaはfalseになる。
  • 制御構文(if else、for、while等)はC言語と大体同じ。

オブジェクト指向プログラミング

オブジェクト指向プログラミング(object-oriented programming, OOP)というプログラミングにおける考え方がある。これは、プログラムの組み方をオブジェクト(モノ)を中心にしよう(そうすることによって効率よくプログラムを作成することができる)という考え方である。JavaはOOPに基づいてプログラミングするための機能をサポートしたオブジェクト指向プログラミング言語(object-oriented programming language, OOPL)である。

注意: (特に日本においては)オブジェクト指向プログラミングのことを単に「オブジェクト指向」という言葉で扱い「オブジェクト指向分析設計」、「オブジェクト指向モデリング」といったものまでひっくるめてしまっている場合がある。単に「オブジェクト指向」と書かれているときは何を指しているか注意して読むこと。

ここでは(次回のOOPの解説の前提として)OOP的ではないプログラムとして、BMIを計算するプログラムを作成する。

  • ソースコード: BodyMassIndex.java
  • ポイント:
    • Javaにおける配列の使い方(C言語との違い)
    • メソッド(C言語における関数)
    • 「static」について