OOP-對介面作設計programming to an interface, not an implementationETREX2011.04.18http://etrex.blogspot.com/
什麼是介面?what
程式設計師認為的介面
程式設計師認為的介面
Google 圖片認為的介面
Google 圖片認為的介面
var USB插槽1: USB設備=newUSB滑鼠();我認為的介面是一種工業標準
var USB插槽1: USB設備=newUSB滑鼠();公的是介面實作者
var USB插槽1: USB設備=newUSB滑鼠();母的是介面使用者
public classPS2轉USB接頭 implementsPS2設備{public varusb插槽:USB設備;}雌雄同體!!!
public class延長線implements電器{public var插槽1:電器;public var插槽2:電器;public var插槽3:電器;public var插槽4:電器;}雌雌雌雌雄同體!!!
何時使用介面?when
程式碼重用的關鍵在於介面設計 reuse一體成型 : 電視螢幕壞了零組件化 : 電腦螢幕壞了??公
可以滿足未來需求嗎? 可抽換嗎?new requirement  電腦外接USB設備Firefox外掛母母
如何設計一個好介面?how
介面的修改通常會造成大問題O向下相容:USB2.0 -> USB3.0非向下相容 :AS2.0 -> AS3.0Office2003 -> Office2007改了就得重寫(學)X
良好的介面通常有多個實作OS: 能不能多工Interface: 能不能多公JOKEXD
包裝未來需求公新需求交給新的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
你已經學會的一些設計模式
public classPS2轉USB接頭 implementsPS2設備{public varusb插槽:USB設備;}Adaptor Pattern
public class延長線implements電器{public var插槽1:電器;public var插槽2:電器;public var插槽3:電器;public var插槽4:電器;}Composite Pattern
MySQL主程式MSSQL統一存取資料的方法新需求Data Access Object(DAO)Pattern
把函數(程式碼)當變數var state : String = “init”;var state : 滑鼠行為= new Init滑鼠行為();Strategy Pattern
最近在寫的程式
ETREX大大講的我聽不懂 怎麼辦?Design Pattern是包裝需求的典範
謝謝大家Q & A

Oop 對介面作設計