PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

Microsoft PowerPoint - prog03.ppt

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

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - chap10_OOP.ppt

Java言語 第1回

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

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

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

Javaの作成の前に

Microsoft PowerPoint - prog04.ppt

GEC-Java

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

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

PowerPoint プレゼンテーション

プログラミング入門1

基本情報STEP UP演習Java対策

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

2

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

ガイダンス

Java知識テスト問題

JavaプログラミングⅠ

JAVA入門

JavaプログラミングⅠ

ガイダンス

JavaプログラミングⅠ

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

ガイダンス

JavaプログラミングⅠ

Javaプログラムの実行手順

デジタル表現論・第6回

Prog2_9th

Prog1_15th

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

Make the Future Java FY13 PPT Template

Microsoft PowerPoint - OOP.pptx

ガイダンス

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

PowerPoint プレゼンテーション

Microsoft PowerPoint - lec06 [互換モード]

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

プログラミングA

Java講座

JavaプログラミングⅠ

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

メソッドのまとめ

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

Prog1_6th

問題1 以下に示すプログラムは、次の処理をするプログラムである

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

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

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

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

PowerPoint Presentation

GEC-Java

IT プロジェクト

スライド 1

Prog1_10th

PowerPoint Presentation

2

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

問題1 以下に示すプログラムは、次の処理をするプログラムである

Microsoft Word - problem3.doc

プログラミング入門1

JAVA とテンプレート

Microsoft PowerPoint - prog08.ppt

<基礎領域>

GEC-Java

文字列操作と正規表現

プログラミング入門1

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

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

デジタル表現論・第4回

Microsoft PowerPoint - OOP.pptx

Prog2_9th

プログラミング実習I

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft PowerPoint - HITobject.ppt

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

Microsoft PowerPoint - prog13.ppt

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint pptx

<4D F736F F F696E74202D AC C8899E D834F E >

Prog2_12th

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

PowerPoint プレゼンテーション

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 3 回コレクションと例外処理 テクノロジックアート 瀬嘉秀

< F2D B838A835882CC8CF68EAE2E6A7464>

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

GUIプログラムⅣ

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

Transcription:

オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム

今日のお題 継承 オーバーライド ポリモルフィズム

継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える

継承の例 大学生 長崎県立大学の学生 大学生を継承する概念 シーボルト校の学生 長崎県立大学の学生を継承する概念 大学生も継承している

多重継承 あるクラスが複数のクラスのサブクラスとなることを 多重継承と呼ぶ 複数のクラスの性質を兼ね備えたクラスを考えると ものごとを整理しやすいこともある 例 ) 水陸両用車の機能を考えるときは 車と船の両方のサブクラスと捉える ただし Java は厳密な意味での多重継承をサポートしていない

Java のインタフェース クラスのように型として使える そのインタフェースに合致する機能を持ったモノの種類を表す メソッドの型だけ宣言する メソッドの中身は このインタフェースを実装するクラスの中で定義する メソッドはクラスが持つ機能を表すので インタフェースは その型 ( 機能の概要 ) だけを表している インタフェースの実装は 継承を一部だけ表現する

Java における継承の表現 extends クラス名 クラスの宣言時にクラス名の後ろにつけて 別のクラスのサブクラスであることを示す クラスを宣言するときに extends で継承できるクラスは一つだけ implements インタフェース名,... クラスの宣言時にクラス名の後ろにつけて インタフェースを実装しているクラスであることを宣言する クラスを宣言するときに implements で複数のインタフェースを ( カンマで区切って ) 並べることができる

継承の実例 java.awt.canvas は画像を表示するための画面を表すクラス Canvas そのものは 何も表示しない 表示のための機能を持っている : 画像の表示が必要なときに Canvas クラスの paint メソッドが呼ばれる仕組みが用意されている ただし Canvas クラスの paint メソッドは 何もしない Canvas のサブクラスとして 特定のゲームのための画像を表示するための画面を表すクラスを考える : paint メソッドを ( 上書きで ) 定義して 絵を描く スーパークラスで定義されているメソッドを上書き定義することを オーバーライドと呼ぶ

プログラム例 import java.awt.*; public class Oop4 { } Frame f; Oop4() { } MyCanvas c = new MyCanvas(); f = new Frame("Oop4"); f.add(c); f.pack(); f.setvisible(true); public static void main(string args[]) { new Oop4(); } class MyCanvas extends Canvas { } MyCanvas() { setsize(600,600); } public void paint(graphics gc) { } int i; gc.setcolor(new Color(0,160,0)); gc.fillrect(0,0,600,600); gc.setcolor(new Color(0,0,0)); for(i=0 ; i<4 ; i++) { } gc.drawline(30+i*180,30,30+i*180,570); gc.drawline(30,30+i*180,570,30+i*180); MyCanvas は Canvas のサブクラス ここではコンストラクタと paint メソッドをオーバーライドしている このコンストラクタと paint メソッド以外は Canvas と同じ

継承と 型の包含関係 あるクラスのインスタンスを そのクラスのスーパークラス型の仮引数で受け取ることができる スーパークラス型の変数に代入することも 同様にできる 例 ) MyCanvas クラスのインスタンスは Canvas クラスのインスタンスでもあるので Canvas を受け取るメソッドに渡すことができる 先のプログラム例 7 行目 : f.add(c); Frame の add は Canvas を受け取れる MyCanvas のインスタンス c を渡すことができる add は Container クラスで定義され Component を受け取る Frame は Container のサブクラスであり Canvas は Component のサブクラスである

ポリモルフィズム 同じ名前で異なる型の引数を受け取るメソッドを複数定義できる ( 名前が同じでも 引数の型が違えば 違うメソッドとして扱われる ) i.e. 呼び出すときの引数によって 異なるメソッドを呼び出せる 使い方 : 本質的には同じ機能だが 引数に複数の表現の仕方がある場合 引数のいくつかを省略できる場合

Java のいろいろについて ちょっと説明 以下 授業内容の先取りになってしまう項目もありますが 要素技術の紹介に必要なので 簡単に説明しておきます : this 文字列との加算 tostring メソッドのオーバーライド 配列の宣言 例外 ( 第 8 回の予定 ) null マルチスレッド ( 第 9 回の予定 )

this あるメソッドやコンストラクタの中で そのオブジェクト自身を指すために this というキーワードを使う この id はインスタンスのフィールド 例 ) class Card { int id; Card(int id) { this.id = id; } } この id はコンストラクタの引数

文字列との加算 文字列同士の加算 (+) は 文字列の連結を表す 例 )System.out.println("Hello"+" "+"World"); どのオブジェクトも文字列と加算すると 文字列になる例 ) int x = 10; String s = ""+x; この s は "10" という文字列になる

tostring メソッドのオーバーライド System.out.println でオブジェクトを表示するとき そのオブジェクトを文字列に変換している オブジェクトを文字列に変換するメソッドをオーバーライドしておくと 簡単に出力できて便利 例 ) class Card { } int id; public String tostring() { } return ""+id;

配列の宣言 Java で配列を宣言するときは (C 言語と異なり ) 配列の大きさを宣言しない int a[]; a = new int[10]; // こういう宣言をする ここでは 大きさを書かない // int が 10 個入る配列を作って a に代入する なお 配列に対して.length を参照すると 配列の大きさが分かる 配列の添字に 範囲外の値 ( 負数や大きすぎる値 ) を与えると ArrayIndexOutOfBounds という RuntimeException が発生する 簡単にいうと エラー 後述する

例外とその捕捉 Exception Java には あるメソッド内で例外 ( エラー ) が発生すると そのメソッドの呼出し元に通知される仕組みがある 例外が発生する可能性がある場合 その例外が発生したときの処理 ( 例外処理 ) を書かねばならない 例外処理がないと コンパイルが通らない 例外は try{...}catch(...){...} 構文で捕捉する もしくは さらに上流へ例外を通知する必要がある メソッドの定義に throws の宣言を追加すると そのメソッド内で発生した例外をさらに上流に通知する 捕捉しなくてもコンパイルが通る例外もある (RuntimeException という )

null インスタンスが 無い ことを null で表す null は 値として どのクラス型の変数にも代入できる null に対して メソッドの呼出しや フィールドの参照を行うと NullPointerException という例外が発生する 通称 ぬるぽ NullPointerException は RuntimeException なので 捕捉し忘れることが多い

Thread 計算の実行の流れの一つ一つを thread( スレッド ) と呼ぶ マルチスレッド (multi-thread) は 複数の計算を並行して実行する GUI を使うと GUI を制御するためのスレッドが作られるので 実はマルチスレッドで動くことになる 複数のスレッドから一つのデータを参照したり書き換えようとするときには 排他制御を必要とする Java では synchronized というキーワードを使って排他制御を行うことができる ( 第 9 回で解説予定 )

サンプルプログラムをいくつか 授業の Web ページにサンプルプログラムを置いた (http://sun.ac.jp/prof/yamagu/2017oop/ の今日の日付のあたり ) 2017OOPsamples.tgz というファイルをダウンロードする シェルで tar zxf 2017OOpsamples.tgz を実行して展開する 展開すると samples2017 というディレクトリが作られる samples2017 の下に audio, file, gui, network, random の各ディレクトリがある 各ディレクトリにある.java ファイルのコメントを参考にコンパイルと実行をしてみるとよい ) 日本語を使っているので コンパイル時に文字コードを 指定する必要がある

最終課題に向けた演習時間 各自 自分の課題に向けた 作業をしてください

出席確認演習 最終課題に向けた演習時間中に行ったことを簡単に報告しなさい 提出方法 :sec02@sun.ac.jp 宛にメール 提出期限 : 今日中