<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 7.1.1 面向過程觀點 我們用一個簡單程序來說明傳統程序設計的思維方式。 【程序 7.1】eg7_1.py ``` x = 1 y = 2 z = x + y print z ``` 到目前為止,我們在編程時基本上都是這樣思考的:先用特定數據類型的常量或變量來 表示數據(如程序 7.1 中分別存入變量 x 和 y 的整數類型值 1 和 2),然后再利用合適的操作(如程序 7.1 中的加法運算“+”)按一定的步驟來處理數據。在這種思考方式下,數據和對 數據的操作被看作是分離的兩件事情:數據只是信息的表示,不表達任何操作,在程序中處 于“被動”地位;而對數據的操作在程序中則處于“主動”地位,是驅動程序實現特定功能 的力量。程序 7.1 可視為用操作“+”主動地去處理被動的數據 x 和 y,從而實現加法功能。 圖 7.1 以一個比喻來形象地展示這種觀點:數據與操作之間的關系正如心與箭的關系——沒 有丘比特的箭,兩顆心是不會彼此連結的。 ![](https://box.kancloud.cn/2016-02-22_56cafce3615bb.png) 圖 7.1 傳統觀點:數據與操作分離 在數據與操作分離的傳統觀點下,通常以算法過程的設計為主線來展開程序設計,故可稱為以過程為中心的程序設計。以求解一元二次方程的程序 3.6 為例,數據(系數 a、b、c) 明確后,需要精心設計的是處理這些數據的操作過程:先計算判別式 b2-4ac,然后根據判別 式的值判斷方程是否有解,有解的情況下再利用公式求解,最后輸出結果。 在以操作為中心的設計理念下,程序中的數據有時對整個操作過程都是公開的,可以被 操作過程中的每個步驟訪問、處理。例如,假設程序 7.1 的操作不是單一的加法,而是在加法操作(第 3 行)之后還有兩個操作: ``` w = x – y z = z * w ``` 可以看出,數據(x、y、z、w)對程序中所有的操作都是公開的。這時,程序中對數據的訪問不受任何控制,非常容易出現錯誤的操作。 當然,實際的應用程序不會像程序 7.1 這樣簡單。復雜程序中不但數據復雜,而且對數 據的操作也非常復雜,所有操作可能形成漫長而曲折的過程。為了應付操作過程的復雜性, 按照第 4 章所介紹的模塊化編程思想,可以將復雜操作過程組織成為若干個較小的模塊—— 函數,每個函數實現一個相對簡單的、單一的功能。例如下面這個“復雜”程序①: 【程序 7.2】eg7_2.py ``` def op1(a,b): return a * a - b * b def op2(a,b): return a ** b + b ** a x = 1 y = 2 z = 3 result1 = op1(x,y) result2 = op2(x,z) print result1 + result2 ``` 從一個更抽象的層次看,每個函數其實相當于一個操作。與程序 7.1 相比,程序 7.2 對 更多的數據(x、y、z)進行更復雜的操作:先執行 op1 操作,再執行 op2 操作,最后輸出結 果。無論是程序 7.1 的簡單操作“+”還是程序 7.2 的復雜操作“op1”、“op2”,它們都是“對 數據的操作”,仍然屬于“數據與操作相互分離”的思考方式,整個程序仍然是對數據按一定 順序執行操作的過程。 不過,作為高抽象級別操作的函數具有一定的訪問控制能力。函數就像一個提供某種功 能的黑箱,使用者需要的只是它的功能,并不需要知曉它內部是如何實現功能的。函數內部 處理的數據不是對整個程序都公開的數據,一個函數不能訪問另一個函數內部的數據。然而, 程序中仍然有一些全局數據是對所有操作(包括函數)公開的,仍然存在前述訪問控制問題, 例如程序 7.2 中的兩個函數 op1 和 op2 都在處理數據 x。 總之,不管程序是簡單還是復雜,不管操作是語句級的還是函數級的,傳統程序設計都 是按照數據與操作分離的觀點,以過程為中心展開程序設計的。在這種面向過程的編程范型 中,強調的是對數據的操作過程,程序員思考的主要問題是數據如何表示、對各數據執行什 么操作以及各操作的先后順序如何安排。當程序很復雜時,可以采用自頂向下設計和模塊化 設計方法,將使用低級別操作的復雜過程設計成使用高級別操作的簡單過程。 要指出的是,基于數據與操作分離觀點的面向過程編程具有其內在的局限性,在處理某 些復雜問題和系統時顯得不合適。例如,圖形用戶界面(GUI)程序②就不屬于“對給定數據, > ① 這個程序自然一點也不復雜,但不妨礙它可以用于說明復雜操作的問題。 > ② 詳見第 8 章。 按特定次序對數據進行操作,操作完畢程序即告結束”的程序執行模式。以 Word 程序為例, 當啟動 Word 打開文檔(即程序數據)之后,接下去對數據如何操作呢?Word 程序并不知道 該做什么,它只能等在那里。接下去用戶可能用鍵盤輸入文本,也可能用鼠標點擊菜單或工 具欄進行存盤或打印,總之用戶需要通過某種交互事件來告訴 Word 程序該如何操作數據, 一個操作完成后 Word 又進入等待狀態。可見,GUI 程序屬于“先建立一個圖形界面,然后 等待來自用戶的不可預知的事件發生;事件發生后才導致執行某些操作,事件處理完畢又回 到等待狀態”這樣一種程序執行模式,程序從啟動到結束的具體執行過程取決于事件發生的 順序,不像傳統程序那樣預定義了執行順序。 為了適應 GUI 程序這類沒有明確的預定義操作次序、靠不確定的事件來驅動的程序和系 統的開發,提高開發效率和質量,計算機科學家提出了一種新的觀點來看待數據與操作之間 的關系,即面向對象的觀點。
                  <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>

                              哎呀哎呀视频在线观看