眾所周知,物件導向三大思想:封裝,繼承,多型。
但物件導向到底是怎麼產生的,產生他的原因是什麼呢?且聽我慢慢道來~
很久以前,軟體開發的世界還是一片渾渾噩噩,不管開發什麼軟體都面臨著複雜性這個問題,**裡面到處是goto語句,程式的流程隨意跳轉。眾生寫**時,越寫到後面越不知道自己寫的是什麼。這時候出現一位巨人,他就是結構化程式設計。
結構化程式設計的基本思想是:有序地控制流程,即把程式的執行順序限制為順序、分支和迴圈這三種;把共通的處理歸結為例程(函式)。好處是:
三大限制:大大降低了程式的自由度,減少了各種組合,使得程式不至於太過複雜。疑問:如果由於降低程式的自由度導致程式的實現能力低下,那就得不償失了。對於這一點,結構化程式設計的順序、分支和迴圈可以實現一切演算法,雖然降低了程式的複雜性和靈活性,但是程式的實現能力並沒有降低。
例程(函式):我們只需要知道過程(函式)的名字,而不需要知道過程的內部細節,即「黑盒化」。
雖然結構化解決了程式控制流的複雜問題,但程式裡面不僅包括控制結構,還包括要處理的資料。隨著處理資料的增加,程式的複雜性也會上公升。這時候,物件導向程式設計來了!
「分別管理程式處理內容和處理資料物件所帶來的複雜性」問題是,為了得到正確的結果,必須保持處理和資料的一致性,這在結構化程式設計中是非常困難的,解決這一問題的方案就是資料抽象技術。
資料抽象是資料和處理方法的結合。這便是最初「物件」一詞的得來。物件導向程式設計也因此得名。
然後,從抽象原則來說,多個相同事物出現時,應該組合在一起,即dry原則(don't repeat yourself),便又引出了類這一概念。
根據資料型別來進行合適的處理(呼叫合適的方法),本來就應該是程式語言這種工具應該完成的事。這便是多型的引出了。
而對於繼承,大部分的觀點是「繼承是隨著程式的結構化和抽象化自然進化而來的一種方式」。結構化和抽象化,意味著把共通部分提取出來生成父類的自底向上的方法。(如果繼承是這樣誕生的話,那麼最初,有多個父類的多重繼承就會成為主流,而實際上最初引入繼承的simula語言只提供單一繼承。松本行弘認為繼承的原本目的實際是逐步細化)
以上便是摘自《松本行弘的程式世界》的一些觀點,不知各位看官怎麼理解物件導向?
UML與物件導向的前世今生
前面講了物件導向的概念,相信大家對物件導向有了一定的認識,這裡我們再來嘮一嘮uml的前世今生 從20世紀70年代,隨著物件導向程式設計思想的興起,大家越來越發現原來以結構化的面向過程的分析設計方法沒辦法推導和指導物件導向程式設計,面向過程的分析設計還是第一步做什麼,第二步做什麼,但是物件導向卻是以看...
物件儲存的前世今生
那些沒有為資料庫或檔案系統寫過 的上了年紀的程式設計師應該不太可能讀到這篇文章。畢竟,一般商業應用程式訪問其他資料型別的模式已經存在超過40年了。因此,代表著第乙個主要的新型資料結構型別的物件儲存,它在兩代的時間裡對資料管理實踐產生了顯著影響。物件的實現始於上世紀90年代末,但多數是特殊應用。大規模...
物件導向思想的三大特徵
封裝性 繼承性 多型性 二 繼承性 問題 為什麼有繼承這個概念?例如我們建立乙個學生類 student 教師類 teacher 家長類 parent 這三個類中都會有的屬性 姓名 年齡 性別等等 這三個類中都會有的方法有 走路 吃飯 睡覺等等。如果建立完成這三個類,那麼這些重複的屬性和方法就會重複,...