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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## [復用](https://lingcoder.gitee.io/onjava8/#/book/01-What-is-an-Object?id=%e5%a4%8d%e7%94%a8) ? 一個類經創建和測試后,理應是可復用的。然而很多時候,由于程序員沒有足夠的編程經驗和遠見,我們的代碼復用性并不強。 ? 代碼和設計方案的復用性是面向對象程序設計的優點之一。我們可以通過重復使用某個類的對象來達到這種復用性。同時,我們也可以將一個類的對象作為另一個類的成員變量使用。新的類可以是由任意數量和任意類型的其他對象構成。這里涉及到“組合”和“聚合”的概念: ? * **組合**(Composition)經常用來表示“擁有”關系(has-a relationship)。例如,“汽車擁有引擎”。 * **聚合**(Aggregation)動態的**組合**。 ? ![UML-example](https://lingcoder.gitee.io/onjava8/images/1545758268350.png) ? 上圖中實心三角形指向“**Car**”表示**組合**的關系;如果是**聚合**關系,可以使用空心三角形。 ? (**譯者注**:組合和聚合都屬于關聯關系的一種,只是額外具有整體-部分的意義。至于是聚合還是組合,需要根據實際的業務需求來判斷。可能相同超類和子類,在不同的業務場景,關聯關系會發生變化。只看代碼是無法區分聚合和組合的,具體是哪一種關系,只能從語義級別來區分。聚合關系中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。再者,多個整件可以共享同一個部件。組合關系中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且,多個整件不可以同時共享同一個部件。這個區別可以用來區分某個關聯關系到底是組合還是聚合。兩個類生命周期不同步,則是聚合關系,生命周期同步就是組合關系。) ? 使用“組合”關系給我們的程序帶來極大的靈活性。通常新建的類中,成員對象會使用`private`訪問權限,這樣應用程序員則無法對其直接訪問。我們就可以在不影響客戶代碼的前提下,從容地修改那些成員。我們也可以在“運行時"改變成員對象從而動態地改變程序的行為,這進一步增大了靈活性。下面一節要講到的“繼承”并不具備這種靈活性,因為編譯器對通過繼承創建的類進行了限制。 ? 在面向對象編程中經常重點強調“繼承”。在新手程序員的印象里,或許先入為主地認為“繼承應當隨處可見”。沿著這種思路產生的程序設計通常拙劣又復雜。相反,在創建新類時首先要考慮“組合”,因為它更簡單靈活,而且設計更加清晰。等我們有一些編程經驗后,一旦需要用到繼承,就會明顯意識到這一點。
                  <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>

                              哎呀哎呀视频在线观看