Microsoft PowerPoint - chap10_OOP.ppt

Similar documents
JavaプログラミングⅠ

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

Javaプログラムの実行手順

PowerPoint プレゼンテーション

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

プログラミング基礎I(再)

JAVA入門

メディプロ1 Javaプログラミング補足資料.ppt

PowerPoint プレゼンテーション

Javaの作成の前に

GEC-Java

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

基本情報STEP UP演習Java対策

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

JavaプログラミングⅠ

デジタル表現論・第4回

プログラミング入門1

JavaプログラミングⅠ

Prog1_6th

GEC-Java

Java言語 第1回

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Microsoft PowerPoint - prog09.ppt

GEC-Java

Microsoft PowerPoint - prog09.ppt

JavaプログラミングⅠ

JavaプログラミングⅠ

文字列操作と正規表現

デジタル表現論・第6回

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

10K

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

PowerPoint プレゼンテーション

Prog1_15th

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

Prog2_12th

Prog1_10th

プログラミング入門1

スライド 1

ガイダンス

メソッドのまとめ

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

プログラミング入門1

プログラミング入門1

Program Design (プログラム設計)

Java講座

Microsoft Word - keisankigairon.ch doc

PowerPoint プレゼンテーション

Microsoft PowerPoint - OOP.pptx

Prog2_9th

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Microsoft PowerPoint - prog08.ppt

10K pdf

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

JAVA とテンプレート

プログラミングA

2

DVIOUT-exer

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

基礎計算機演習 実習課題No6

レコードとオブジェクト

Microsoft PowerPoint - lec06 [互換モード]

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

Prog2_9th

Java演習(2) -- 簡単なプログラム --

オブジェクト指向プログラミング・同演習 5月21日演習課題

ÿþ˜u#u·0¹0Æ0à0

人工知能入門

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

GUIプログラムⅣ

JavaプログラミングⅠ

JAVA入門

2

PowerPoint プレゼンテーション

ToDo: 今回のタイトル

IT プロジェクト

Prog1_3rd

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Assignment_.java 0 Assignment_.java 課題 : 台形の面積 / class Assignment_ public static void main(string[] args) throws IOException キーボード準備 int top, bottom,


HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

JavaプログラミングⅠ

とても使いやすい Boost の serialization

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

ガイダンス

pp2018-pp9base

メソッドのまとめ

Transcription:

プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1, length2, length3, width1, width2, width3, height1, height2, height3; length1 = 10.0; // 秋山の部屋の長さ width1 = 8.0; // 秋山の部屋の幅 height1 = 2.5; // 秋山の部屋の高さ length2 = 3.0; // 小人の部屋の長さ width2 = 2.0; // 小人の部屋の幅 height2 = 1.0; // 小人の部屋の高さ length3 = 20.0; // 曙の部屋の長さ width3 = 14.0; // 曙の部屋の幅 height3 = 4.0; // 曙の部屋の高さ System.out.println(" 秋山の部屋の長さは " + length1 + " 幅は " + width1 + " 高さは " + height1 + " です "); System.out.println(" 小人の部屋の長さは " + length2 + " 幅は " + width2 + " 高さは " + height2 + " です "); System.out.println(" 出力 : 曙の部屋の長さは " + length3 秋山の部屋の長さは + " 幅は " + width3 10.0 + 幅は " 高さは 8.0 " 高さは + height3 2.5です + " です "); 小人の部屋の長さは 3.0 幅は 2.0 高さは 1.0です 曙の部屋の長さは 20.0 幅は 14.0 高さは 4.0です 2 1

問題点 length1 = 10.0; // 秋山の部屋の長さ width1 = 8.0; // 秋山の部屋の幅 height1 = 2.5; // 秋山の部屋の高さ length2 = 3.0; // 小人の部屋の長さ width2 = 2.0; // 小人の部屋の幅 height2 = 1.0; // 小人の部屋の高さ length3 = 20.0; // 曙の部屋の長さ width3 = 14.0; // 曙の部屋の幅 height3 = 4.0; // 曙の部屋の高さ あくまでも 9 つの独立した double の変数があるのみ length1 秋山の部屋 の 長さ という構造は プログラムをした人の頭の中にしかない 部屋 という概念があまり反映されてない 3 こういう書き方ができると直感的 room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ room2.owner = 小人 ; // 部屋 2のオーナーは小人 room2.length = 3.0; // 部屋 2の長さ room2.width = 2.0; // 部屋 2の幅 room2.height = 1.0; // 部屋 2の高さ room3.owner = 曙 ; // 部屋 3のオーナーは曙 room3.length = 20.0; // 部屋 3の長さ room3.width = 14.0; // 部屋 3の幅 room3.height = 4.0; // 部屋 3の高さ ピリオドで階層化 部屋ごとに情報をまとめる 部屋 という モノ 対象 が明確になる (1) 部屋 と その (2) 持ち主 長さ 幅 高さ との2つのレベルを分けることができる 4 2

