為提高軟體的開發效率,降低開發成本,一個優良的軟體系統應該具備以下特點:l 可重用性 減少重複代碼,避免重複編程l 可擴充性 不改變現有結構,方便添加新功能l 可維護性 使用者需求改變時,只要修改子系統的少量代碼即可軟體系統具備以上的特點,則軟體子系統應該具有以下特點:l 結構穩定l 可擴充性l 內聚性 內聚性會提高軟體可重用性和可維護性l 可組合性 可組合性提高軟體可重用性和可維護性l 松耦合性 提高軟體的可維護性
1.2 物件導向軟體開發方法簡介
物件導向開發方法把軟體系統看成各種對象的集合,對象是最小的子系統,一組相關的對象能夠組合成更複雜的子系統。 物件導向開發的優點:l 把軟體系統看成各種對象的集合,符合人類的思維方式l 軟體需求的變動往往是功能的變動,而功能的執行者-對象一般不會有大變化l 對象包括屬性和方法,對象把屬性和方法的具體實現封裝起來,提高了子系統的獨立性從而提高了軟體的可維護性l 支援封裝、抽象、繼承、多態,提高了軟體的可重用性,可擴充性,可維護性。 物件模型 建立物件模型包括自底向上的抽象過程和自頂向下的分解過程自底向上的抽象l 把問題領域中的事物抽象為具有特定屬性和行為的對象l 把具有相同屬性和行為的對象抽象為類l 多個類存在一些共性,把這些共性抽象到父類中。 自頂向下的分解
1.3 物件導向開發中的核心思想和概念
1.3.1 問題領域、對象、屬性、狀態、行為、方法、實現 問題領域:軟體系統所類比的真實世界中的系統。 對象:對象是問題領域中事物的抽象,有以下特徵:1. 萬物皆對象2. 每個對象都是唯一的。保證其唯一性的手段是它在記憶體中的分配唯一的地址3. 對象具有屬性和行為。對象的行為包括具有的功能和功能具體的實現4. 對象具有狀態。狀態是指某個瞬間對象的各個屬性的取值。5. 對象都屬於某個類。類是具有相同屬性和行為的對象的集合。同一個類的執行個體具有相同的屬性,表明他們的屬性含義相同,但是他們的狀態不一定相同 1.3.2 類、類型類是一組相同屬性和行為的對象的抽象。類和類的關係構成了物件模型的主要內容。物件模型中的類可以看作是開發人員自訂的資料類型,java虛擬機器的運行時的環境封裝了把自訂資料類型映射到電腦的內建資料類型的過程。物件導向的主要任務就是定義物件模型中的各個類。1.3.3 訊息、服務每個對象都具有特定的功能,相對於其他對象而言,它的功能就是為其他對象提供服務。對象提供的服務是由對象的方法來實現的,因此發送訊息實際上就是調用一個對象的方法。1.3.4 介面對象通過介面對外提供服務。在物件導向範疇中,介面是一個抽象的概念,是指系統對外提供的所有服務。系統介面描述了系統能夠提供哪些服務,但是不包括服務的細節。對象是最小的子系統,每個對象都是服務的提供者,因此每個對象都有介面。使用者在獲得服務時,不必關心對象到底是如何?服務的。介面是提高系統松耦合的有力手段介面還提高了系統的可擴充性在java語言中介面的兩種含義:1. 概念性的介面,指系統對外提供的所有服務,在對象中表現為public類型的方法聲明2. 用interface關鍵字定義的實實在在的介面,也成為介面類型,用於明確描述系統對外提供的所有服務,更加清晰地把系統的實現細節與介面分離。1.3.5封裝、透明封裝是指隱藏對象的屬性和實現細節,僅僅對外公開介面。封裝的優點:1. 便於使用者正確、方便的理解和使用系統,防止使用者錯誤的修改系統屬性。2. 有助於建立各個系統之間的松耦合關係,提高系統的獨立性。3. 提高軟體的可重用性4. 降低了構建大型系統的風險,即使整個系統不成功,個別的獨立子系統有可能依然有使用價值。物件導向語言主要是通過存取控制機制來進行封裝的:Public 對外公開,存取層級最高。Protected 只對同一個包或者子類公開預設 只對同包的類公開Private 不對外公開。 封裝的原則:1. 把儘可能多的東西隱藏起來,對外提供簡潔的介面2. 把所有的屬性隱藏起來:1. 更符合真實世界中外因通過內因起作用的客觀規律。2. 能夠靈活的控制屬性的讀和修改的存取層級。3. 防止使用者錯誤的修改屬性4. 有助於對象封裝實現的細節。對象封裝實現細節,也就意味著對象的實現細節對使用者是透明的。1.3.6 抽象抽象是指從特定的角度出發,從已經存在的一些事物中抽取我們所關注的特性,形成一個新的事物的思維過程。1. 從問題領域中的事物到軟體模型中對象的抽象。應該根據事物所處的問題領域來抽象出具有特定屬性的對象2. 從對象到類的抽象3. 從子類到父類的抽象(兩種情況)1. 不同子類具有相同的功能時,並且功能的實現方式也完全一樣。把實現放到父類中提高代碼的重用性和可維護性2. 不同子類具有相同的功能,但實現不同,在父類中僅僅聲明功能,在子類中實現,有助於提高系統的松耦合性Java語言中抽象有兩種含義:1. 當抽象為東側時,指的是抽象思維過程2. 當抽象為形容詞時,可以修飾類和方法。1.3.7繼承、擴充、覆蓋父類和子類之間同時存在做繼承和擴充關係。繼承和擴充同時提高了系統的可重用性和可擴充性。導致物件導向的軟體開發領域中架構類軟體系統的發展。如何在通用軟體架構的基礎上進行擴充呢?這些通用的軟體架構中都提供了一些擴充點。更具體地說,這些擴充點就是專門讓使用者繼承和擴充的類。 1.3.8 組合 組合是一種用多個簡單的子系統來組裝出複雜系統的有效手段。 對於一個組合系統,組合系統與它的子系統之間為聚集關係,子系統之間存在關聯關係或者依賴關係。物件導向範疇中組合有以下優點:1. 在軟體分析和設計階段,簡化了複雜系統建立物件模型的過程。2. 在軟體編碼階段,簡化了建立複雜系統的過程,只需要分別建立獨立的子系統然後組合構成複雜的系統3. 向使用者隱藏系統的複雜性4. 提高程式碼的可重用性1.3.9 多態,動態綁定 抽象機制和動態綁定機制能提高系統之間的松耦合性。抽象機制是開發人員在開發過程中使用的機制,而動態綁定機制是java虛擬機器運行是提供的機制。Uml介紹UML(Unified Modeling Languange)目標之一就是為Team Dev提供標準的通用的物件導向設計語言。UML採用一些標準圖形元素來直觀地表示物件模型,所以說它是一種可視化的物件導向的建模語言。靜態模型:用列圖,類框圖,元件圖表,部署圖動態模型:狀態轉換圖,時序圖,共同作業圖表1.4.1 使用案例圖 角色:角色是系統的邊界,即使用系統特定功能的使用者。 用例:表示系統某個功能,用橢圓符號表示。 角色和用例的關係:角色和用例之間的關係,用帶實線的箭頭符號來表示。 用例文檔包括內容:前置條件、主事件流、其他事件流、後置條件1.4.2類框圖類:類是類框圖中的主要元素,用矩形表示。矩形的上層表示類名,中介層表示屬性,下層表示行為。抽象類別名用斜體字表示,抽象方法用斜體字表示類之間的關係:關聯、依賴、聚集、泛化和實現。1.4.3時序圖時序圖顯示用例的詳細流程。時序圖有如下兩個維度1. 水平維度:顯示對象之間發送訊息的過程。2. 垂直維度:顯示發送訊息的時間順序。1.4.4共同作業圖表顯示了對象和角色之間的互動過程1.4.5狀態圖初始點:用實心圓表示狀態之間的轉換:用箭頭來表示狀態:用圓角矩形來表示終止點:用內部包含實心圓來表示。1.4.6 元件圖表:元件圖表主要用來顯示軟體系統中組件之間的依賴關係,組件之間有比較高的獨立性,他們子存在依賴關係,即一個組件會訪問另一個組件的服務。1.4.7部署圖參考資料 Java 物件導向編程 孫衛琴 電子工業出版社