• 沒有找到結果。

第二章 文獻探討

第三節 軟體工程

在軟體工業界,近年來越來越重視軟體發展的程序,原因是希望專案能 夠順利的結案,其中包括了能在預算期間內將專案完成,並保證軟體的品質 等[36]。物件導向分析與設計在現代的軟體設計中已經應用地很頻繁了,但 是到底怎樣的設計方法可以將外在的人事時地物使用物件導向的觀念來表 示呢?

統一化模型語言(Unified Modeling Language,UML)為建構軟體發展程 序模型。有四個優點:第一、標準化,因為使用普遍的符號,程序模型能夠 容易理解。第二、模型化,UML 提供大量集合的圖(類別圖、物件圖、合作 圖、狀態圖等)。第三、視覺化,採用了多種易於瞭解的圖,能夠看了以後,

馬上瞭解其關係與架構。第四、可重複使用,圖中是以物件來架構的,所以 重改架構時,物件可重複的再使用[35]。

在統一塑模語言中有九種圖形:類別圖(Class diagram)、物件圖 (Object diagram)、使用案例圖(Use case diagram)、順序圖(Sequence diagram)、合作圖(Collaboration diagram)、狀態圖(State Chart diagram)、活動圖(Activity diagram)、元件圖(Component diagram)、部 署圖(Deployment diagram),其意義簡述如下[16]:

A. 類別圖(Class diagram)

類別圖是一種靜態圖形,在塑造物件導向系統時,類別圖是其 中最重要的圖形,透過類別圖可以將一組類別、介面、合作以及上 述元素之間的關係顯示出來。一般而言類別圖具有以下元素:

類別 介面

操作與常數 方法

屬性的型態資訊 可瀏覽性

相依性、一般化關係與結合關係

圖 2.3.1 類別圖

B. 物件圖(Object diagram)

物件圖可以顯示某一個時間點一組物件及這一組物件與其他物 件的關係。我們可以利用物件圖來塑造系統的靜態設計觀點和靜態 行程觀點。

圖 2.3.2 物件圖

C. 使用案例圖(Use case diagram)

使用案例圖在 UML 種是用來塑造系統動態觀點的五大圖形之 一,在 UML 中的使用案例不只是圖,它是文字型的文件,建立使用 案例模型時的主要工作也是在寫文字而不是圖,然而,UML 中定義 了使用案例圖,圖中可以展現使用案例與參與者的名稱的關係。

圖 2.3.3 使用案例圖

D. 順序圖(Sequence diagram)

互動圖包含兩種圖形:順序圖、合作圖。順序圖的特質:表現 系統的動態角度、表現物件之間的互動、可塑造事件流、表現物件 之間互動與時間或關係的差異。

圖 2.3.4 順序圖

E. 合作圖(Collaboration diagram)

順序圖與合作圖都屬於互動圖所以擁有相同的特性,若依時間 順序塑造控制流程就使用順序圖,若依物件組織塑造控制流程就使 用合作圖。

圖 2.3.5 合作圖

F. 狀態圖(State Chart diagram)

在一個系統中事件(event)是代表很顯著或是值得注意的事 件,UML 使用狀態圖展現物件中我們感興趣的事件與狀態,以及物 件回應事件的行為。

圖 2.3.6 狀態圖

G. 活動圖(Activity diagram)

活動圖提供我們很豐富的表示法可以秀出活動的先後順序,我 們可以將它應用在企業的工作流程或企業流程中,也可以秀出使用 案例中的步驟。基本上活動圖就是流程圖,可以顯示活動與活動之 間的控制流程。

圖 2.3.7 活動圖

H. 元件圖(Component diagram)

元件代表系統中可模組化、可配置化、可取代的部份,裡面會 把實作封裝起來並顯示一組介面出來。元件圖是塑模圖形裡面兩種 (元件圖、部署圖)可以用來塑造物件導向系統實作角度的圖形之 一。透過元件圖可以表現出一組元件之間的組織與相依關係。

圖 2.3.8 元件圖

I. 部署圖(Deployment diagram)

透過部署圖可以表示執行時間進行處理的節點以及存在該節 點上的元件。

圖 2.3.9 部署圖

二、物件導向程式庫樣式(OO Programming Library Pattern)

為了提昇軟體開發的效率,我們會建立程式庫。建立程式庫的原因 是將軟體工程師常用的類別程式放入程式庫,而達到物件重用(Reuse) 的目的。

Will Tracz 曾經說過:If you have components to reuse, then you need to glue them together… After you glue pieces together long enough, you start seeing a pattern, then you can reuse the glue too[25,p41]

我們這裏舉出五個物件導向中常用的關係:類別繼承(class

inheritance)、類別實體化(class instantiation)、方法呼叫

(function invocation)、方法重製(function overriding)、隱性呼叫 (implicit invocation) [19]。

A. 類別繼承

物件導向的繼承性可定義為將具有共同特性的類別導入到一 個通用的類別底下。而此通用的類別就可視為這些類別的父類別,

而底下較具特色的類別則可稱為子類別[11]。

B. 類別實體化

實體化是物件導向程式設計的專門用語,是指產生一個類別實 體的動作[2]。換言之,實體化就是用一個類別產生一個物件。所 以物件可能產生在 stack 或是 heap 中,若宣告一個非指標物件 實體化就會放在 stack,若使用 new 或 malloc 物件就會放在 heap 中。

C. 方法呼叫

物件利用訊息的傳遞與其他物件溝通,這些訊息將會呼叫方 法,而被呼叫的方式將會利用函式來處理傳來的物件並回傳其結 果。其中呼叫一個方法指的是傳遞訊息者須等待接收者在執行某些 方法後所回傳的結果,反之傳遞一個訊息所指的是傳遞不需要等待 其回傳結果[11]。

D. 方法重製

重製性能就是子類別可以將父類別所提供的方法改寫,使用另 一個方法取代之。所以就一個類別先繼承一個父類別後,再將父類 別既有的方法重新改寫一次,未來將子類別實體化後,使用此方法 呼叫都會用子類別改寫過的方法,而不會使用父類別的方法。但若 子類別繼承父類別後,不將父類別的方法重製過,呼叫此方法時還 是會呼叫父類別的方法。

E. 隱性呼叫

機制,而發出訊息者就等於是呼叫接收者去做一些方法的呼叫,這 就是隱性呼叫。

例如若使用 Microsoft Windows 的 SDK 寫一個 window 程式 都需要寫一個訊息處理的程序來接收外來的訊息,當我們操作 window 的各種功能時就等於呼叫裡面的程序, window 與 window 程式間也可以互相傳送訊息, window 程式內部也可以送訊息給自 如微軟的 MSDN[29]。Sun Microsystems 也定義了一種 Document 的方式為 JavaDoc[28],JavaDoc 最主要的目定是從軟體工程師寫在原始碼的註解擷

相關文件