インタフェース yukita@k.hosei.ac.jp プログラミング 第14回 インタフェース yukita@k.hosei.ac.jp プログラミング第14回.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Ver 準備 Java フォルダに移動して …… mkdir Swing Swing フォルダに移動して …… cp ~gundam/Java/Swing. コマンドプロンプト ( JDK ) でないと起動 しないので注意!!!
プログラミング第5回 1 while ループ 文字列の操作
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
         第9回 Swing.
プログラミング基礎I(再) 山元進.
Applet 岡部 祐典 鈴木 敬幸.
プログラミング基礎I(再) 山元進.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
第14回 GUIの構成とイベント・ドリブン ~GUIを使ったプログラム(Ⅰ)~.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
アプレット プログラミング 第10回 アプレット プログラミング第10回.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
第11回 GUI(グラフィカル・ユーザ・インターフェース)の設計
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
プログラミング言語入門 手続き型言語としてのJava
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
UDPマルチキャストチャット                    空川幸司.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第3回 2007年4月27日 応用Java (Java/XML).
第6回 2007年6月1日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム①~ (5週目)
プログラミング演習3 第2回 GUIの復習.
Java/Swingについて (3) 2005年10月19日 海谷 治彦.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
ソフトウェア制作論 平成30年11月21日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

インタフェース yukita@k.hosei.ac.jp プログラミング 第14回 インタフェース yukita@k.hosei.ac.jp プログラミング第14回

インタフェースとは クラスと同様の参照型の一種 フィールド,メソッドをもつ フィールドは定数だけが許される メソッドはすべて abstract,つまり実装されない abstract class では部分的に実装が可能 abstract class と同様にインスタンスは作れない Java言語におけるオブジェクトはこれですべて。 クラス クラスのインスタンス インタフェース プログラミング第14回

インタフェースによる契約 interface InterfaceX { public void methodX1(); } このインタフェースを実装するものを以下甲という。 このインタフェースを実装するクラスを,どのようなクラスであるか関心をもたずに信じて利用するものを以下乙という。 プログラミング第14回

