• 検索結果がありません。

Java演習(9) -- クラスとメソッド --

N/A
N/A
Protected

Academic year: 2021

シェア "Java演習(9) -- クラスとメソッド --"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

Java

演習

(9)

クラスとメソッド

高橋 裕樹

(2)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

クラス

例題

次の

3 種類のブロックが壁に反射しながら水平方向に等速直線運動

するプログラムを作成せよ.

高さ

初期位置

(x,

y

)

x

方向の初速度

ブロック

1

30

10

(0, 50)

1

ブロック

2

10

10

(width - 10, 80)

-2

ブロック

3

50

10

(width / 2, 110)

2

ただし,width は,描画領域の幅である.

(3)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

水平方向に等速直線運動する

3 つのブロック (RectMove4-1.java)

importjavax.swing.JApplet; importjavax.swing.Timer; importjava.awt.Graphics; importjava.awt.Dimension; importjava.awt.event.*;

public class RectMove4 extends JApplet{ Dimension d;

intx1, y1, vx1, w1, h1;

intx2, y2, vx2, w2, h2; 10

intx3, y3, vx3, w3, h3; public voidpaint(Graphics g){

g.clearRect(0, 0, d.width, d.height); g.drawRect(x1, y1, w1, h1); g.drawRect(x2, y2, w2, h2); g.drawRect(x3, y3, w3, h3); }

(4)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

水平方向に等速直線運動する

3 つのブロック (RectMove4-2.java)

public voidinit(){ d= getSize();

w1= 30; h1 = 10; x1 = 0; y1 = 50; vx1 = 1;

w2= 10; h2 = 10; x2 = d.width − w2; y2 = 80; vx2 = −2; w3= 50; h3 = 10; x3 = d.width / 2; y3 = 110; vx3 = 2; new Timer(20, new ActionListener(){

public voidactionPerformed(ActionEvent e){ if(x1 < 0 | | x1 + w1 > d.width) vx1 *= −1; x1+= vx1; 10 if(x2 < 0 | | x2 + w2 > d.width) vx2 *= −1; x2+= vx2; if(x3 < 0 | | x3 + w3 > d.width) vx3 *= −1; x3+= vx3; repaint(); } }).start(); } } 20

(5)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

クラス

RectMove4.java の問題点

プログラムが煩雑

変数が多くなる

(x1, x2, x3, ...)

同じような処理の繰り返し

(

衝突判定,描画

)

クラス

(class) という概念の利用

オブジェクト

(object) ... 具体的な実体

ブロック

属性や状態

:

フィールド

(field)

ブロックの幅,高さ,位置,速度 操作

:

メソッド

(method)

ブロックの移動,描画 メンバ

:

フィールドとメソッドの総称

クラス

(class) ... オブジェクトの雛型

(6)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

クラス

RectMove4.java の問題点

プログラムが煩雑

変数が多くなる

(x1, x2, x3, ...)

同じような処理の繰り返し

(

衝突判定,描画

)

クラス

(class) という概念の利用

オブジェクト

(object) ... 具体的な実体

ブロック

属性や状態

:

フィールド

(field)

ブロックの幅,高さ,位置,速度 操作

:

メソッド

(method)

ブロックの移動,描画 メンバ

:

フィールドとメソッドの総称

クラス

(class) ... オブジェクトの雛型

(7)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

クラス

RectMove4.java の問題点

プログラムが煩雑

変数が多くなる

(x1, x2, x3, ...)

同じような処理の繰り返し

(

衝突判定,描画

)

クラス

(class) という概念の利用

オブジェクト

(object) ... 具体的な実体

ブロック

属性や状態

:

フィールド

(field)

ブロックの幅,高さ,位置,速度 操作

:

メソッド

(method)

ブロックの移動,描画 メンバ

:

フィールドとメソッドの総称

クラス

(class) ... オブジェクトの雛型

(8)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

クラス

RectMove4.java の問題点

プログラムが煩雑

変数が多くなる

(x1, x2, x3, ...)

同じような処理の繰り返し

(

衝突判定,描画

)

クラス

(class) という概念の利用

オブジェクト

(object) ... 具体的な実体

ブロック

属性や状態

:

フィールド

(field)

ブロックの幅,高さ,位置,速度 操作

:

メソッド

(method)

ブロックの移動,描画 メンバ

:

フィールドとメソッドの総称

クラス

(class) ... オブジェクトの雛型

(9)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

フィールドだけを持つクラス

例題

RectMove4.java をフィールドだけを持つクラスを用いて書き直せ.

(10)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

フィールドだけのクラス

(RectMove5-1.java)

importjavax.swing.JApplet; importjavax.swing.Timer; importjava.awt.Graphics; importjava.awt.Dimension; importjava.awt.event.*;

