關於面向對象的深刻理解

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

從面向機器到面向對象

最開始的計算機程序編碼就是0101,程序員徹底要以機器的二進制思惟去思考問題;後來有了彙編只是編碼形式上有了變化,可是本質並無改變,程序員們的關注點仍是在於機器自己,程序員要對CPU、寄存器等硬件瞭如指掌;當C語言、COBOL等面向過程的語言橫空出世後,這是一次本質上的革命,把程序員從二進制的世界中解救了出來,終於可讓他們「像人同樣」去思考問題啦。程序員

此時程序員能夠專一於問題自己,理清解決問題的具體步驟,而後將之用程序語言講給計算機就能夠啦。對於單1、具體的問題不管其複雜與否,採用面向過程的語言均可以徹底hold住。這就如同流水線做業通常,環環相扣,問題複雜了無非就是工序多一些而已。可是隨着計算機硬件的發展,人們但願用計算機處理的事務也愈來愈多,業務邏輯也愈來愈複雜,此時再用面向過程的語言去實現如此紛亂的業務邏輯就有些難以招架了。就如同好多條生產流水線摻雜在了一塊兒,A線依賴B線上的一道工序,B線又依賴於C線的一道工序,而C線還和A線有着關聯,這樣雜亂的流水線普通主管看了確定會頭大。此時就須要面向對象的程序設計語言來大殺四方了。編程

面向對象這種設計思想更加適合對於現實世界的模擬,並以此來處理系統性問題。它再也不是以具體的點爲中心,而是着眼於整個面。用類抽象出一羣事物的共性,用接口定義好不一樣事物之間的交流規則,用繼承的方式讓同一類的事物也能夠千姿百態,用多態的方式讓千姿百態的事物也能夠整齊劃一。每一個程序員都是代碼世界的上帝,以面向對象的思想去設計整個世界的架構,以面向過程的思想去研究世界的每一株土木,方可達到一花一世界,一葉一菩提的境界。網絡

面向對象三劍客

物以類聚,人以羣分。——《戰國策·齊策三》架構

類是整個面向對象設計理論的基石,只有把類搞清楚搞明白了才能讓整個理論大廈有堅實的地基。ide

首先拋開程序設計,單從現實世界的角度來看:槍保衛祖國的人叫軍人,在工地上幹活的人叫工人,在高級寫字樓裏面辦公的人叫白領。對於每一類人,他們每一個個體都不相同,可是它們都有類似的特徵,因此咱們把他們歸爲的一類人。面向對象最根本的思想就是對於現實世界的模擬,用程序語言來表述業務邏輯。因此程序中的類能夠這樣理解:類是一組類似事物的統稱,是對他們共性的一種概括。 類具備屬性和方法,從軍人的角度來看他們所屬於的部隊、所駐守的地區……,這是軍人的屬性;他們可射擊、可擒拿……這是他們的方法。工具

實際上世間萬物皆可歸於一類,由於只要有類似點,就有依據把他們歸於一類。那應該如何來設計類呢?請記住這樣一句話:橫當作嶺側成峯,遠近高低各不一樣。角度決定見解,必定要結合具體需求,來考慮類的設計。編碼

類有屬性和方法,那麼如何劃分屬性和方法呢?這裏應該遵循極簡原則。即屬性原子化、方法單一化。屬性細化到不能再分割,方法只能作一件事。這樣可以最大化地解耦,知足系統的可拓展性與易修改性。spa

對象與抽象

對於類的認知清晰之後,對象就比較容易理解了。對象就是類的一個具體實例。以軍人爲例,黃繼光,邱少雲就是軍人這一類人當中一個具體的實例。設計

其實關於類和對象還能夠深刻探究一下,這個時候咱們先回歸於現實世界。中國的人不少,那麼黨和政府如何來組織管理咱們呢?首先不一樣的人有不一樣的職業,好比醫生、教師、軍人、工人等等。政府依據不一樣類別的職業制定出了不一樣的政策,好比軍人買票優先、教師遊覽一些景點免費。其實依據不一樣職業有不一樣治理策略是一種歸類更是一種抽象。orm

抽象的本質就是隔離干擾、總結共性、下降事物的複雜度,站在更高的角度去看待問題,從而更好地把控全局。因此類對於程序員來講是一種抽象的工具,讓咱們可以更好地全局把控整個項目,組織管理整個項目。

對於程序員來講,類是抽象的,對象是具體的,擁有了類就擁有了上帝視角,來俯瞰整個系統;擁有了對象就擁有的億萬子民,來進行勞動,創造價值。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

接口

「接口」這個詞是被濫用、亂用最多的術語了。拋開其餘的接口不談,這裏主要是說一下面向對象中的接口。若是隻看教科書上的定義,你很容易明白接口具體是什麼:

Java接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,所以這些方法能夠在不一樣的地方被不一樣的類實現,而這些實現能夠具備不一樣的行爲(功能)。—— 百度百科

可是光看這些冷冰冰的定義,卻很難讓人理解,尤爲是對新手來講,爲何要用到接口?接口本質做用是什麼?首先想一想有身邊哪些接口:Micro usb、Type-C、HDMI……,爲何要用到這些接口?由於手機要鏈接電源,顯示器要鏈接電腦……,從中咱們進行一次抽象總結:接口是兩種不一樣事物交互時的一個關卡,更是一組標準,定義了交互雙方所應該遵循的規則。從程序的角度來看:這種規則就是一組相關的功能點的集合。舉個栗子:目前有一個鼠標類,當某天咱們這個鼠標類的對象須要與主機類的對象進行交互時,此時就應該去實現一個叫USB的接口,方可進行交互。

從設計的角度來看:接口着眼於某種具體的功能,是一種規範與約束;類着眼於某一類事物的共性,是一種總結與抽象。

總結

類、對象、接口是面向對象這一編程思想的三大基石,僅僅明白課本上那冷冰冰的定義是遠遠不夠的,必須深刻了解其設計內涵,這樣在之後的工做項目中咱們才能遊刃有餘,達到手中無劍,心中有劍這一境界。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

*版權聲明:轉載文章和圖片均來自公開網絡,版權歸做者本人全部,推送文章除非沒法確認,咱們都會註明做者和來源。若是出處有誤或侵犯到原做者權益,請與咱們聯繫刪除或受權事宜。
相關文章
相關標籤/搜索