モノ ( 対象 ) の属性 (property) データ 情報 room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ length, width, height などが 部屋の 属性 データ 情報 だとハッキリ分かる room1.height room1 の 高さ (height) 直感的に分かりやすい表記方法 各 部屋 の情報を それぞれ一カ所にまとめることができる! 5 こういう書き方をするには準備が必要 room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ クラス を使う 6 3

クラスを使う方法 [ ステップ 1] 別ファイルで クラス を定義する ( 本当は同じファイルでも良いがとりあえず ) クラスの フィールド を定義する フィールド = 高さ 長さなどの 属性 を保持するデータフィールド // Room.java に Roomクラス を定義する String owner; // 持ち主の名前 double length; // 長さ double width; // 幅 double height; // 高さ // 別ファイル public class クラス名 { 型フィールド名 ; 型フィールド名 ; 型フィールド名 ; 型フィールド名 ; 7 クラスを使う方法 [ ステップ 2] クラスのインスタンス (instance) を作る 配列 の時と同様の手続き ( 参照型 ) 1. 変数の宣言 2. インスタンス作成 ( 記憶領域を確保 ) ( ) に注意 // Test.java の先頭部分 public class Test { public static void main(string[] args) { Room room1; // (1) 変数の宣言 room1 = new Room(); // (2) インスタンスの作成 Room room2 = new Room(); // 宣言とインスタンス作成を Room room3 = new Room(); // 同時にやっても良い 8 4

[ ステップ 3] あとは普通の変数と同様に使うことが出来る // Test.java : 変数の宣言 インスタンス作成のあと room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ System.out.println(room1.owner + " の部屋の幅は " + room1.width + " です "); 出力 : 秋山の部屋の幅は 8.0 です 9 [ 注意 ] コンパイルのやり方 Room.java で定義した Room クラス を Test.java で使うとき Test.java (main() メソッドがあるソースファイル ) をコンパイルする java Test で実行 => javac Test.java => java Test 10 5

クラスを使う方法 : まとめ Room.java // Roomクラス を定義 String owner; // 持ち主の名前 double length; // 長さ double width; // 幅 double height; // 高さ => javac Test.java => java Test // Room クラスを使う public class Test { public static void main(string[] args) { // 変数の宣言とインスタンスの作成 Room room1 = new Room(); // フィールド変数の値を設定 room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ Test.java // フィールド変数を使う System.out.println(room1.owner + " の部屋の幅は " + room1.width + " です "); 11 クラスとインスタンス クラス 部屋 目覚まし時計人間円三角形 インスタンス ( 実例 ) 私の部屋 あなたの部屋 高木さんの部屋 私の目覚まし時計 あなたの 秋山 小泉 森 半径 1.5の円 半径 0.8の円 三辺 3,4,5cmの三角形 三辺 5,12,13cmの三角形 それぞれクラスの属性フィールドは何? 12 6

クラスと メソッド method = 手順 方法クラスに メソッド を定義する // Room.java に クラス を定義する String owner; // 持ち主の名前 double length; // 長さ double width; // 幅 double height; // 高さ // 部屋の体積を計算する double getvolume () { return length * width * height; // 部屋の表面積を計算する double getsurfacearea () { return (length * width + length * height + width * height) * 2; public class クラス名 { 型フィールド名 ; 型フィールド名 ; 型メソッド名 ( 引数列 ) { 型メソッド名 ( 引数列 ) { 13 インスタンスの メソッド を使う ( インスタンスメソッド ) // Test.java の途中から room1.length = 10.0; // 秋山の部屋 1の長さ room1.width = 8.0; // 秋山の部屋 1の幅 room1.height = 2.5; // 秋山の部屋 1の高さ System.out.println(room1.owner + " の部屋の体積は " + room1.getvolume() + " です "); System.out.println(room1.owner + " の部屋の表面積は " + room1.getsurfacearea() + " です "); < 実行結果 > 秋山の部屋の体積は 200.0 です 秋山の部屋の表面積は 250.0 です インスタンス変数. メソッド名 () で呼び出す 14 7

オブジェクト指向の入門の入門 ( 大事な性質が他にいっぱいある ) オブジェクト 1. フィールド ( 属性 状態 ) 2. メソッド ( 操作 手続き ) 人間 1. 属性 状態 ( 名前 髪の毛の色 栄養状態 身長 体重 ) 2. 操作 手続き ( 食べる 髪を染める ) 目覚まし時計 1. 属性 状態 ( 現在時刻 起床時刻 アラームOn/Off) 2. 操作 手続き ( 起床時刻を設定する アラームOn/Offを切り替える ) Windowsの画面の構成要素 Office 製品 15 願望 : インスタンス生成と同時に フィールド変数の初期値を設定 ( 初期化 ) してしまう ことはできないか? // Room クラスを使う public class Test { public static void main(string[] args) { // 変数の宣言とインスタンスの作成 Room room1 = new Room(); Test.java // フィールド変数の値を設定 room1.length = 10.0; // 部屋 1の長さ room1.width = 8.0; // 部屋 1の幅 room1.height = 2.5; // 部屋 1の高さ めんどう // フィールド変数を使う System.out.println(room1.owner + " の部屋の幅は " + room1.width + " です "); 16 8

