|
結構化程式設計簡介
•結構化程式設計方法主張按功能來分析系統需求,其主要原則可概括為自頂向下,逐步求精,模組化等。結構化
程式設計首先採用結構化分析(Structrued Analysis,即SA)方法對系統進行需求分析,然後使用結構化設計
(Structrued Design,即SD)方法對系統進行概要設計、詳細設計,最後採用結構化編程(Structrued
Program,即SP)方式來實現系統。使用這種SA、SD和SP的方式可以較好的保證軟體系統的開發進度和品質。
•因為結構化程式設計方法主張按功能把軟體系統逐步細分,因此這種方法也被成為面向功能的程式設計方法;結
構化程式設計的每個功能都負責對資料進行一次處理,每個功能都接受一些資料,處理完後輸出一些資料,這種處理方
式也被稱為面向資料流的處理方式。
結構化程式設計的局限性
•設計不夠直觀,與人類習慣思維不一致。採用結構化程式分析、設計時,開發人員需要將客觀世界模型分解成一個
一個功能,每個功能用以完成一定的資料處理。
•適應性差,可擴充性不強。由於結構化設計採用自頂而下的設計方式,所以當使用者的需求發生改變,或需要修改
現有的實現方式時都需要自頂而下地修改模組結構,這種方式的維護成本相當大。
程式的三種結構
•結構化程式設計非常強調實現某個功能的演算法,而演算法的實現過程是由一系列操作組成的,這些操作之間的執行
次序就是程式的控制結構。1996年,電腦科學家Bohm和Jacopini證明了這樣的事實:任何簡單或複雜的演算法都可
以由三種結構組成
–順序結構
–選擇結構
–迴圈結構這
•這三種結構就被稱為程式設計的三種基本結構,也是結構化程式設計必須採用的結構
順序結構
選擇結構
迴圈結構
物件導向程式設計
•物件導向是一種更優秀的的程式設計方法,它的基本思想是使用類、對象、繼承、封裝,訊息等基本概念來進行
程式設計。它是從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,並在系統構造中儘可能運用人類的自然
思維方式,強調直接以現實世界中的事物(即對象)為中心來思考問題,認識問題,並根據這些事物的本質特點,把它
們抽象地表示為系統中的類,作為系統的基本構成單元(而不是用一些與現實世界中的事物相關比較遠,並且沒有對應
關係的其它過程來構造系統),這使得系統可以直接映射客觀世界,並保持客觀世界中事物及其相互關係的本來面貌。
•如果採用物件導向方式開發的軟體系統,其最小的程式單元是類,這些類可以產生系統中的多個對象,而這些對
象則直接映射成客觀世界的各種事物。
物件導向的特徵
•物件導向方法具有三個基本特徵:繼承(Inheritance)、封裝(Encapsulation)和多態
(Polymorphism)。
•物件導向還支援如下幾個功能:
–對象是物件導向方法中最基本的概念,它的基本特點有:標識惟一性、分類性、多態性、封裝性、模組獨立
性好。
–類是具有共同屬性、共同方法的對象的集合。類是對象的抽象;對象則是類的執行個體。而類是整個軟體系統最
小的程式單元,類的封裝性將各種資訊細節隱藏起來,並通過公用方法來暴露該類對外所提供的功能,從而提高了類的
內聚性,降低了對象之間的耦合性。
–對象間的這種相互合作需要一個機制協助進行,這樣的機制稱為“訊息”。訊息是一個執行個體與另一個執行個體之間
傳遞的資訊。
–在物件導向方法中,類之間共用屬性和操作的機制稱為繼承。已有的類可當作基類來引用,則新類相應地可
當作衍生類別來引用。繼承具有傳遞性。可分為單繼承(一個繼承只允許有一個直接父類,即類等級為樹形結構)與多繼
承(一個類允許有多個直接父類)。
UML發展曆史
使用案例圖
•使用案例圖用於描述了系統提供的系列功能,而每個用例則代表系統的一個功能模組。使用案例圖的主要目的是協助開發
團隊以一種可視化的方式理解系統的需求功能,使用案例圖對系統的實現不做任何說明,僅僅是系統功能的描述。
•使用案例圖主要在需求分析階段使用,用於與客戶交流,保證系統需求的無二性,使用案例圖表示系統外觀,不要指望用
例圖和系統內部的各個類之間有任何聯絡。不要把用例做得過多,過多的用例將導致難以閱讀,難以理解;儘可能多地
使用文字說明。
類圖
•類圖是最古老、功能最豐富,使用最廣泛的UML圖型,類圖表示系統中應該包含哪些實體,各實體之間如何關
聯;換句話說,它顯示了系統的靜態結構,類圖可用於表示邏輯類,邏輯類通常就是業務人員所談及的事物種類。
•類圖除了可以表示實體的靜態內部結構之外,還可以表示實體之間的相互關係,類之間有三種基本關係:
–關聯(包括彙總,組合)。
–泛化(與繼承同一個概念)。
–依賴。
元件圖表
•對於現代的大型應用程式而言,通常不只是單獨一個類或單獨一組類所能完成的,通常會由一個或多個可部署的
組件組成。對Java程式而言,可複用的組件通常打包成一個JAR、WAR等文;對C/C++應用而言,可複用的組件通
常是一個函數庫,或者一個DLL(動態連結程式庫)檔案。
•元件圖表提供系統的物理視圖。它的用途是顯示系統中的軟體對其他軟體組件(例如,庫函數)的依賴關係。組件
圖可以在一個非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次上顯示。
部署圖
•部署圖用於描述軟體系統如何部署到硬體環境中。它的用途是顯示軟體系統不同的組件將在何處物理地運行,以
及它們將如何彼此通訊。
•因為部署圖是對物理運行情況進行建模,所以系統的生產人員就可以很好地利用這種圖來安裝、部署軟體系統。
順序圖
•順序圖顯示具體用例(或者是用例的一部分)的詳細流程,並且顯示了流程中不同對象之間的調用關係,同時還
可以很詳細地顯示對不同對象的不同調用。順序圖描述了對象之間的互動(順序圖和通訊圖都被稱為互動圖),重點在
於描述訊息及其時間順序。
•順序圖有兩個維度:垂直維度以發生的時間順序顯示訊息/調用的序列;水平維度顯示訊息被發送到的各對象實
例。順序圖的關鍵在於對象之間的訊息,對象之間的的資訊傳遞就是所謂的訊息發送,訊息通常表現為對象調用另一個
對象的方法,或方法的傳回值,寄件者和接收者之間的箭頭表示訊息。
繪製順序圖
•順序圖的繪製非常簡單。順序圖的頂部每個框表示每個類的執行個體(對象),在框中,類執行個體名稱和類名稱之間用
冒號或空格來分隔,例如,myReportGenerator : ReportGenerator。如果某個類執行個體向另一個類執行個體發送一條
訊息,則繪製一條具有指向接收類執行個體的開箭頭的連線,並把訊息/方法的名稱放在連線上面。
•對於某些特別重要的訊息,我們還可以繪製一條帶箭頭的、指向發起類執行個體的虛線,將傳回值標註在虛線上,繪
制帶傳回值的資訊可以使得順序圖表更易於閱讀。
演化圖
•活動圖表和狀態機器圖都被稱為演化圖,其實區別和聯絡如下:
–活動圖表:用於描述用例內部的活動或方法的流程,如果去除活動圖表中的並行活動描述以後,它就變成流程圖。
–狀態機器圖:描述某一對象生命週期中需要關注的不同狀態,並會詳細描述刺激對象狀態改變的事件,以及對
象狀態改變時所採取的動作。
•演化圖的五要素如下:
–狀態:狀態是對象響應事件前後的不同面貌,狀態是某個時間段對象所保持的穩定態,目前的軟體計算都是
基於穩定態的,對象的穩定態是對象的固有特徵,一個對象的狀態一般是有限的。有限狀態的對象是容易計算的,對象
的狀態越多,對象的狀態遷移越複雜,對象狀態可以想象成對象演化過程中的快照。
–事件:來自對象外界的刺激,通常的形式是訊息的傳遞,只是相對對象而言發生了事件。事件是對象狀態發
生改變的原動力。
–動作:動作是對象針對所發生事件所作的處理,實際上通常表現為某個方法被執行。
–活動:活動是動作激發的後續系統行為。
–條件:條件指事件發生所需要具備的條件。
激發對象狀態的事件
•對於激發對象狀態改變的事件,通常有兩種類型:
–內部事件:從系統內部激發的事件,一個對象的方法(動作)調用,(通過事件啟用)另一個對象方法(動作)。
–外來事件:從系統邊界外的激發的事件,例如使用者的滑鼠、鍵盤動作。
活動圖表
•活動圖表主要用於描述過程原理、商務邏輯以及工作流程的技術,很多情況下,活動圖表與傳統的流程圖非常相似,區
別是活動圖表支援並發。活動圖表非常類似於傳統的流程圖,它也使用圓角矩形表示活動,使用帶箭頭的實線表示事件。
•繪製活動圖表時以活動為中心,整個活動圖表只有一個開始活動,可以有多個結束活動,活動圖表需要將並行活動和串
行活動的分離,遇到分支和迴圈時最好像傳統流程圖將分支、迴圈條件明確表示。活動圖表最大優點在於支援並行行為,
並行對於工作流程建模和過程建模非常重要。因為有了並行,因此需要進行同步,同步通過匯合來指明。
狀態機器圖
•狀態機器圖表示某個類所處的不同狀態和該類的狀態轉換資訊。實際上我們很少繪製狀態機器圖,我們只對“感興趣
的” 類繪製狀態機器圖。也就是說,在系統活動期間具有三個或更多潛在狀態的類才需要考慮使用狀態機器圖進行描述。
•狀態機器圖的符號集包括5個基本元素:
–初始狀態,它使用實心圓來繪製;
–狀態之間的轉換,它使用具有開箭頭的線段來繪製;
–狀態,它使用圓角矩形來繪製;
–判斷點,它使用空心圓來繪製;
–一個或者多個終止點,它們使用內部包含實心圓的圓來繪製。
•繪製狀態機器圖時應該保證對象只有一個初始狀態,可以有多個終結狀態。狀態要表示對象的關鍵快照,有重要的
實際意義,無關緊要的狀態則無需考慮,繪製狀態機器圖時事件和方法要明確。
一切都是對象
•在Java語言中,除了8個基礎資料型別 (Elementary Data Type)值之外,一切都是對象。而對象就是物件導向程式設計的中心。對象是人
們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的
規則、計劃或事件。
•對象具有狀態,一個對象用資料值來描述它的狀態。Java通過為對象定義Field(以前常被稱為屬性,現在也稱
為欄位)來描述對象的狀態;對象還有操作,這些操作可以改變對象的狀態,對象的操作也被稱為對象的行為,Java
通過為對象定義方法來描述對象的行為。
•對象實現了資料和操作的結合,使資料和操作封裝於對象的統一體中。
類和對象
•具有相同或相似性質的 一組對象的抽象就是類,類是對一類事物描述,是抽象的、概念上的定義;對象是實際存
在的該類事物的每個個體,因而也稱執行個體(instance)。
•對象的抽象是類,類的具體化就是對象,也可以說類的執行個體是對象。類是用來描述一系列對象,類概述每個對象
應包括的資料,類概述每個對象的行為特徵。因此我們可以把類理解成某種概念、定義,它規定了某類對象所共同具有
的資料和行為特徵。
•Java語言使用class關鍵字定義類,Java允許開發人員自由定義類,定義類時可使用Field來描述該類對象的數
據,可使用方法來描述該類對象的行為特徵。
類之間主要結構
•一般——特殊結構:也被稱為分類結構,這種分類結構關係就是典型的繼承關係,Java語言使用extends關鍵字
來表示這種分類結構,Java的子類是一種特殊的父類。因此這種一般——特殊的結構關係其實是一種“is a”關係。
•整體——部分結構:也被稱為組裝結構,這種分類別關係就是典型的組合關係,Java語言通過在一個類裡儲存另一
個對象的引用來實現這種組合關係,因此這種整體——部分結構關係其實是一種“has a”關係。
|