2008年11月22日 星期六

[Head First OOAD] 諸行無常(良好設計) & 給你的軟體 30 分鐘的伸展操(彈性的軟體) 1/2

  1. 抽象類別是實作類別的 placeholder。

  2. 抽象類別定義行為,而其子類別實做該行為。

  3. 每當在兩個或兩個以上的地方找到共同行為時,小心將該行為抽取到一個類別裡,然後以此共同類別,重利用這項行為。

    以下使用書中分析設計範例來說明

    原本的設計

    OringinalClassDiagram.PNG

    為了增加曼陀林(Mandolin,一種與 Guitar 性質差不多的樂器)的支援,於是將 Mandolin 與 Guitar 的共用特性抽取出來,變成以下的設計
    Design01.PNG

    然而,既然 Guitar 有 GuitarSepc,當然 Mandolin 也要有自己的 MandolinSpec 囉!
    Design02.PNG

    現在有了 GuitarSpec 與 MandolinSpec,下一個步驟要做的就是將兩者的共同特性給抽取出來成為一個獨立的 class
    Design03.PNG

    重新設計之後,成功了加入對 Mandolin 的支援,以下是完整的設計圖
    Design04.PNG


  4. 要看看軟體是否設計良好的最佳方式之一,是試著改變它。

  5. 什麼是介面(interface) ?
    此程式概念具有兩種角色:
    (1) 定義要應用在多個型別上的行為
    (2) 作為使用那些型別之類別在使用時的焦點

  6. 對介面(interface)撰寫程式碼,而不是對實作;這會讓你的軟體更容易被擴展。

  7. 透過對介面(interface)撰寫程式碼,你的程式碼將可以使用該介面的所有子類別 - 甚至那些還沒有被建立的子類別。
    Interface01.PNG
    Interface02.PNG
  8. 什麼是封裝(encapsulation) ?
    在防止更多維護問題上,它是當仁不讓的,超過史上任何其他 OO 原則。做法是:透過讓物件行為變化所需的改變「區域化」。

  9. 封裝可以幫助你保護類別免於不必要的改變,因此應該要將總是變化之物封裝起來。
    Encapsulation01.PNG
    Encapsulation02.PNG


  10. 什麼是變更(change) ?
    每個類別都應該試圖確保這件事的發生只有一個理由,這件事代表許多設計不良的軟體片段之死。

  11. 應用程式中的每一個類別只有一個理由改變
    Change01.PNG
    Change02.PNG

沒有留言:

張貼留言