たとえばこのように // Roomクラスを使う public class Test { Test.java public static void main(string[] args) { // 変数の宣言とインスタンスの作成と初期化 Room room1 = new Room( 秋山, 10.0, 8.0, 2.5); // フィールド変数を使う System.out.println(room1.owner + " の部屋の幅は " + room1.width + " です "); インスタンスト生成時に初期化を行う方法 答え コンストラクタ (Constructor) という特別なメソッ ドを設定すれば良い 17 コンストラクタ を用意すれば OK 特別なインスタンスメソッド ( 重要!) Room.java room1 = new Room( 秋山, 10.0, 8.0, 2.5); // Room.java に クラス を定義する String owner; // 持ち主の名前 double length; // 長さ double width; // 幅 double height; // 高さ // コンストラクタ public Room(String owner, double length, double width, double height) { this.owner = owner; this.length = length; this.width = width; this.height = height; クラス名と同じメソッド名にする 戻り値の型を書かない (void 型でもない ) 18 9

補足 : this インスタンス自身を指す Room.java // Room.java に クラス を定義する String owner; // 持ち主の名前 double length; // 長さ double width; // 幅 double height; // 高さ // コンストラクタ public Room(String owner, double length, double width, double height) { this.owner = owner; this.length = length; this.width = width; this.height = height; room1 = new Room( 秋山, 10.0, 8.0, 2.5); もちろん 引数の変数名 を フィールド名 と違うものにしておけば this はなくても大丈夫 owner, length, width, height は (1) コンストラクタの引数 (2) フィールド変数 の両方で使われている (2) を (1) から区別するのが this 黒板で説明 19 コンストラクタを使った初期化の例 // Roomクラスを使う Test.java public class Test { public static void main(string[] args) { // 配列変数の宣言とインスタンスの作成と初期化 Room[] rooms = { new Room("Alice", 5.0, 10.0, 3.0), new Room("Bob", 3.0, 4.0, 2.0), new Room("Carl", 4.0, 10.0, 6.0), new Room("Dave", 2.5, 6.0, 3.0), new Room("Alice", 4.0, 7.0, 4.0), ; // 全ての部屋の体積を表示 for (int i = 0; i < rooms.length; i++) { System.out.println( rooms[i].owner + " の部屋の体積は " + rooms[i].getvolume() ); 出力 : Alice の部屋の体積は 150.0 Bob の部屋の体積は 24.0 Carl の部屋の体積は 240.0 Dave の部屋の体積は 45.0 Alice の部屋の体積は 112.0 20 10

tostring メソッド tostring という名前のメソッド ( 凄く重要 というわけでもないが知っておくこと ) // Room.java に Room クラス を定義する フィールドの宣言 コンストラクタ public String tostring() { Room.java return owner + " の部屋 : 長さ =" + length + ", 幅 =" + width + ", 高さ " + height; // Roomクラスを使う Test.java (1) for (int i = 0; i < rooms.length; i++) { System.out.println( rooms[i].tostring() ); // Roomクラスを使う Test.java (2) for (int i = 0; i < rooms.length; i++) { System.out.println( rooms[i] ); 出力 : Alice の部屋 : 長さ =5.0, 幅 =10.0, 高さ 3.0 Bob の部屋 : 長さ =3.0, 幅 =4.0, 高さ 2.0 Carl の部屋 : 長さ =4.0, 幅 =10.0, 高さ 6.0 Dave の部屋 : 長さ =2.5, 幅 =6.0, 高さ 3.0 Alice の部屋 : 長さ =4.0, 幅 =7.0, 高さ 4.0 (2) は (1) と同じ出力 21 tostring メソッド 標準文字列 を出力する // Room.java に Room クラス を定義する フィールドの宣言 コンストラクタ public String tostring() { Room.java return owner + " の部屋 : 長さ =" + length + ", 幅 =" + width + ", 高さ " + height; // Roomクラスを使う Test.java (2) 出力 : Aliceの部屋 : 長さ =5.0, 幅 =10.0, 高さ3.0 Bobの部屋 : 長さ =3.0, 幅 =4.0, 高さ2.0 for (int i = 0; i < rooms.length; i++) { Carlの部屋 : 長さ =4.0, 幅 =10.0, 高さ6.0 System.out.println( rooms[i] ); Daveの部屋 : 長さ =2.5, 幅 =6.0, 高さ3.0 Aliceの部屋 : 長さ =4.0, 幅 =7.0, 高さ4.0 詳細は p.245-247 22 11

その他 クラス (static) メソッド については p.198, p.254 を参考に 例えば Java の Math クラスは 多くのクラスメソッドを持っている ( http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/lang/math.html ) 23 12