“面向對象三大思想”產生的前世今生


 

  眾所周知,面向對象三大思想:封裝,繼承,多態。

  但面向對象到底是怎么產生的,產生他的原因是什么呢?且聽我慢慢道來~

  很久以前,軟件開發的世界還是一片渾渾噩噩,不管開發什么軟件都面臨着復雜性這個問題,代碼里面到處是goto語句,程序的流程隨意跳轉。眾生寫代碼時,越寫到后面越不知道自己寫的是什么。這時候出現一位巨人,他就是結構化編程

  結構化編程的基本思想是:有序地控制流程,即把程序的執行順序限制為順序、分支和循環這三種;把共通的處理歸結為例程(函數)。好處是:

    三大限制:大大降低了程序的自由度,減少了各種組合,使得程序不至於太過復雜。疑問:如果由於降低程序的自由度導致程序的實現能力低下,那就得不償失了。對於這一點,結構化編程的順序、分支和循環可以實現一切算法,雖然降低了程序的復雜性和靈活性,但是程序的實現能力並沒有降低。

    例程(函數):我們只需要知道過程(函數)的名字,而不需要知道過程的內部細節,即“黑盒化”。

 

  雖然結構化解決了程序控制流的復雜問題,但程序里面不僅包括控制結構,還包括要處理的數據。隨着處理數據的增加,程序的復雜性也會上升。這時候,面向對象編程來了!

    “分別管理程序處理內容和處理數據對象所帶來的復雜性”問題是,為了得到正確的結果,必須保持處理和數據的一致性,這在結構化編程中是非常困難的,解決這一問題的方案就是數據抽象技術

 

    數據抽象是數據和處理方法的結合。這便是最初“對象”一詞的得來。面向對象編程也因此得名。

    然后,從抽象原則來說,多個相同事物出現時,應該組合在一起,即DRY原則(Don't Repeat Yourself),便又引出了類這一概念。

    根據數據類型來進行合適的處理(調用合適的方法),本來就應該是編程語言這種工具應該完成的事。這便是多態的引出了。

    而對於繼承,大部分的觀點是“繼承是隨着程序的結構化和抽象化自然進化而來的一種方式”。結構化和抽象化,意味着把共通部分提取出來生成父類的自底向上的方法。(如果繼承是這樣誕生的話,那么最初,有多個父類的多重繼承就會成為主流,而實際上最初引入繼承的Simula語言只提供單一繼承。松本行弘認為繼承的原本目的實際是逐步細化

 

以上便是摘自《松本行弘的程序世界》的一些觀點,不知各位看官怎么理解面向對象?

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM