面向對象中接口的理解

前言

1.這篇文章僅限于對php的面向對象進行說明,其他語言的情況不再考慮之列。
2.本人學生,難免有不足之處,希望各位大神指出。


正文

要理解接口,就要先理解面向對象編程的含義。在php這一門語言中,面向對象編程可以理解為將一個大的復雜的程序,拆分為小的,可以任意組合的部分,然后最終組合起來形成可運行程序的過程。在這樣一種過程中,每一個小的模塊擁有自己的方法和屬性,只有少數的方法和屬性是外部可見的,對于大多數的屬性,往往只是提供getset方法對其進行獲得和修改,而不直接在外部進行調用。這就好比人去開車,人只知道怎么使用方向盤、變速器和剎車油門,人不可能直接去轉動發(fā)動機讓車動起來。


正確理解接口

如果說能夠理解上面的人開車的例子,那么理解接口就容易了。接口實際上指的是一個類暴露在外部的可以使用的內容,這個內容包括了可以調用的方法和屬性。而書寫接口就是告訴別人我寫的這個類怎么用,有哪些可以使用的方法和可以調用的屬性。把車這個類寫一個接口就可能有

interface car 
{
    // 當前速度
    public $currentSpeed;
    // 方向盤
    public function wheel($direction); 
    // 換檔
    public function shift($shift);
    // 油門
    public function speedUp();
    // 剎車
    public function slowDown();
}```
實際上在寫接口的時候,所有的屬性和方法以及常量都有一個特點,它們都是`public`的,也就是說它們可以被外部訪問,這也恰恰符合了接口的理解,接口是外部可訪問的內容的集合。對于`protected`和`private`這些關鍵字修飾的方法屬性,外部不可訪問,也就沒有在接口中書寫的意義,自然你在接口中寫入這些內容會讓程序崩潰。如果用剛才車的例子來解釋就是,我們只關心車怎么開(類如何使用),而車由什么組成(類的功能如何實現)我們并不關心。
***
####正確書寫接口
但是接口是不是寫的如同上面那樣就可以了呢?答案是否定的,僅僅告訴別人我的方法的名字和它所需要的參數遠遠不夠。這就好比于給了別人一個按鈕,卻不告訴別人按下去的后果。php是一門弱語言,在7.0.*之前的版本沒有返回值類型的檢查,所以為了兼容我們一般用注釋的方式補全這一點缺陷

interface car
{
// 獲得當前速度
// 返回一個浮點數表示速度
public $currentSpeed;

// 方向盤 改變車的行駛方向
// 0左,1右,返回空值
public function wheel($direction); 

// 換檔 改變速度倍率
// 參數為1-5的整數,返回為空
public function shift($shift); //

// 油門 進行加速
// 返回為空
public function speedUp();

// 剎車 進行減速
// 返回為空
public function slowDown();

}```
現在這個接口就完全多了。


總結

使用接口的時候,要充分理解接口的含義,不要僅僅為了寫一個接口而寫一個接口,這樣沒有意義。最好的辦法就是把書寫接口當作寫一份產品說明書,這樣寫出來的接口才真正有用,后期代碼的重用率才更高。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數據交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,160評論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評論 25 708
  • 像小學生一樣的總結,而他媽的我已經是一個研究生了。。 果然是華麗麗的分割線,這個編輯器感覺還挺好用的樣子,真的嗎 ...
    趙航閱讀 257評論 0 2
  • 秋天瑟瑟向我走來 我拿出準備好的書信 將脈脈溫情來讀與它聽
    夜子未央閱讀 219評論 0 3