オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也
クラスとインスタンス クラスはモノの概念,種類. インスタンスは個々のモノ,個体. public class Main { インスタンスの生成×2 public class Main { public static void main(String[] args) { List l = new List(); l.add(11); l.add(22); List l2 = new List(); l2.add(33); l2.add(44); int v1 = l.get(1); int v2 = l2.get(1); System.out.println("v1 = " + v1); System.out.println("v2 = " + v2); } lとl2はListクラスの 別のインスタンスなので その内容も異なる
クラスとインスタンスの例(1/2) 人(Person)クラスを作成する. public class Person { String name; double height; double weight; double getBMI() { return weight / (height * height); }
クラスとインスタンスの例(2/2) main()メソッド内で Person クラスのインスタンスを2つ生成する. 1つのクラスに対してインスタンスはいくつでも作成できる. インスタンスの生成×2 public static void main(String[] args) { Person p1 = new Person(); p1.height = 1.7; p1.weight = 65; Person p2 = new Person(); p2.height = 1.6; p2.weight = 55; double bmi1 = p1.getBMI(); double bmi2 = p2.getBMI(); System.out.println(bmi1); System.out.println(bmi2); } p1とp2はPersonクラスの 別のインスタンスなので その内容も異なる
よりオブジェクト指向っぽく (セッタ,ゲッタの追加)(1/2) 一般にフィールドの値を設定するメソッドをセッタ,値を取得するメソッドをゲッタと呼ぶ. public class Person { String name; double height; double weight; void setHeight(double h) { height = h; } double getHeight() { return height; double getBMI() { return weight / (height * height);
よりオブジェクト指向っぽく (セッタ,ゲッタの追加)(2/2) main()メソッドも以下のように書き換える. public static void main(String[] args) { Person p1 = new Person(); p1.setHeight(1.7); p1.setWeight(65); Person p2 = new Person(); p2.setHeight(1.6); p2.setWeight(55); double bmi1 = p1.getBMI(); double bmi2 = p2.getBMI(); System.out.println(bmi1); System.out.println(bmi2); }
クラスとインスタンスの他の例(1/2) ウィンドウを表す Jframe クラス(標準クラス)を使ってみよう. public static void main(String[] args) { JFrame f1 = new JFrame(); f1.setTitle("f1の方です。"); f1.setVisible(true); JFrame f2 = new JFrame(); f2.setTitle("f2の方です。"); f2.setVisible(true); } JFrame: ウィンドウを表すJavaの標準クラス Jframe.setTitle(Stinrg s): ウィンドウのタイトルを s に設定する Jframe.setVisible(boolean b):ウィンドウの表示/非表示状態を切り替える
クラスとインスタンスの他の例(2/2) いろんなメソッドを呼び出して(メッセージを送って)みよう. public static void main(String[] args) { JFrame f1 = new JFrame(); f1.setTitle("f1の方です。"); f1.setSize(100, 500); f1.setLocation(100, 100); f1.setVisible(true); JFrame f2 = new JFrame(); f2.setTitle("f2の方です。"); f2.setSize(500, 100); f2.setLocation(300, 100); f2.setVisible(true); }
Eclipseのコード補完機能 プログラムを途中まで打ち込んだときに,次の候補を提示してくれる機能. public static void main(String[] args) { JFrame f1 = new JFrame(); f1.setTitle("f1の方です。"); f1.setSize(100, 500); f1.setVisible(true); JFrame f2 = new JFrame(); f2.setTitle("f2の方です。"); f2.setSize(500, 100); f2.setVisible(true); }
戻り値の受け方 メソッドを呼び出すと戻り値(メッセージの返信)を返してくれる場合がある. public static void main(String[] args) { JFrame f1 = new JFrame(); f1.setTitle("f1の方です。"); f1.setSize(100, 500); f1.setVisible(true); JFrame f2 = new JFrame(); f2.setTitle("f2の方です。"); f2.setSize(500, 100); f2.setVisible(true); int x = f2.getWidth(); int y = f2.getHeight(); System.out.println("f2の横幅は" + x +"です。"); System.out.println("f2の高さは" + y +"です。"); } 受け取った 戻り値を 変数に 代入する
より複雑な例 ボタンを作成して追加してみよう. public static void main(String[] args) { JFrame f1 = new JFrame(); f1.setTitle("ウィンドウテスト"); f1.setSize(100, 500); f1.setLocation(100, 100); JButton b = new JButton(); b.setText("PUSH!!"); f1.add(b); f1.setVisible(true); : } ボタンbの作成 ボタン b を ウィンドウ f に追加
コンストラクタ(1/2) インスタンスを作成する際に初期化のために呼ばれるメソッドの一種. メソッド名をクラス名と同じにする.戻り値はなし. public class Person { String name; double height; double weight; Person(double h, double w) { height = h; weight = w; } :
コンストラクタ(2/2) 呼び出し側では,インスタンスを生成するときに引数を渡せるようになる. public static void main(String[] args) { Person p1 = new Person(1.7, 65); Person p2 = new Person(1.6, 55); double bmi1 = p1.getBMI(); double bmi2 = p2.getBMI(); System.out.println(bmi1); System.out.println(bmi2); }
課題提出 課題提出先: http://bit.ly/2A8hCSy 講義時間内に提出すること. 提出後に訂正はできないが,講義時間内なら再提出可能. 学籍番号は半角の数字で.