> Polymorphism. Polymorphism - 2 多型的功能 多型提供了「介面與實作分離」的一個重 要性,能將 what (是什麼)自 how (怎麼 做)之中抽離。 多型( polymorphism )除去型別之間的耦 合關係。

Slides:



Advertisements
Similar presentations
第 七 章 開放式問句與探究.
Advertisements

Chapter 10 馬可夫鏈 緒言 如果讀者仔細觀察日常生活中所發生的 諸多事件,必然會發現有些事件的未來 發展或演變與該事件現階段的狀況全然 無關,這種事件稱為獨立試行過程 (process of independent trials) ;而另一些 事件則會受到該事件現階段的狀況影響。
Introduction to Java Programming Lecture 13 Classes I OO Programming.
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/3 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH3.5 ~ CH /10/31.
“Rule” By OX. By Check CREATE TABLE 員工薪資 ( 編號 int IDENTITY PRIMARY KEY, 薪資 smallmoney, CHECK ( 薪資 > 0 AND 薪資
3Com Switch 4500 切VLAN教學.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
倫理準則:機密性. Confidentiality By: Angela Lo. 倫理準則:機密性. Confidentiality 醫護人員有更多的機會接觸病患的隱私。 隱私包括兩方面︰一是病患的身體,另一 是有關病患的機密的訊息。 醫護人員有更多的機會接觸病患的隱私。 隱私包括兩方面︰一是病患的身體,另一.
建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
例外處理. 內 容 大 綱 例外的產生 捕捉例外 丟出例外 例外的產生 (1/4) 一般常見的執行時期錯誤包括整數除法分母為 0(divide by zero) ,陣列索引值越限 (array index out of range) ,輸入輸出錯誤 (I/O error) 、檔案 不存在或無法存取.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Monte Carlo Simulation Part.2 Metropolis Algorithm Dept. Phys. Tunghai Univ. Numerical Methods C. T. Shih.
長訊科技 EVRCOM Voice Mail System 使用者操作說明及流程. 自動總機 -- 來電語音轉接服務流程 ( 範例流程 )
具備人臉追蹤與辨識功能的一個 智慧型數位監視系統 系統架構 在巡邏模式中 ,攝影機會左右來回巡視,並 利用動態膚色偵測得知是否有移動膚色物體, 若有移動的膚色物體則進入到追蹤模式,反之 則繼續巡視。
Introduction to Java Programming Lecture 15 Objects and Classes.
Chapter 13 塑模靜態觀點:物件圖 Static View : Object Diagram.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
第 5 章 深入 Response 物件 製作. 網頁的轉向與強制輸出 - 讓網頁轉彎的 Redirect 敘述 運用 Response 物件的 Redirect 方法,將瀏覽器顯 示的網頁,導向至其他網頁,語法如下: Response.Redirect 網頁路徑與名稱 此網頁路徑與名稱  若是導向到同一台.
:Problem D: Bit-wise Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10232: Problem D: Bit-wise Sequence 解題者:李濟宇 解題日期: 2006 年 4 月 16.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
3-3 使用幾何繪圖工具 Flash 的幾何繪圖工具包括線段工具 (Line Tool) 、橢圓形工具 (Oval Tool) 、多邊星形 工具 (Rectangle Tool) 3 種。這些工具畫出 來的幾何圖形包括了筆畫線條和填色區域, 將它們適當地組合加上有技巧地變形與配 色, 不但比鉛筆工具簡單,
Chapter 20 塑模動態觀點:狀態圖 Statechart Diagram. 學習目標  說明狀態圖的目的  定義狀態圖的基本記號  展示狀態圖的建構  定義活動、內部事件及遞延事件的狀態 圖記號.
圖層的操作與管理 圖層的作用就如同一張張透明的賽璐璐片, 你可以將動畫中的每項物件, 放置在不同圖 層中, 圖層交疊就形成完整的畫面。在各圖 層中的物件, 做任何的移動或變化, 都不會 相互干擾, 所以當你編輯一個物件時, 只要 在物件所在的圖層進行操作, 將可大幅降低 製作過程的複雜度與難度。
Ubiquitous News(Unews) 的設計與實作 指導教授:黃毅然 教授 學生:葉雅琳 系別:資訊工程學系.
CH.8 偵錯 Visual Basic CH.8 偵錯 Visual Basic  資三甲   章乃云 三種類型的錯誤 三種類型的錯誤.
第三章 自動再裝載運用篇 使用時機:裝載計劃完成時,尚有剩餘空 間的情形,維持已固定計劃而繼續做裝載 最佳化。以支持次日裝載計劃而提前調整 作業模式。 裝載物品設定和裝載容器設定如前兩章介 紹,於此不再重複此動作,直接從裝載計 劃設定開始,直接從系統內定的物品和容 器選取所需.
Fugacity Coefficient and Fugacity
JAVA 程式設計與資料結構 第八章 GUI Introduction I. GUI  使用 java.swing 的 package 來設計視窗介 面,我們稱之為 Graphic User Interface(GUI) 。  在設計 GUI 的時候,需要 import javax.swing.*;
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
資料結構實習-一 參數傳遞.
6-2 認識元件庫與內建元件庫 Flash 的元件庫分兩種, 一種是每個動畫專 屬的元件庫 (Library) ;另一種則是內建元 件庫 (Common Libraries), 兩者皆可透過 『視窗』功能表來開啟, 以下即為您說明。
Dynamic Multi-signatures for Secure Autonomous Agents Panayiotis Kotzanikolaou Mike Burmester.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
公用品.  該物品的數量不會因一人的消費而受到 影響,它可以同時地被多人享用。 角色分配  兩位同學當我的助手,負責:  其餘各人是投資者,每人擁有 $100 , 可以投資在兩種資產上。  記錄  計算  協助同學討論.
Management Abstracts Retrieval System; MARS 檢索操作.
第 9 章 TSR 程式基本教練. 本章提要 TSR 程式 以熱鍵 (Hot key) 叫用 TSR 程式 Clock 中斷 int 08h 、 int 1ch DOS reentrant 的問題 有用的 TSR 程式.
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
資料結構實習-二.
逆向選擇和市場失調. 定義  資料不對稱 在交易其中,其中一方較對方有多些資料。  逆向選擇 出現在這個情況下,就是當買賣雙方隨意在 市場上交易,與比較主動交易者作交易為佳 。
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
Chapter 10 m-way 搜尋樹與B-Tree
第12章 多重表單與模組的應用程式 12-1 VB.NET的方案與專案 12-2 模組化VB.NET應用程式 12-3 多重表單的應用程式
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
Inheritance and Polymorphism
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
INTRODUCTION TO MATLAB SHAWNNTOU. What Is MATLAB? MATLAB® is a high-performance language for technical computing. MATLAB® is a high-performance language.
: Wine trading in Gergovia ★★☆☆☆ 題組: Contest Volumes with Online Judge 題號: 11054: Wine trading in Gergovia 解題者:劉洙愷 解題日期: 2008 年 2 月 29 日 題意:在 Gergovia.
Introduction to Java Programming Lecture 12 Method Benefits, Declaring, and Calling Methods.
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
Visual C++重點複習.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
What is static? CS340100, NTHU Yoshi. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1;
Microsoft Excel.
Introduction to Java Programming Lecture 16 Super and Sub Classes.
J2ME 組員 : 巫明遠 葉秀鑾 張馨文.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
1 Chemical and Engineering Thermodynamics Chapter 1 Introduction Sandler.
VHDL語法(3).
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
節能轉接插座 認知科學研究所陳啟彰. 設計緣起 不使用的電器如未將插頭拔除, 仍會有少量的電力損耗,這類的 電力損耗稱之為待機損耗 (stand- by loss) 。 不使用的電器如未將插頭拔除, 仍會有少量的電力損耗,這類的 電力損耗稱之為待機損耗 (stand- by loss) 。 家庭用電中,待機損耗約佔總耗.
Presentation transcript:

> Polymorphism

Polymorphism - 2 多型的功能 多型提供了「介面與實作分離」的一個重 要性,能將 what (是什麼)自 how (怎麼 做)之中抽離。 多型( polymorphism )除去型別之間的耦 合關係。

Polymorphism - 3 向上轉型( Upcasting ) 「將某個 object reference 視為一個 reference to base type 」的動作,稱為「向 上轉型( upcasting )」。

Polymorphism - 4 // Department.java class Person { public void print() { System.out.println(“Person.”); } } class Instructor extends Person { public void print() { System.out.println(“Instructor.”); } class Student extends Person { public void print() { System.out.println(“Student.”); } } public class Department { public static void describe(Person p) { // 不變的事物 p.print(); } public static void main(String[] args) { Instructor i = new Instructor(); Student s = new Student(); // Upcasting describe(i); // Instructor. describe(s); // Student. }

Polymorphism - 5 // Department2.java class Person { public void print() { System.out.println(“Person.”); } } class Instructor extends Person { public void print(){ System.out.println(“Instructor.”); } class Student extends Person { public void print() { System.out.println(“Student.”); } } public class Department2 { public static void describe(Person p) { p.print(); } public static void describe(Instructor i) { i.print(); } public static void describe(Student p) { p.print(); } public static void main(String[] args) { Instructor i = new Instructor(); Student s = new Student(); // No upcasting describe(i); // Instructor. describe(s); // Student. }

Polymorphism - 6 // dir:X.java package dir; public class X { public void print() { printHeader(); printName(); printFooter(); } private void printHeader() { System.out.println("==="); } private void printFooter() { System.out.println("***"); } protected void printName() { System.out.println(" X "); } // dir:Y.java package dir; public class Y extends X { protected void printName() { System.out.println(" Y "); } // Main.java public class Main { public static void main( String[] args) { // Upcasting X x = new Y(); x.print(); } === Y *** 執行結果:

Polymorphism - 7 Method-call 繫結方式 所謂「繫結( binding )」,就是建立 method call 和 method body 的關聯。 Java 函式透過後期繫結達到多型性。 後期繫結( late binding ):繫結動作在執行期根據 object 的型別而進行。後期繫結也被稱為執行期繫結 ( run-time binding )或動態繫結( dynamic binding )。 後期繫結,必須具備「得以在執行期判知 object 型別」 並「呼叫其相應之 methods 」的機制。

Polymorphism - 8 final Method Call Java 的所有 methods ,除了被宣告為 final 者,皆使用後期繫結。 為什麼會想將某個 method 宣告為 final 呢? 防止其他人覆寫該 method 。 「關閉」動態繫結,告訴編譯器:動態繫結是 不需要的。

Polymorphism - 9

Polymorphism - 10 // Shapes.java // Polymorphism in Java. import java.util.*; class Shape { void draw() {} } class Circle extends Shape { void draw() { System.out.println("Circle.draw()"); } } class Square extends Shape { void draw() { System.out.println("Square.draw()"); } } class Triangle extends Shape { void draw() { System.out.println("Triangle.draw()"); } // 接下頁

Polymorphism - 11 // A "factory" that randomly creates shapes: class RandomShapeGenerator { private Random rand = new Random(); public Shape next() { switch(rand.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } // 接下頁

Polymorphism - 12 public class Shapes { private static RandomShapeGenerator gen = new RandomShapeGenerator(); public static void main(String[] args) { Shape[] s = new Shape[9]; // Fill up the array with shapes: for (int i = 0; i < s.length; i++) s[i] = gen.next(); // Make polymorphic method calls: for (int i = 0; i < s.length; i++) s[i].draw(); } } ///:~

Polymorphism - 13 Abstract Classes 和 Abstract Methods 所謂 abstract class 是一種本身不能被具 現化 (instantiated) 的 class ,但允許為其內 宣告的函式提供實作碼。 如果你打算宣告一個 class 卻只提供部分實 作, abstract class 就可以一顯身手。

Polymorphism - 14 Abstract Classes 和 Abstract Methods (cont.) abstract class 中未曾實作的函式,稱為 abstract methods 。 任何一個「擴展 ( 繼承 ) abstract class 」的 derived class ,如果希望被視為 concrete class , 必須實作 abstract class 中的所有 abstract 函式。 如果某個 class 擴展 ( 繼承 ) 了某個 abstract class ,但未能提供所有 abstract 函式的實作 碼,那麼它依然是個 abstract class 。

Polymorphism - 15 abstract class TeamScores { private Team team; public abstract int player1Score(int holeNumber, Team team); public abstract int player1Score(int holeNumber, Team team); public abstract void store TeamScore(int score, Team team); // 接下頁

Polymorphism - 16 public void processBetterBallTeamScores( Team team) { int teamScore = 0; for (int i = 1; i <= 18; i++){ int p1Score = player1Score(i, team); int p1Score = player2Score(i, team); if (p1Score < p2Score) teamScore = p1Score; else teamScore = p2Score; storeTeamScore(teamScore, team); }

Polymorphism - 17 class Result extends TeamScores { public int player1Score(int holeNum, Team team){ int score; // score = lookup holeNum score for player1 on // given team return score; } public int player2Score(int holeNum, Team team){ int score; // score = lookup holeNum score for player2 on // given team return score; } public void storeTeamScore(int score, Team team){ // Store score for team }