public class RectMove5 extends JApplet{ Dimension d;

classBlock{ 10

intx, y; // position

intwidth, height; // width, height intvx; // velocity

}

Block block1, block2, block3; public voidpaint(Graphics g){

g.clearRect(0, 0, d.width, d.height);

g.drawRect(block1.x, block1.y, block1.width, block1.height);

g.drawRect(block2.x, block2.y, block2.width, block2.height); 20

g.drawRect(block3.x, block3.y, block3.width, block3.height); }

(11)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

10-14 行目

Block クラスの定義

ブロックの位置

(x, y)

width

,高さ

height

水平方向の速度

vx

クラスの宣言

[クラス修飾子] Class クラス名 { ... }

クラス修飾子

public

他のパッケージからアクセス可,

public

がないとアク セス不可

abstract

抽象クラス.抽象クラスは抽象メソッドを持つクラス. 抽象メソッドとは,メソッドの本体を定義せず,メ ソッド名,引数とその型,戻り値型,メソッドが投げ る例外だけを宣言したもの.

final

継承禁止

(12)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

フィールドだけのクラス

(RectMove5-2.java)

public voidinit(){ d= getSize();

block1 = new Block(); block2 = new Block(); block3 = new Block(); block1.width = 30; block1.height = 10;

block1.x = 0; block1.y = 50; block1.vx = 1; block2.width = 10; block2.height = 10;

block2.x = d.width − block2.width; block2.y = 80; block2.vx = −2; block3.width = 50; block3.height = 10;

block3.x = d.width / 2; block3.y = 110; block3.vx = 2;

10

new Timer(20, new ActionListener(){

public voidactionPerformed(ActionEvent e){

if(block1.x < 0 | | block1.x + block1.width > d.width) block1.vx *= −1;

block1.x += block1.vx;

if(block2.x < 0 | | block2.x + block2.width > d.width) block2.vx *= −1;

block2.x += block2.vx;

if(block3.x < 0 | | block3.x + block3.width > d.width)

block3.vx *= −1; 20 block3.x += block3.vx; repaint(); } }).start(); } }

(13)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

15 行目 (RectMove5-1)

Block オブジェクトを参照するための変数の宣言

3 行目 (RectMove5-2)

Block オブジェクトの生成

オブジェクトの生成

new クラス名 ([引数])

クラス

... オブジェクトの性質を定義しているだけ

4 行目 (RectMove5-2)

オブジェクトのフィールドへ値を代入

メンバへのアクセス

オブジェクト. メンバ

メンバアクセス演算子: . (ピリオド)

(14)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

15 行目 (RectMove5-1)

Block オブジェクトを参照するための変数の宣言

3 行目 (RectMove5-2)

Block オブジェクトの生成

オブジェクトの生成

new クラス名 ([引数])

クラス

... オブジェクトの性質を定義しているだけ

4 行目 (RectMove5-2)

オブジェクトのフィールドへ値を代入

メンバへのアクセス

オブジェクト. メンバ

メンバアクセス演算子: . (ピリオド)

(15)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

15 行目 (RectMove5-1)

Block オブジェクトを参照するための変数の宣言

3 行目 (RectMove5-2)

Block オブジェクトの生成

オブジェクトの生成

new クラス名 ([引数])

クラス

... オブジェクトの性質を定義しているだけ

4 行目 (RectMove5-2)

オブジェクトのフィールドへ値を代入

メンバへのアクセス

オブジェクト. メンバ

メンバアクセス演算子: . (ピリオド)

(16)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

例題

RectMove5.java をメソッドも持つクラスを用いて書き直せ.

RectMove6(RectMove6-1.java)

importjavax.swing.JApplet; importjavax.swing.Timer; importjava.awt.Graphics; importjava.awt.Dimension; importjava.awt.event.*;

