Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
Applet 岡部 祐典 鈴木 敬幸.
データマイニングのための柔軟なデータ取得、操作を支援するAPIの設計
JAVA GUIプログラミング 第6回 TextFieldとLabel.
1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
JAVA.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
 Applet アプレット ◇長い長いアプレット講座◇.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
社会人学習講座 「Javaプログラミング概論」
JavaBeans とJSP データベース論 第5回.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
第14回独習Javaゼミ セクション1~3 発表者 直江 宗紀.
アプレット プログラミング 第10回 アプレット プログラミング第10回.
RMI ソフトウェア特論 第6回 /
プログラミング演習3 第2回 GUIの復習.
コンパイラの解析 (2) GCJのデータ構造 - 1.
Stateful Session Beans
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとデータ構造演習(6月24日) グラフィックス、その2 テキストフィールドで入力する チェックボックスで1つ以上指定する
Java/Swingについて (2) 2005年10月11日 海谷 治彦.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
リファレンス,配列,例外処理 その他演習に役立つこと
第15回独習Javaゼミ セクション14~15 発表者 直江宗紀.
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
第6回 2007年6月1日 応用Java (Java/XML).
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Collection, Generics, Iterator
ソフトウェア制作論 平成30年12月5日.
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
Java/Swingについて (3) 2005年10月19日 海谷 治彦.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
JAVA入門後期③ JAVAのGUI (JavaのGUI基本構造、いろいろなアプレット)
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)
Java8について 2014/03/07.
Java/Swingについて+ (4) 2005年10月26日 海谷 治彦.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
ソフトウェア制作論 平成30年11月21日.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
システムエンジニアリング演習 GUIの実現(1):AWT 11月6日.
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
システムエンジニアリング演習 GUIの実現(2):イベント処理 11月13日.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
Annotation EJB 3.0 コース 第3回 2006年8月4日.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

Javaのインタフェース についての補足 2006年5月17日 海谷 治彦

Interface あるクラスの多面性(ま,別に一面でもいいけど)を明示的に記述したもの. あるクラスでinterfaceを実装することで,そのクラスはinterfaceで定義されたメソッドを提供することを保障する. interfaceの意味通り,(interfaceを実装した)クラスを使う(他の)クラスのための接点を提供するもの.

例 (というか比喩) サッカー選手であって, サッカーする. ある人 (インスタンス) 大学生であって, 勉強する. 実験する. 家庭教師であって, 教える.

interfaceの記述 public interface FootballPlayer{ public void select(Game g); } public interface Student{ public void teach(Field f); } public interface PrivateTeacher{ public void learn(); public void invite(); public void emply(Pupil p); }

interfaceの実装 class Gakusei implements FootballPlayer, Student, PrivateTeacher{ public void select(Game g){ // 実際あるゲームgへの参加選抜をされる際の処理をかく } public void teach(Field f){ // 実際にある分野fを教わる場合の処理を書く public void employ(Pupil p){ // 実際にある生徒pに雇われる際の処理を書く public void learn(){ // 実際に雇われている生徒が学ぶ際の処理を書く

interfaceの効用 (前述のように)あるクラスの持っている側面に明示的に名をつけて区別することができる. クラスを使う側からすれば,クラスではなくインタフェースを指定することで,クラス間の関連を低くすることができる. ⇒ あるインタフェースを実装したクラスなら,なんでも使えるような汎用性の高いクラスを書ける.

家庭教師を雇う方にすれば,その機能を提供するものなら誰でも良い(はず). Interfaceで指定 家庭教師を雇う方にすれば,その機能を提供するものなら誰でも良い(はず). class Woman implements PrivateTeacher, HouseWife{ ... } class Pupil { .... educate(PrivateTeacher pt){ pt.employ(this); pt.invite(); pt.lean(); } class Jisan implements PrivateTeacher, Niwashi{ ... } class Gakusei implements FootballPlayer, Student, PrivateTeacher{ ... }

クラス図で書いてみると <<interface>> PrivateTeacher employ(Pupil) invite() learn() <<interface>> FootballPlayer Pupil <<interface>> Studnet Gakusei Jisan Woman

現実的なinterface Javaの標準API (Application Programming Interface, 標準的に利用できるクラスライブラリのこと)には,多数のinterfaceと多数のinterfaceを実装したクラスがある.

Interface Serializable java.io パッケージ内に定義 このinterfaceが実装されているクラスのインスタンスは,ファイルにしまったり,ネットワーク上にデータとして転送できたりする. 逆にこれが実装されていないクラスのインスタンスはファイル保存等ができない. String, Vector, Integer等,データ指向のクラスでは大抵実装されている.

interface Runnable run + able すなわち「実行可能」を示すinterface. スレッド(プログラム内の並行処理の1つ)を実現するためには,このインタフェースに,処理ループを書くのが普通. public void run() メソッドの実装を指示.

MouseListener GUIにおいてマウスの動作に伴い発生するデータ(event)を拾い,それに反応するためのクラスは大抵,コレを実装している. ボタン等は,通常,特定のMouseListenerを実装したクラスが結びついているが,その結びつきを変えることで,簡単にボタンを押した際の振る舞いを変えることができる.

例: リスナを使ったイベント駆動 イベントリスナ: 発生したイベントに対応してある処理をする部品 イベントソース: イベントを発生する部品 この例では,ボタンを押すとラベルの数値が増える,という単純なもの.

ボタン系のイベントに対応して行う処理を, 例: ソースコード class MSLabel extends Label implements MouseListener{ private int; MSLabel(int initn){ n=initn; setText(n+""); } public void mouseClicked(MouseEvent e){ n++; public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} import java.applet.*; import java.awt.*; import java.awt.event.*; public class ButtonListen extends Applet{ public void init(){ Button b=new Button("Up"); MSLabel ms=new MSLabel(0); b.addMouseListener(ms); this.add(b); this.add(ms); } ボタンbのイベントを ラベルmsが聞くように指示 ボタン系のイベントに対応して行う処理を, ラベル(リスナー)内に実装.

クラス図 Component addMouseListener(MouseListener) <<interface>> MouseListener mouseClicked() mouseEntered() .... Label Button MSLabel

InterfaceのTIPS ClassよりむしろInterfaceのほうが役割という意味に近い. 「視点」と考えてもよい.

教科書 p.107について 「オブジェクトに対する操作方法と,それに対応する振る舞い」を規定? 操作法は規定している. 振る舞いは規定されているとは言えない. メソッドの名前から直感的な振る舞いはわかる. しかし,そのメソッドが直感的な振る舞い通り実装されているかをインタフェースは保障できない. 詳細は反例 Calcable にて