インタフェースの実装者(契約者甲) public class ClassB implements InterfaceX { ClassC otsu; ... public void methodX1(){ } public void myInit(){ otsu=new ClassC(); otsu.setKo(this); 「InterfaceXに定められたメソッド群をすべて実装していますよ。」という宣言。これによりこのクラスは本来の型であるClassBだけでなく,InterfaceXという型ももつことになる。 プログラミング第14回

インタフェースの利用者(契約者乙) public class ClassC { InterfaceX ko; pubic void setKo(Interface ko){ this.ko=ko; } private void someMethod(){ ko.methodX1(); ... このクラスはInterfaceXを実装しているクラスならどんなクラスであろうと信じて使う。だから変数koの型はインタフェースで宣言している。実際にどのようなクラスがsetKo()で渡されて来ても,その中身には関知しない。 プログラミング第14回

多重継承とインタフェース 1つのクラスで複数のインタフェースを実装することができる。 多くの型をもつことができる。これは多重継承を実質可能にしている。abstract クラスではこのようなことができない。 プログラミング第14回

例 クラス図 <<interface>> X <<interface>> Y 例 クラス図 <<interface>> X <<interface>> Y <<interface>> Z ClassA ClassB ClassC プログラミング第14回

この結果 X[]={new A(), new B()}; X x=new B(); Y y=new B(); Z z=new B(); のようなことができる。 プログラミング第14回

Lockable.java(List 14-1,p.167) interface Lockable { boolean lock(); boolean unlock(); } プログラミング第14回

Kinko.java(List 14-2, p.108)完全版 class Kinko implements Lockable{ private boolean locked=false; public boolean isLocked(){ return locked;} public boolean lock(){ if(locked==false){ locked=true; System.out.println("Lockされました。"); }else{ System.out.println("すでにLockされています。"); } return locked; プログラミング第14回

Kinko.java (2) public boolean unlock(){ if(locked==true){ locked=false; System.out.println("Lockが解除されました。"); }else{ System.out.println("Lockされていません。"); } return locked; プログラミング第14回

LockableTest.java public class LockableTest{ public static void main(String[] args){ Lockable x; x=new Kinko(); x.lock(); x.unlock(); } プログラミング第14回

実行結果 Lockされました。 Lockが解除されました。 プログラミング第14回

課題 Lockableインタフェースを実装するクラスHouseを作成せよ。 lock されると「準備中」とprintする unlock されると「営業中」とprintする LockableTestを改造し,LockableTest2とせよ。 Lockableの長さ2の配列にKinkoとHouseのインスタンスを格納し,動作を検証する。 プログラミング第14回

解答例 House.java(1) class House implements Lockable{ private boolean locked=false; public boolean isLocked(){ return locked;} public boolean lock(){ if(locked==false){ locked=true; System.out.println("準備中"); }else{ System.out.println("既に準備中ですよ。"); } return locked; プログラミング第14回

House.java (2) public boolean unlock(){ if(locked==true){ locked=false; System.out.println("営業中"); }else{ System.out.println("既に営業中ですよ。"); } return locked; プログラミング第14回

解答例 LockableTest2.java public class LockableTest2{ public static void main(String[] args){ Lockable[] x=new Lockable[2]; x[0]=new Kinko(); x[1]=new House(); x[0].lock(); x[0].unlock(); x[1].lock(); x[1].unlock(); } プログラミング第14回

余裕のある人へ 次に紹介するのは swing の JFrame を拡張し,Lockable インタフェースを実装するクラスの例である。 単体テストのためのmainメソッドも用意してある。 結合テストドライバとして LockableTest3 を用意してある。 長さ3の配列 x[]にKinko,House,SwingKinkoのインスタンスを格納している。 コマンドプロンプトからインデックスと“lock”または“unlock”をスペースで区切って入力する。 どういう動きをするだろうか。 プログラミング第14回

SwingKinko.java (1) import java.awt.*; import java.awt.event.*; import javax.swing.*; class SwingKinko extends JFrame implements Lockable, ActionListener{ private boolean locked; private JButton lock, unlock, quit; private JTextField message; private JPanel jp; プログラミング第14回

SwingKinko.java (2) public SwingKinko(){ super("Swing Kinko"); setGUI(); } public boolean lock(){ locked=true; message.setText("ロックされています"); return locked; public boolean unlock(){ locked=false; message.setText("ロック解除中"); プログラミング第14回

SwingKinko.java (3) private void setGUI(){ jp=new JPanel(); getContentPane().add(jp); lock=new JButton("Lock"); lock.addActionListener(this); unlock=new JButton("Unlock"); unlock.addActionListener(this); quit=new JButton("Quit"); quit.addActionListener(this); message=new JTextField(30); message.setEditable(false); プログラミング第14回

SwingKinko.java (4) jp.add(lock); jp.add(unlock); jp.add(quit); jp.add(message); setSize(new Dimension(400,100)); setVisible(true); } プログラミング第14回

SwingKinko.java (5) public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); if(obj==lock){ lock(); } else if (obj==unlock){ unlock(); } else if (obj==quit){ System.exit(0); } プログラミング第14回

SwingKinko.java (6) // For unit test public static void main(String[] args){ new SwingKinko(); } プログラミング第14回

LockableTest3.java (1) import java.io.*; public class LockableTest3{ public static void main(String[] args){ Lockable[] x ={new Kinko(),new House(),new SwingKinko()}; BufferedReader reader =new BufferedReader( new InputStreamReader(System.in),1); String line, token1, token2; int target=0; int sep; プログラミング第14回

LockableTest3.java (2) try{ while(!((line=reader.readLine()).equals("quit")) && (sep=line.indexOf(" "))>0){ token1=line.substring(0,sep).trim(); token2=line.substring(sep+1).trim(); target=Integer.parseInt(token1); if(token2.equals("lock")){ x[target].lock(); }else if(token2.equals("unlock")){ x[target].unlock(); } プログラミング第14回

LockableTest3.java (3) }catch(IOException e){System.exit(1); }catch(NumberFormatException e){System.exit(2); } System.exit(0); プログラミング第14回

ActionListenerインタフェースの契約 JButton のインスタンスたちは契約者乙 addActionListener(甲)により契約希望者の登録を待つ。 登録されている甲に対して,必要なときにactionPerformed()を呼び出す。 SwingKinko のインスタンスは契約者甲 actionPerformed()をしっかり定義する義務がある。 プログラミング第14回

ActionListener契約開始 lock:JButton unlock:JButton quit:JButton addActionListener(this); SwingKinko プログラミング第14回

ActionListener契約履行と仕事の連携 ボタンが押された lock:JButton unlock:JButton quit:JButton actionPerformed(actionEvent); どの契約者乙からやって来たか判別して,それに応じて処理をおこなう。 SwingKinko プログラミング第14回