<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之旅 廣告
                ### Convert Procedural Design to Objects(將過程化設計轉化為對象設計) 你手上有一些代碼,以傳統的過程化風格(procedural style)寫就。 將數據記錄(data records)[9]變成對象,將行為分開,并將行為移入相關對象之中。 [9]譯注:這里所謂的記錄(record),是指像C struct 那樣的結構。 ![](https://box.kancloud.cn/2016-08-15_57b1b5e889c10.gif) **動機(Motivation)** 有一次,我們的一位客戶,在項目開始時,給開發者提出了兩條必須遵守的條件:(1)必須使用Java;(2)不能使用對象。 這讓我們忍俊不禁。盡管是面向對象語言,「使用對象」可遠不僅僅是「調用構造函數」而已。對象的使用也需要花時間去學習。往往你會面對一些過程化風格(procedural style)的代碼所帶來的問題,并因而希望它們變得更面向對象一些。 典型的情況是:class 中有著長長的過程化函數和極少的數據,以及所謂的「啞數據 對象」——除了數據訪問函數(accessors)外沒有其他任何函數。如果你要轉換的是一個純粹的過程化程序(procedural program),可能連這些東西都沒有。 我們并不是說絕對不應該出現「只有行為而幾乎沒有數據」的對象。在Strategy 模式中,我們常常使用一些小型的strategy 對象來改變宿主對象的行為,這些小型的strategy 對象就是「只有行為而沒有數據」。但是這樣的對象通常比較小,而且只有在我們特規需要靈活性的時候,才會使用它們。 **作法(Mechanics)** - 針對每一個記錄型別(record type),將它轉變為「只含訪問函數」的「啞數據對象』(dump data object )。 - 如果你的數據來自關系式數據庫(relational database),就把數據庫中的每個表(table)變成一個「啞數據對象」。 - 針對每一處過程化風格,將該處的代碼提煉到一個獨立class 中。 - 你可以把提煉所得的class 做成一個Singleton(單件;為了方便重新初始化),或是把提煉所得的函數聲明為static。 - 針對每一個長長的程序(procedure),實施Extract Method 及其他相關重構,將它分解。再以Move Method 將分解后的函數分別移到它所相關的啞數據類(dump data class)中。 - 重復上述步驟,直到原始中的所有函數都被移除。如果原始是一個完全過程化(purely procedural〕的class ,將它拿掉將大快人心。 **范例:(Example)** 第1章的范例很好地展示了Convert Procedural Design to Objects,尤其是第一階段(對statement() 函數的分解和安置)。完成這項重構之后,你就擁有了一個「聰明的」數據對象,可以對它進行其他種重構了。
                  <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>

                              哎呀哎呀视频在线观看