23. 企業級開發基礎4:物件導向

大牧莫邪發表於2017-05-22

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

0.寫在前面:關於類和物件那些事兒

有了類和物件的概念之後,我們開始逐步引入物件導向的概念 我們知道在程式中通過物件將屬於同一組的資料統一的管理起來,同時通過型別來定義我們專案中需要的資料型別,通過建立物件的方式來使用這些資料。

那麼接著上節課的內容,我們遇到了一下幾個問題 * 什麼時候需要定義型別? * 定義型別需要初始化什麼屬性?定義什麼方法? * 什麼時候通過型別來建立物件? * 建立好的物件,在專案中怎麼使用呢?

以上四個問題,就是我們要通過物件導向來解決的問題了

1. 物件導向

####1.1. 物件導向程式設計的由來

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


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


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


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


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

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

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

1.2. 物件導向程式設計的特徵

物件導向在實際專案開發中,為了更加符合人類的語言習慣和認識這個世界的思維方式,給這樣的程式設計新增了一些特殊的處理讓開發人員更加容易理解,同時提高了程式的健壯性、可擴充套件性和可維護性等

物件導向程式設計有三個最主要的特徵 * 封裝 * 繼承 * 多型

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

後續的課程中,會對物件導向的特徵進行詳細的介紹。

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

相關文章