編程是 程序 員 用特定的語法+數據結構+算法組成的代碼來告訴計算機如何執行任務的過程 , 一個程序是程序員爲了獲得一個任務結果而編寫的一組指令的集合,正所謂條條大路通羅馬,實現一個任務的方式有不少種不一樣的方式, 對這些不一樣的編程方式的特色進行概括總結得出來的編程方式類別,即爲編程範式。 不一樣的編程範式本質上表明對各類類型的任務採起的不一樣的解決問題的思路, 大多數語言只支持一種編程範式,固然也有些語言能夠同時支持多種編程範式。 兩種最重要的編程範式分別是面向過程編程和面向對象編程。python
面向過程又被稱爲top-down languages, 就是程序從上到下一步步執行,一步步從上到下,從頭至尾的解決問題 。基本設計思路就是程序一開始是要着手解決一個大的問題,而後把一個大問題分解成不少個小問題或子過程,這些子過程再執行的過程再繼續分解直到小問題足夠簡單到能夠在一個小步驟範圍內解決。程序員
舉個典型的面向過程的例子, 數據庫備份, 分三步,鏈接數據庫,備份數據庫,測試備份文件可用性。算法
def db_conn(): print("connecting db...") def db_backup(dbname): print("導出數據庫...",dbname) print("將備份文件打包,移至相應目錄...") def db_backup_test(): print("將備份文件導入測試庫,看導入是否成功") def main(): db_conn() db_backup('my_db') db_backup_test() if __name__ == '__main__': main()
這樣作的問題也是顯而易見的,就是若是你要對程序進行修改,對你修改的那部分有依賴的各個部分你都也要跟着修改, 舉個例子,若是程序開頭你設置了一個變量值 爲1 , 但若是其它子過程依賴這個值 爲1的變量才能正常運行,那若是你改了這個變量,那這個子過程你也要修改,假如又有一個其它子程序依賴這個子過程 , 那就會發生一連串的影響,隨着程序愈來愈大, 這種編程方式的維護難度會愈來愈高。
因此咱們通常認爲, 若是你只是寫一些簡單的腳本,去作一些一次性任務,用面向過程的方式是極好的,但若是你要處理的任務是複雜的,且須要不斷迭代和維護 的, 那仍是用面向對象最方便了。數據庫
OOP(Object-Oriented Programming)編程是利用「類」和「對象」來建立各類模型來實現對真實世界的描述,使用面向對象編程的緣由一方面是由於它可使程序的維護和擴展變得更簡單,而且能夠大大提升程序開發效率 ,另外,基於面向對象的程序可使它人更加容易理解你的代碼邏輯,從而使團隊開發變得更從容。編程
一個類便是對一類擁有相同屬性的對象的抽象、藍圖、原型。在類中定義了這些對象的都具有的屬性(variables(data))、共同的方法。數據結構
一個對象便是一個類的實例化後實例,一個類必須通過實例化後方可在程序中調用,一個類能夠實例化多個對象,每一個對象亦能夠有不一樣的屬性,就像人類是指全部人,每一個人是指具體的對象,人與人以前有共性,亦有不一樣。編程語言
在類中對數據的賦值、內部調用對外部用戶是透明的,這使類變成了一個膠囊或容器,裏面包含着類的數據和方法。 函數式編程
封裝的做用:函數
一個類能夠派生出子類,在這個父類裏定義的屬性、方法自動被子類繼承。測試
經過父類-->子類的方式以最小代碼量的方式實現,不一樣角色的共同點和不一樣點的同時存在。
多態是面向對象的重要特性,簡單點說:「一個接口,多種實現」,指一個基類中派生出了不一樣的子類,且每一個子類在繼承了一樣的方法名的同時又對父類的方法作了不一樣的實現,這就是同一種事物表現出的多種形態。
編程其實就是一個將具體世界進行抽象化的過程,多態就是抽象化的一種體現,把一系列具體事物的共同點抽象出來, 再經過這個抽象的事物, 與不一樣的具體事物進行對話。
對不一樣類的對象發出相同的消息將會有不一樣的行爲。好比,你的老闆讓全部員工在九點鐘開始工做, 他只要在九點鐘的時候說:「開始工做」便可,而不須要對銷售人員說:「開始銷售工做」,對技術人員說:「開始技術工做」, 由於「員工」是一個抽象的事物, 只要是員工就能夠開始工做,他知道這一點就好了。至於每一個員工,固然會各司其職,作各自的工做。
多態容許將子類的對象看成父類的對象使用,某父類型的引用指向其子類型的對象,調用的方法是該子類型的方法。這裏引用和調用方法的代碼編譯前就已經決定了,而引用所指向的對象能夠在運行期間動態綁定。
對於編程語言的初學者來說,OOP不是一個很容易理解的編程方式,你們雖然都按老師講的都知道OOP的三大特性是繼承、封裝、多態,而且你們也都知道了如何定義類、方法等面向對象的經常使用語法,可是一到真正寫程序的時候,仍是不少人喜歡用函數式編程來寫代碼,特別是初學者,很容易陷入一個窘境就是「我知道面向對象,我也會寫類,但我依然沒發如今使用了面向對象後,對咱們的程序開發效率或其它方面帶來什麼好處,由於我使用函數編程就能夠減小重複代碼並作到程序可擴展了,爲啥子還用面向對象?」。 對於此,我我的以爲緣由應該仍是由於你沒有充分了解到面向對象能帶來的好處,今天我就寫一篇關於面向對象的入門文章,但願能幫你們更好的理解和使用面向對象編程。
不管用什麼形式來編程,咱們都要明確記住如下原則: