PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

PowerPoint Presentation

PowerPoint プレゼンテーション

Java言語 第1回

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

ガイダンス

Microsoft PowerPoint - prog03.ppt

ガイダンス

<4D F736F F F696E74202D AC C8899E D834F E >

GEC-Java

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

Javaの作成の前に

プログラミング入門1

ガイダンス

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - OOP.pptx

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

PowerPoint プレゼンテーション

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

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

Prog2_9th

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

JavaプログラミングⅠ

Microsoft PowerPoint ppt

2

C#の基本

Prog1_12th

次の演習課題(1),(2)のプログラムを完成させよ

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

問1

JavaプログラミングⅠ

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

Microsoft PowerPoint - prog09.ppt

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

Microsoft PowerPoint - prog09.ppt

ガイダンス

Prog1_12th

Microsoft PowerPoint - prog11.ppt

JavaプログラミングⅠ

Java言語 第1回

Microsoft PowerPoint pptx

ガイダンス

Microsoft PowerPoint - lec06 [互換モード]

メソッドのまとめ

Prog2_11th

ソフトウェア開発方法論2

Microsoft PowerPoint - swing2.ppt

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

Microsoft Word - Java3.DOC

Microsoft PowerPoint - swing3.ppt

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

JavaプログラミングⅠ

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

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

ガイダンス

基本情報STEP UP演習Java対策

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

Java言語 第1回

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

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

Microsoft PowerPoint prog1_doc2x.pptx

< F2D B838A835882CC8CF68EAE2E6A7464>

プログラミング入門1

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

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

スライド 1

Microsoft Word - Java3.DOC

Java 2 - Lesson01

ラベルを管理するクラス Label ラベルはクラス Label により管理され 各種設定を行うメソッドが準備されています ラベルの生成 new Label("1. 通常のラベルです "); ラベルのサイズ setprefsize(200,100); ラベル文字が 1. 通常のラベルです で横 200

JAVA入門

プログラミング入門1

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

Javaプログラムの実行手順

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

人工知能入門

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

Microsoft PowerPoint - prog10.ppt

Microsoft PowerPoint - prog12.ppt

JavaプログラミングⅠ

I 4 p.2 4 GUI java.awt.event.* import /* 1 */ import mouseclicked MouseListener implement /* 2 */ init addmouselistener(this) this /* 3 */ this mousec

Microsoft PowerPoint - prog10.ppt

Microsoft Word 年度情報コミュニケーション実験II(Ver0.9)c.docx

Microsoft PowerPoint - prog11.ppt

GUIプログラムⅣ

< F2D834F838C A815B A CC>

IT プロジェクト

< F2D E E6A7464>

デジタル表現論・第4回

GEC-Java

Java言語 第1回

レコードとオブジェクト

プログラミングA

Make the Future Java FY13 PPT Template

< F2D825282CC947B909482CC A815B83682E6A>

表示の更新もそういた作業のひとつに当たる スレッドの使用アニメーション アニメーションやシミュレーションなどは画面の更新が一定のタイミングで行われていく この連続した画面の更新をスレッドを利用して行う しかし paint() メソッドを直接呼び出して表示を更新することはできない その理由

Prog1_3rd

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

Transcription:

オブジェクト指向 プログラミング演習 第 3 回継承 オーバーライド インタフェース

前回までのお話 モジュール化 大きなプログラムは部品に分けて設計する オブジェクト指向 モノ中心に考える プログラムでは クラス ( モノの種類 ) を定義する ある特定のモノは インスタンスで表す クラスは型 インスタンスは値 プログラムを書くときも部品ごとに書く モノの部品であるモノはフィールドに書く 手順の部品である手順はメソッドに書く

言葉の使い方に注意 クラスは モノの種類 を表す 四面体を表すクラス 表面積を計算するクラス メソッドは 手順 を表す 四面体を表すメソッド 表面積を計算するメソッド

ところで メゾット と書いた人が複数いました 山口はどこかで書き間違えましたか? メソッド (method) です

今日のお題 継承 オーバーライド インタフェース

継承 (inherit) あるクラスの性質を全て持っているクラスを定義したいとき : 定義をゼロから全部書くのは面倒 違うところ 追加された性質だけ書きたい オブジェクト指向には クラスの継承 という考え方がある : クラス A を継承したクラス B は A の性質を元に変更 追加された性質を持つ A の方が より一般的 B の方が 特殊な用途のための機能が追加されている

継承の利用例 最初から用意されている部品 クラスとして提供されている いろいろな用途に使うため 一般的なもの 自分のプログラムで使うとき : その部品の機能を直接呼び出す書き方 その部品を改造した部品を作って使う書き方 継承を使うと中身を知らなくても改造できる

