oop 對介面作設計
TRANSCRIPT
OOP- 對介面作設計programming to an interface, not an implementation
ETREX2011.04.18http://etrex.blogspot.com/
什麼是介面 ?what
程式設計師認為的介面
程式設計師認為的介面
Google 圖片認為的介面
Google 圖片認為的介面
var USB 插槽 1 : USB 設備 = new USB 滑鼠 ();
我認為的介面是一種工業標準
var USB 插槽 1 : USB 設備 = new USB 滑鼠 ();
公的是介面實作者
var USB 插槽 1 : USB 設備 = new USB 滑鼠 ();
母的是介面使用者
雌雄同體 !!!
public class PS2 轉 USB 接頭 implements PS2 設備{
public var usb 插槽 :USB 設備 ;}
雌雌雌雌雄同體 !!!
public class 延長線 implements 電器{
public var 插槽 1: 電器 ;public var 插槽 2: 電器 ;public var 插槽 3: 電器 ;public var 插槽 4: 電器 ;
}
何時使用介面 ?when
程式碼重用的關鍵在於介面設計 reuse
一體成型 : 電視螢幕壞了零組件化 : 電腦螢幕壞了 公
??
可以滿足未來需求嗎 ? 可抽換嗎 ?new requirement
電腦外接 USB 設備Firefox 外掛
母母
如何設計一個好介面 ?how
介面的修改通常會造成大問題
向下相容 : USB2.0 → USB3.0非向下相容 : AS2.0 → AS3.0 Office2003 → Office2007
改了就得重寫 ( 學 )
XO
良好的介面通常有多個實作
OS: 能不能多工Interface : 能不能多公 XD
JOKE
包裝未來需求
新需求交給新的 Class 解決 不用修改舊程式碼
舊程式碼可重用
公母母
一體成型的程式碼
母
公 未來需求
重構 refactoring
→
母
公 未來需求
用介面包裝未來需求
介面
母
公 未來需求
超強 super strong
以不變
應萬變
可是我不會包裝需求 怎麼辦 ?I can’t find the cut point
我覺得的步驟step
步驟 1 :先寫出一體成型的程式步驟 2 :找出相同之處和不同之處步驟 3 :把函數 ( 程式碼 ) 當變數
相同之處和不同之處
資料:相同的資料 不同的資料來源UI :相同的資料 不同的顯示方式應用程式:根據不同的狀態
滑鼠按下時有不同的行為
把函數 ( 程式碼 ) 當變數
var state : String = “init”;var state : 滑鼠行為 = new Init 滑鼠行為();
差異在爽度
Function onMouseDown(){ If(state ==“init”) { //do init } else if(state == ….) { }}
Function onMouseDown(){ // 超爽 state.onMouseDown();}
程式分層概念
分越多層 程式越慢類別越多 程式碼越多
相同的資料 不同的資料來源
主程式
MySQL
MSSQL
新需求
傳資料
相同的資料 不同的資料來源
主程式
MySQL
MSSQL
新需求
統一存取資料的方法
相同的資料 不同的顯示方式
主程式
表
圖
新需求
傳資料
相同的資料 不同的顯示方式
主程式
表
圖
新需求
統一顯示資料的方法
設計模式design pattern
你已經學會的一些設計模式
Adaptor Pattern
public class PS2 轉 USB 接頭 implements PS2 設備{
public var usb 插槽 :USB 設備 ;}
Composite Pattern
public class 延長線 implements 電器{
public var 插槽 1: 電器 ;public var 插槽 2: 電器 ;public var 插槽 3: 電器 ;public var 插槽 4: 電器 ;
}
Data Access Object(DAO) Pattern
主程式
MySQL
MSSQL
新需求
統一存取資料的方法
把函數 ( 程式碼 ) 當變數
var state : String = “init”;var state : 滑鼠行為 = new Init 滑鼠行為();
Strategy Pattern
最近在寫的程式
ETREX 大大講的我聽不懂 怎麼辦 ?
Design Pattern 是包裝需求的典範
謝謝大家Q & A