基本 Java プログラミング演習 第 13 回 担当 : 植村
今後の予定 7/15 第 13 回 今回 7/22 第 14 回 小テスト ( クラス ) 7/29 第 15 回 総まとめテスト レポート提出 期末テストの時間割に Java のテストの欄がありますが無視してください 再テストはまた別途連絡いたします 2
CHAPTER 11 はじめてのクラス前回の復習
クラスクラスを構成する要素 フィールド メソッド : クラスに属する変数 : クラスに属する処理 P172 class クラス名 { // フィールドの定義型変数名 ; // メソッドの定義メソッドの型メソッド名 ( 引数 ) { メソッドの記述 4
クラスクラスを構成する要素 フィールド メソッド : クラスに属する変数 : クラスに属する処理 P172 class Person { // フィールドの定義 String name; int age; // メソッドの定義 void showinfo(void){ System.out.println(name+ は +age+ 歳 ); 5
Sample.java インスタンスの作成 class Sample{ public static void main(string[] args){ Person p; p = new Person(); // インスタンスの作成 P174 p.name = アリス ; // フィールドとのやりとり p.age = 10; // フィールドとのやりとり p.showinfo(); // メソッドの呼出し 6
クラスとインスタンス クラスはオブジェクトの設計図 設計図をもとに個々のインスタンス ( オブジェクトそのもの ) を生成 パラメータの項目 振る舞いは同じだが中身のパラメータ値は各々で異なる 7
Sample2.java 複数のインスタンスの作成 class Sample2{ public static void main(string[] args){ Person p1 = new Person(); Person p2 = new Person(); P177 p1.name = アリス ; p1.age = 10; p2.name = ボブ ; p2.age = 12; p1.showinfo(); // インスタンス p1 のフィールドを表示 p2.showinfo(); // インスタンス p2 のフィールドを表示 8
オブジェクトをメソッドの引数として渡す class Sample3{ main メソッド P179 public static void main(string[] args){ Person p1 = new Person(); Person p2 = new Person(); p1.name = アリス ; p1.age = 10; p2.name = ボブ ; p2.age = 12; showpair(p1, p2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 9
オブジェクトをメソッドの引数として渡す //Sample3 クラスのメソッド static void showpair(person p1, Person p2){ System.out.println(p1.name+ と +p2.name) System.out.println( 合わせて +(p1.age+p2.age)+ 歳 ); //Sample3 クラスの閉じ括弧 P179 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ showpair メソッド 10
補足 1 つのファイルに複数のクラスを記述する Sample.java ファイル class Sample1 { Sample1のフィールド メソッド class Sample2 { Sample2のフィールド メソッド 11
CHAPTER 12 もう少しクラス
コンストラクタ インスタンスの作成時に呼び出すあれ Person p; p = new Person(); // インスタンスの作成 今まで省略していたが 本来は 初期動作 フィールドの初期値の設定を行う 13
コンストラクタ コンストラクタ : インスタンスの生成と同時に行われる初期設定 初期動作 class クラス名 { // フィールド // コンストラクタ // メソッド 14
コンストラクタ P191 class Person2{ String name; int age; クラスと同じ名前で作る Person2(){ System.out.println( コンストラクタ呼出 ); name = 名無しさん ; age = 10; void showinfo(){ System.out.println(name+ は +age+ 歳 ); 15
コンストラクタ class Person2Main{ public static void main(string[] args){ System.out.println( new の前 ); Person2 p = new Person2(); System.out.println( new の後 ); p.showinfo(); P191 new の前コンストラクタ呼出し new の後名無しさんは 10 歳 コンストラクタで書いた初動作部分 16
引数つきのコンストラクタ P191 class Person3{ String name; int age; Person3(String iname, int iage){ System.out.println( コンストラクタ呼出 ); name = iname; age = iage; void showinfo(){ System.out.println(name+ は +age+ 歳 ); 17
引数つきのコンストラクタ class Person2Main{ public static void main(string[] args){ System.out.println( new の前 ); Person3 p = new Person3( アリス, 10); System.out.println( new の後 ); p.showinfo(); P191 new の前コンストラクタ呼出し new の後アリスは 10 歳 18
オーバーロード同じ名前のコンストラクタ ( メソッド ) を複数定義しても OK ただし引数の数 種類を変えること 使う際に引数の数 種類から どのコンストラクタ ( メソッド ) を実行するか自動的に選択される class Person{ String name; int age; Person(){ name = 名無しさん ; age = 999; Person(String iname, int iage){ name = iname; age = iage; 19
CHAPTER 13 クラスの基本
カプセル化 ( 情報隠蔽 ) オブジェクトの振る舞い データを外部から隠す 利用の簡単化 不正操作防止 修正した際の影響を最小化 オブジェクト public メソッド 外部からはメソッドを通してのみデータ構造を操作可能 private データ構造 オブジェクト内部には直接アクセスできない その他のオブジェクト その他のオブジェクト 21
カプセル化 ( 情報隠蔽 ) 同一オブジェクト内からしか操作できない 全てのオブジェクトから操作可能 class Person3{ private String name; public String getname(){ return name; public void setname(string iname){ name = iname 22
ポリモーフィズム ( 多態性 ) 同一のメッセージでもオブジェクトごとに処理を変えること ができる仕組み 命令するオブジェクト 挨拶せよ 挨拶せよ 挨拶せよ Japan オフ シ ェクト USA オフ シ ェクト China オフ シ ェクト aisatsu メソッド aisatsu メソッド aisatsu メソッド 同じメソッド名にする 出力 こんにちは Hello 你好 23
本日の課題先ず P191, P193 の例を元にコンストラクタを理解する 前回の Person クラスに以下のコンストラクタを実装せよ (1) インスタンス生成時にフィールドの値の初期値を設定する ( 引数なしの ) コンストラクタを作成し使用しなさい (2) インスタンス生成時にフィールドの値を代入する 引数ありのコンストラクタを作成し使用しなさい (3) (1),(2) を同じクラス内に定義 ( オーバーロード ) し インスタンスの生成時にそれら 2 つを使い分けなさい 24
レポート課題 世の中にある何かをオブジェクト化した例えを考えてください フィールドとしてどういうものを持つか メソッドとしてどういう振る舞いをするのかの例えを挙げること ただし メソッドはフィールドを使って何かしらの動作をするメソッドも考えること PowerPoint スライド 1 ページ程度のもので結構です 15 回目のテスト時にテストと一緒に提出してください なお ファイル名は 1331999 植村匠.pptx のように学籍番号氏名にしてください 一括自動処理するのでファイル名で区別つかない場合はどうしようもありません 25