プログラム例 1( まずは継承なしで ) GUIの窓 ( 枠 ) を作ってみる Test1.java import java.awt.frame; public class Test1 { public static void main(string args[]) { Frame f = new Frame(); f.setvisible(true); Frameは用意された 窓枠を作る部品 Frameのインスタンスを作って Visible( 見えるよう ) にする (Frameを作った当初は見えない) 実行すると 画面左上に小さな窓 (?) が現れる ターミナルでCtrl-Cをしないと停止しない

プログラム例 2( まずは継承なしで ) さすがに小さすぎる ちょっと改造 : Test1.java import java.awt.frame; public class Test1 { public static void main(string args[]) { Frame f = new Frame("OOP"); f.setsize(600,600); f.setvisible(true); Frame のコンストラクタに文字列を渡すと 窓のタイトルになる setsize は大きさを設定するメソッド 縦横のドット数を引数として渡す

プログラム例 3( 継承を使ってみる ) Test2.java import java.awt.frame; public class Test2 extends Frame { Test2() { super("oop"); setsize(600,600); setvisible(true); public static void main(string args[]) { Test2 f = new Test2(); 継承するには クラスを定義するときに extends を使う super は継承元クラスのコンストラクタを呼ぶ この Test2 は タイトルが OOP で大きさが 600 600 であるような Frame ただし コンストラクタの最初に書かなくてはならない 省略すると 引数無しの親コンストラクタが呼ばれる

継承のいろいろ 継承元のクラスをスーパークラス 上位クラスと呼ぶ 継承している側のクラスは サブクラス 下位クラス サブクラスではスーパークラスで定義されたメソッドを使うことができる

オーバーライド スーパークラスで定義されたメソッドと同じ呼び出し方をするメソッドを定義すること 同じ使い方で 別の ( サブクラスで特殊化された ) 動作をさせることができる

オーバーライドの利用例 絵を表示する窓を作るには : 窓枠である Frame を用意する Frame に絵を表示する部品 Canvas を付け加える 部品を表示するとき paint メソッドが呼ばれる仕組みになっている 最初から用意されている Canvas の paint メソッドは 何もしない Canvas のサブクラスを作って paint メソッドをオーバーライドする この paint メソッドの中で絵を描く作業をすれば 絵が表示される

プログラム例 4 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) { gc.setcolor(new Color(255,255,255)); gc.fillrect(0,0,600,600); gc.setcolor(new Color(0,0,0)); gc.drawline(30,30,570,570); java.awt の下の全クラスを使えるように import Frame のインスタンス f に MyCanvas のインスタンス c を付け加えてから 見えるようにする MyCanvas は Canvas のサブクラス ここではコンストラクタと paint メソッドをオーバーライドしている このコンストラクタと paint メソッド以外は Canvas と同じ 絵と言っても ここでは白地に黒い線を一本描いているだけ

多重継承 複数のクラスを継承したクラスを考えても良い 多重継承をサポートしているプログラミング言語もあるが Java では限定的 Java の多重継承 クラスが継承 (extends) できるクラスは高々一つ interface という仕組みで メソッドを定義することを保証する という弱い継承をサポートしている クラスの定義で複数の interface を指定できる

プログラム例 5 import java.awt.*; import java.awt.event.*; public class OOP5 implements MouseListener { Frame f; OOP5() { MyCanvas c = new MyCanvas(); c.addmouselistener(this); f = new Frame("OOP5"); f.add(c); f.pack(); f.setvisible(true); public void mouseclicked(mouseevent e) { System.out.println("("+e.getX()+","+e.getY()+")"); public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { public static void main(string args[]) { new OOP5(); class MyCanvas extends Canvas {... マウス操作を受け取る MouseListener インタフェースを実装 (implements) していることの宣言 MyCanvas のインスタンス c へのマウス操作を この OOP5( のインスタンス ) が受け取る マウス操作に対応したメソッドが呼ばれる クリックしたとき マウスの位置を表示

課題の概要 コンピュータが " 考える " ことはしなくてよい ボードゲームまたはペンシルパズルをコンピュータ上で遊ぶためのゲーム盤プログラムを作成しなさい 人間が遊べるように作ること ルール通りの動きができ ルールに違反する動きができないようにすること 終了判定 ( 勝敗判定 / 正解判定 ) を行うこと 上記プログラムについてレポートを書きなさい この授業で扱わない技術を用いても構わない ただし プログラミング言語は Java に限る 締め切り :2019 年 6 月 25 日 ( 火 )17:00 提出場所 : 本部棟学生支援課前のレポート提出用ポスト

課題のゲームまたはパズルについて 既存のゲームやパズルを好きに選んでよい トランプや花札も可 カードをうまく表現してね オリジナルのゲーム は不可 ( 作りたければ授業外で勝手にどうぞ ) 複雑すぎる / 単純すぎるゲームやパズルは おすすめしない 自分で楽しめるものを選んで下さい ちょっと難しいかな と思うものに挑戦してください 物理シミュレーションを要するゲーム ( 将棋崩しなど ) は おすすめしない ( 授業外で作るなら UNITY を使うと楽そうですね ) ゲームやパズルの参考になりそうなサイト 情報処理学会プログラミング シンポジウムの分科会 GPCC http://hp.vector.co.jp/authors/va003988/gpcc/gpcc.htm パズル雑誌を出している出版社ニコリ http://www.nikoli.co.jp/ja/

課題の完成度について 2 回提出するうちの 1 回目です ゲーム / パズルとして成立して 一応動く という完成度が最低ライン 課題に選んだゲーム / パズルのプログラムの本質的な機能を作りきってください 完璧なものを作ってくれても構わない それでも 2 回目にやることはあります

今後の本演習 もちろん オブジェクト指向についての学習を進める その日に習ったことを 自分が作っているものに当てはめて考えるとよい 毎回 少しずつ 自分の課題作成に取り組む時間を作る ( つもり ) 授業で説明した内容によっては 作成中のプログラムを作り直すことになる 少しずつ改良していくのは プログラミングの勉強法として有効です

挑戦しましょう 挑戦することに成功は約束されていない しかし 成長は約束されている ( ザッケローニ 元サッカー日本代表監督 ) 難しい課題を選択しただけでは 挑戦した とは言えません 課題の解決に向けて努力してこそ成長できるのです 課題の評価は レポートで行います 完成に向けた努力をレポートに書ききってください