<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## [抽象](https://lingcoder.gitee.io/onjava8/#/book/01-What-is-an-Object?id=%e6%8a%bd%e8%b1%a1) ? 所有編程語言都提供抽象機制。從某種程度上來說,問題的復雜度直接取決于抽象的類型和質量。這里的“類型”意思是:抽象的內容是什么?匯編語言是對底層機器的輕微抽象。接著出現的“命令式”語言(如 FORTRAN,BASIC 和 C)是對匯編語言的抽象。與匯編相比,這類語言已有了長足的改進,但它們的抽象原理依然要求我們著重考慮計算機的結構,而非問題本身的結構。 ? 程序員必須要在機器模型(“解決方案空間”)和實際解決的問題模型(“問題空間”)之間建立起一種關聯。這個過程既費精力,又脫離編程語言本身的范疇。這使得程序代碼很難編寫,維護代價高昂。同時還造就了一個副產業“編程方法”學科。 ? 為機器建模的另一個方法是為要解決的問題制作模型。對一些早期語言來說,如 LISP 和 APL,它們的做法是“從不同的角度觀察世界”——“所有問題都歸納為列表”或“所有問題都歸納為算法”。PROLOG 則將所有 問題都歸納為決策鏈。對于這些語言,我們認為它們一部分是“基于約束”的編程,另一部分則是專為 處理圖形符號設計的(后者被證明限制性太強)。每種方法都有自己特殊的用途,適合解決某一類的問題。只要超出了它們力所能及的范圍,就會顯得非常笨拙。 ? 面向對象的程序設計在此基礎上跨出了一大步,程序員可利用一些工具表達“問題空間”內的元素。由于這種表達非常具有普遍性,所以不必受限于特定類型的問題。我們將問題空間中的元素以及它們在解決方案空間的表示稱作“對象”(**Object**)。當然,還有一些在問題空間沒有對應的對象體。通過添加新的對象類型,程序可進行靈活的調整,以便與特定的問題配合。所以當你在閱讀描述解決方案的代碼時,也是在閱讀問題的表述。與我們以前見過的相比,這無疑是一種更加靈活、更加強大的語言抽象方法。總之,OOP 允許我們根據問題來描述問題,而不是根據運行解決方案的計算機。然而,它仍然與計算機有聯系,每個對象都類似一臺小計算機:它們有自己的狀態并且可以進行特定的操作。這與現實世界的“對象”或者“物體”相似:它們都有自己的特征和行為。 ? Smalltalk 作為第一個成功的面向對象并影響了 Java 的程序設計語言 ,*Alan Kay*總結了其五大基本特征。通過這些特征,我們可理解“純粹”的面向對象程序設計方法是什么樣的: ? > 1. **萬物皆對象**。你可以將對象想象成一種特殊的變量。它存儲數據,但可以在你對其“發出請求”時執行本身的操作。理論上講,你總是可以從要解決的問題身上抽象出概念性的組件,然后在程序中將其表示為一個對象。 > 2. **程序是一組對象,通過消息傳遞來告知彼此該做什么**。要請求調用一個對象的方法,你需要向該對象發送消息。 > 3. **每個對象都有自己的存儲空間,可容納其他對象**。或者說,通過封裝現有對象,可制作出新型對象。所以,盡管對象的概念非常簡單,但在程序中卻可達到任意高的復雜程度。 > 4. **每個對象都有一種類型**。根據語法,每個對象都是某個“類”的一個“實例”。其中,“類”(Class)是“類型”(Type)的同義詞。一個類最重要的特征就是“能將什么消息發給它?”。 > 5. **同一類所有對象都能接收相同的消息**。這實際是別有含義的一種說法,大家不久便能理解。由于類型為“圓”(Circle)的一個對象也屬于類型為“形狀”(Shape)的一個對象,所以一個圓完全能接收發送給"形狀”的消息。這意味著可讓程序代碼統一指揮“形狀”,令其自動控制所有符合“形狀”描述的對象,其中自然包括“圓”。這一特性稱為對象的“可替換性”,是OOP最重要的概念之一。 ? *Grady Booch*提供了對對象更簡潔的描述:一個對象具有自己的狀態,行為和標識。這意味著對象有自己的內部數據(提供狀態)、方法 (產生行為),并彼此區分(每個對象在內存中都有唯一的地址)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看