public class RectMove6 extends JApplet{ Dimension d;

(17)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

RectMove6(RectMove6-2.java)

classBlock{ intx, y; // position

intwidth, height; // width, height intvx; // velocity

Block(){ // constructor

x= y = width = height = vx = 0; }

Block(int px, int py, int pvx, int w, int h){ // constructor 10

x= px; y = py; width = w; height = h; vx = pvx; }

public voidmove(){

if(x < 0 | | x + width > d.width) vx *= −1; x+= vx;

}

public voiddraw(Graphics g){

g.drawRect(x, y, width, height); 20

} }

(18)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

RectMove6(RectMove6-3.java)

public voidinit(){ d= getSize();

block1 = new Block(0, 50, 1, 30, 10); block2 = new Block(d.width − 30, 80, −2, 10, 10); block3 = new Block(d.width / 2, 110, 2, 50, 10); new Timer(20, new ActionListener(){

public voidactionPerformed(ActionEvent e){ block1.move(); block2.move(); block3.move();

repaint(); 10

} }).start(); }

public voidpaint(Graphics g){ g.clearRect(0, 0, d.width, d.height);

block1.draw(g); block2.draw(g); block3.draw(g); }

(19)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

メソッド

メソッド

= 名前 + ブロック (処理のまとまり)

メソッド宣言

[メソッド修飾子] 返り値型 メソッド名 ([型 仮引数,

. . .]){

ブロック

}

メソッド呼び出し

メソッド名

([式,

. . .])

引数

メソッドに受け渡す値のリスト

戻り値

メソッドが返す値

return [式];

(20)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

メソッド

メソッド

= 名前 + ブロック (処理のまとまり)

メソッド宣言

[メソッド修飾子] 返り値型 メソッド名 ([型 仮引数,

. . .]){

ブロック

}

メソッド呼び出し

メソッド名

([式,

. . .])

引数

メソッドに受け渡す値のリスト

戻り値

メソッドが返す値

return [式];

(21)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

メソッド

メソッド

= 名前 + ブロック (処理のまとまり)

メソッド宣言

[メソッド修飾子] 返り値型 メソッド名 ([型 仮引数,

. . .]){

ブロック

}

メソッド呼び出し

メソッド名

([式,

. . .])

引数

メソッドに受け渡す値のリスト

戻り値

メソッドが返す値

return [式];

(22)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

メソッド

メソッド

= 名前 + ブロック (処理のまとまり)

メソッド宣言

[メソッド修飾子] 返り値型 メソッド名 ([型 仮引数,

. . .]){

ブロック

}

メソッド呼び出し

メソッド名

([式,

. . .])

引数

メソッドに受け渡す値のリスト

戻り値

メソッドが返す値

return [式];

(23)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

メソッド

メソッド

= 名前 + ブロック (処理のまとまり)

メソッド宣言

[メソッド修飾子] 返り値型 メソッド名 ([型 仮引数,

. . .]){

ブロック

}

メソッド呼び出し

メソッド名

([式,

. . .])

引数

メソッドに受け渡す値のリスト

戻り値

メソッドが返す値

return [式];

(24)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

メソッド

コンストラクタ

オブジェクトを初期化する特別なメソッド

クラス名と同じ名前

引数は受け取れる

戻り値は返せない

オーバーロード

引数の個数

戻り値型

が異る,同じ名前のメソッドの宣言が可能

(25)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

RectMove6-2.java

Block クラスの宣言

フィールド: x, y, width, height, vx

コンストラクタ: Block(), Block(int, int, int, int, int)

メソッド: move(), draw(Graphics)

6-8 行目 (RectMove6-2.java)

引数を取らないコンストラクタ

フィールドの初期値は全て

0

10-12 行目 (RectMove6-2.java)

5 つの引数を取るコンストラクタ

引数の値でフィールドを初期化

(26)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

14-17 行目 (RectMove6-2.java)

壁との衝突判定

単位時間あたりのボールの移動

フィールドの値

(x, width, vx) を直接参照

19-21 行目 (RectMove6-2.java)

矩形の描画

(27)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

3-5 行目 (RectMove6-3.java)

コンストラクタによるオブジェクトの生成と初期化

9 行目 (RectMove6-3.java)

3 つのブロックオブジェクト (block1, block2, block3) に対して,

move() メソッドの呼び出し

block1.move() ⇒ block1 を単位時間分移動

17 行目 (RectMove6-3.java)

(28)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

課題

課題

RectMove6.java の Block クラスに setBlockColor メソッドを追加

し,ブロックに色を付けよ.

(public void setBlockColor(int r, int g, int b))

(RectMove7.java)

ヒント:

色を保持する

Color 型のフィールドを作成.setBlockColor で

は,自分のブロックの色を作成する.実際の色指定は,描画メソッド

draw で行う.

(29)

Java 演習 (9) – クラスとメソッ ド– 高橋 裕樹 クラス メソッド 課題 宿題

宿題

宿題

BallMove10.java を Ball クラスを用いて作成せよ.

(BallMove13.java)

ヒント:

基本は,RectMove6.java の Block クラスと同じ.

フィールドは?

ボールの位置

(

外接矩形の左上頂点

)

,外接矩形の幅,高さ,ス ピード

(x

方向,

y

方向

)

メソッドは?

コンストラクタ

...

ボールの位置,スピードは乱数で発生 ボールの移動

... move

ボールの描画

... draw

せっかくなので,色も付けましょう

... setBallColor

参照

関連したドキュメント

本時は、「どのクラスが一番、テスト前の学習を頑張ったか」という課題を解決する際、その判断の根

In this diagram, there are the following objects: myFrame of the Frame class, myVal of the Validator class, factory of the VerifierFactory class, out of the PrintStream class,

目標を、子どもと教師のオリエンテーションでいくつかの文節に分け」、学習課題としている。例

演題番号 P1-1 ~ P1-37 P2-1 ~ P2-36 ポスター貼付  9:00 ~ 11:00  9:00 ~ 11:00 ポスター閲覧 11:00 ~ 18:20 11:00 ~ 17:50 発表(ディスカッション) 18:20 ~

社会調査論 調査企画演習 調査統計演習 フィールドワーク演習 統計解析演習A~C 社会統計学Ⅰ 社会統計学Ⅱ 社会統計学Ⅲ.

卒論の 使用言語 選考要件. 志望者への

国際地域理解入門B 国際学入門 日本経済基礎 Japanese Economy 基礎演習A 基礎演習B 国際移民論 研究演習Ⅰ 研究演習Ⅱ 卒業論文

授業は行っていません。このため、井口担当の 3 年生の研究演習は、2022 年度春学期に 2 コマ行います。また、井口担当の 4 年生の研究演習は、 2023 年秋学期に 2