我與python約個會:23. 企業級開發基礎4:面向對象

本節課程,概念爲主~是爲了後面的所有的開發進行一個理論性的鋪墊,儘量總計的簡單易懂,希望大家能耐心看完。

0.寫在前面:關於類和對象那些事兒

有了類和對象的概念之後,我們開始逐步引入面向對象的概念
我們知道在程序中通過對象將屬於同一組的數據統一的管理起來,同時通過類型來定義我們項目中需要的數據類型,通過創建對象的方式來使用這些數據。

那麼接着上節課的內容,我們遇到了一下幾個問題
* 什麼時候需要定義類型?
* 定義類型需要初始化什麼屬性?定義什麼方法?
* 什麼時候通過類型來創建對象?
* 創建好的對象,在項目中怎麼使用呢?

以上四個問題,就是我們要通過面向對象來解決的問題了

1. 面向對象

1.1. 面向對象程序設計的由來


~編程語言的發展
程序設計這東西一開始出現,是按照人類的語言習慣,將盡量符合人類語言的語法結構來描述要實現的功能,然後通過各種軟件環境[XX語言編譯器、XX語言解釋器]將這樣符合人類語言的語法編譯或者解釋成計算機能認識和執行的語言去執行並實現功能的過程,於是出現了高級語言。


~面向過程的程序設計
高級語言出現之初,程序設計的思路,也是參考了人類解決問題的思路;
遇到一個問題,人類習慣性的思維方式是第一步做什麼、第二步做什麼、緊接着做什麼,這樣按照一定的步驟一直到實現最終想要的功能。
這樣的按照事情/功能的處理過程和步驟來進行程序的設計和開發的過程,是一種解決問題的思路,我們稱之爲:面向過程的程序設計


~ 面向過程程序設計的缺陷
面向過程的程序設計發展了一定的時間之後,我們發現出現了一個非常重要的問題,如果僅僅是處理某一個功能的流程而言非常適合,但是如果一旦涉及到業務過程比較複雜的系統來說的話,面向過程的思路設計的程序出現了大量的代碼冗餘、同時不同的功能之間的衝突隨着系統功能的增多衝突越來越多,另外當系統中的某些功能如果需要升級或者改動,會涉及到大量的代碼的修改和功能的影響造成維護的不方便


~正當對的時間,正當對的地點,我遇見了你:面向對象
這時候,一幫大佬們圍坐在一起,開始商量怎麼樣讓我們的程序更加適合開發結構完整、流程複雜的系統項目呢!
有人就提出了,我們的程序,其實一直都是在模擬符合正常人的思維邏輯習慣的,小功能的處理就像我們處理一件小事一樣,可以按照步驟進行處理,也就是按照面向過程的設計思路進行處理;
一個相對較大的系統的設計,就類似讓一個人當國家領導人,怎麼規劃國家的各個機構;或者讓一個人開一家公司,規劃公司的部門結構;或者就簡單的讓一個人管理自己的家庭,規劃家裏的房子、櫃子、桌椅板凳等等各種東西的歸置一樣;如果能做到這一點,符合正常人的思維習慣的程序設計思路不就出現了麼!!!


~ 人之初,性本善
面向對象,按照系統的需要,將系統中用到的各個數據封裝成獨立的對象,通過對象之間的互相協作,來完成一個功能的過程;成爲面向對象的程序設計。
簡單看一下面向對象程序設計的思路
實現這樣一個業務:我陪女朋友去看電影
* 面向過程的設計思路:
1~我待着女朋友出發;
2~到電影院選電影、選座、買2張票;
3~進放映廳,看電影;
4~看完電影,回家。

  • 面向對象的設計思路:
    1~抽取對象:我、女朋友、電影院
    2~抽取對象的屬性:我(看電影的行爲,買票的行爲),女朋友(看電影的行爲),電影院(賣票的行爲、放映電影的行爲)
    3~我[對象] 的<看電影>的方法中調用 女朋友[對象]的<看電影>的方法,然後調用我[對象]的<買票>的方法,在<買票>方法中調用電影院[對象]<賣票>的方法,最後完成我和女朋友看電影這個功能。

乍一看,面向對象怎麼這麼複雜,還是面向過程的程序簡單易懂
此時~如果小明和它女朋友也想去看電影,你會想象得到,上面的程序會出現什麼樣的問題
面向過程:重新編寫上面所有的代碼,來完成小明和它女朋友看電影的過程
面向對象:創建一個小明對象、創建一個小明女朋友對象,調用函數功能實現。
現在,想象一下面向過程那麼多代碼重複寫,想象一下創建一個對象的語法,那個更加簡單呢?

1.2. 面向對象程序設計的特徵

面向對象在實際項目開發中,爲了更加符合人類的語言習慣和認識這個世界的思維方式,給這樣的程序設計添加了一些特殊的處理讓開發人員更加容易理解,同時提高了程序的健壯性、可擴展性和可維護性等

面向對象程序設計有三個最主要的特徵
* 封裝
* 繼承
* 多態

這三個特徵主要含義如下:
1.封裝:將對象的敏感的信息封裝在對象的內部,不讓外界直接訪問,提高數據的安全性
2.繼承:通過繼承關係,梳理對象和對象之間的關係,同時提高了程序設計功能的強大的擴展性和代碼的複用性
3.多態:程序在運行過程中,實時根據不同的數據執行不同的處理邏輯展現不同的狀態,讓程序的功能更加的完善健壯

後續的課程中,會對面向對象的特徵進行詳細的介紹。

在實際項目開發中,面向對象程序設計肯定不會像上面描述的那樣來處理這樣的問題,不過對於新手來說理解上還是存在一定的難度的
古人說,殺雞焉用宰牛刀,同樣的,我們的面向過程/面向對象等等各種編程思想,也是根據實際項目處理的功能場景來進行操作的,切記不能一棍子打死就認定了面向對象比面向過程好或者反之。
比如:就是在頁面上打印一行信息或者處理一個簡單的功能流程,用面向對象寫了三五十行代碼沒有什麼太大的意義,用面向過程幾行代碼搞定就OK了;如果要開發一個完整的具有複雜業務處理的系統,此時就需要主要使用面向對象來進行設計開發,系統中的功能處理的細節之處還是使用面向過程進行處理;
所以~針對項目中的不同的功能場景,靈活使用學習過的編程思想纔是程序設計的王道,當你寫代碼積累項目開發經驗到一定程序,就不會再去思考面向過程面向對象的概念了,因爲你的經驗已經積累成你自己的開發思想,一個字~寫,就OK了。

發佈了89 篇原創文章 · 獲贊 16 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章