面向對象的軟件設計

面向對象的軟件設計

理解複雜系統

  • 軟件的複雜性是一種常態。java

  • 系統越複雜就越容易崩潰算法

  • 軟件複雜性的幾個方面編程

    • 問題域的複雜設計模式

    • 管理開發過程的複雜性併發

    • 軟件中隨處可見的靈活性模塊化

    • 軟件是離散的,而現實是連續的設計

複雜系統的特質

  • 複雜系統每每以層次結構存在code

  • 相對本原對象

    • 使用哪些做爲系統的基礎組件比較隨意,取決於系統觀察者的判斷(系統對於每一個人的理解是不一樣的)
  • 分離關注排序

    • 組件內部的聯繫比組件間的聯繫更緊密(組件內的內聚性,組件間的耦合性 ,也就是高內聚,低耦合)
  • 共同模式

    • 層次結構一般只是由少數不一樣類型的子系統按照不一樣的組合和安排方式構成的 (設計模式)
  • 穩定的中間形式

    • 若是存在穩定的中間形式,從簡單系統到複雜系統的演變會更快

如何處理複雜系統

  • 分解
    • 算法分級(關注點在於順序)
    • 面向對象分解(關注點在於自身結構)
  • 使用抽象
  • 層次結構是很是重要的

什麼是面向對象

  • OOP(面向對象編程)

    重用性、靈活性、擴展性

  • OOD(面向對象設計)

    類圖、時序圖等

  • OOA(面向對象分析)

    構建真實世界模型

面向對象的幾大要素

  • 抽象
    • 提供清晰定義的概念邊界
  • 封裝
    • 封裝關注這些行爲的實現
    • 封裝提供信息隱藏
    • 系統的每一部分不該該依賴於其它部分的實現細節
    • 封裝的做用是分離抽象的概念及其實現
  • 模塊化
    • 減小複雜性
  • 層次化
    • 層次結構是抽象的一種分級或排序
    • 類結構和對象結構都屬於層次機構
  • 類型(次要)
    • 表達抽象概念
    • 類是類型的一種實現
    • 多態是動態類型和繼承相互做用的產物
    • 靜態類型,動態類型,弱類型,強類型
  • 併發(次要)
    • 每一個對象都是獨立運行的個體

什麼是對象

  • 對象具備狀態,定義良好的行爲和惟一標識符

對象的狀態

  • 對象的狀態包括對象的全部屬性
  • 對象狀態包括每一個屬性的當前值(動態的)

對象的行爲

  • 對象在狀態改變和消息傳遞方面的反應的方式(就是方法,,改變對象數據)
  • 一個對象的狀態表明瞭其行爲的累計效果(經過方法屢次調用後,最終造成的效果)
  • 對象能夠扮演多個不一樣的角色
  • 對象自動機
    • 主動對象
    • 被動對象

對象之間的聯繫

  • 關聯
    • 消息發送(一般是單向的)
  • 聚合
  • 關聯具備更鬆的耦合,聚合適合表現很強的總體和部分的關係

類的本質

  • 類是一個對象的本質和抽象
  • 類是一組對象,他們擁有共同行爲,結構和語義
  • 類是必要的,但非充分的

類之間的關係

  • 關聯

    • 客戶和銷售員
  • 繼承

    • is和a的關係,,,什麼是什麼 好比 白馬是一匹馬
    class User{
    
    }
    class AdminUser extends User{
    
    }
  • 聚合

    class Book{
        Author author;
    }
  • 依賴

    class Pay{
    
        public void pay(Money money){
            //一個類的方法使用到了別的類
            money.getCount();
        }
    }
    
    class Money{
        public void getCount(){
    
        }
    }

良好的設計品質

  • 低耦合(A的變更基本不影響B)
  • 高內聚
  • 完整性(保護抽象的所有有意義的功能)
  • 充分性(最小接口)
  • 基礎性

面向對象分類設計

  • 增量式,迭代式
  • 類和對象要處於正確的抽象層次
    • 類提高,類分解
  • 識別機制(設計模式)
    • 機制即模式
    • 機制是對象間的協做關係
    • 是一種動態行爲
相關文章
相關標籤/搜索