在物件導向分析設計領域的兩位大師級人物Peter Coad和Edward Yourdon,共同在《Object-Oriented Analysis》書中提出了8項物件導向分析的技術,我們已經介紹過「抽象化」(abstraction)技術,接著從「封裝」開始談起。
封裝
前面提到的「抽象」,它管理複雜的方式,是一次專注一部分,省略其餘部分。至於此處的「封裝」(encapsulation),則是以隱藏資訊(information hiding)的方式來將資訊細節封裝起來,達到管理複雜的目標。
除了管理複雜之外,封裝還帶來另一個更強大且具吸引力的好處是:系統分析師將易變動的部分封裝起來之後,如果遇到系統的需求變動時,系統重工(rework)的部分會最少。
因為透過封裝機制,系統分析師可以將系統易於變動的部分封裝起來,一旦發生變動時,只要換掉變動的部分(也就是需要重工的部分)即可,系統不會出現牽一髮而動全身的情況。
如圖1,可以將跟收銀員有關的屬性與操作封裝在收銀員類別中,同樣把與銷售交易相關的屬性和操作封裝在銷售交易類別中。如此一來,一旦收銀員發生變動時,就重做收銀員類別;銷售交易發生變動時,則重做銷售交易類別。
由於,收銀員與銷售交易兩者的變動都被獨立封裝在各自的類別中,因此兩者中無論何者產生變動,都不會影響到對方或者影響到其他類別。封裝將相關的內容放置在一塊,把與外界的互動降到最低,所以在前面的敘述中才會提到,一旦系統需求發生變動時,系統不會出現牽一髮而動全身的不良設計。
圖1:封裝
繼承
「繼承」(inheritance)是物件導向分析方法中,另一個強大且具高吸引力的機制。系統分析師可以將數個類別中相同的部分獨立出來,成為「父類別」(super class),隨後再透過繼承機制讓數個「子類別」(sub class)可以共享事先定義在父類別中的屬性、操作和關係。除此共享相同的部分之外,子類別還可以自行擴充專屬的部分。
以圖2為例,會員與業務員類別裡,有兩個相同的屬性——姓名與電話,以及四個相同的操作——取得姓名、設定姓名、取得電話和設定電話。系統分析師可以將上述相同的屬性與操作獨立出來,形成另一個名為個人的類別,並且為個人與會員、業務員之間建立繼承(一般化關係),如圖3所示。
圖2:會員與業務員
圖3:繼承(一般化)關係
回過頭來看,繼承機制如何管理複雜呢?把原先重複且分開放置的相同部分,獨自放置在一處,因而降低了重複出現的複雜度。
結合
物件之間可以透過「結合」(association)關係,來連接其他的物件,取得保存在個別物件中的資訊,因而不需要重複維護相同的資訊,也因此而降低了系統的複雜度。
以銷售交易為例,計算總金額時,需要累計每個銷售次項的金額(小計),因此銷售交易物件不是自己保存銷售次項的金額,就是可以從其他物件處取得銷售次項的金額。再看,銷售次項的金額怎麼計算出來的?必須取得商品單價以及銷售數量,兩個數字相乘起來,才能得到小計。
● 銷售交易金額(總計)=銷售次項金額的累加
● 銷售次項金額(小計)=商品單價×銷售數量
套上抽象與封裝機制來看,系統分析師可以將銷售交易、銷售次項和商品的相關屬性與操作分開放置,再應用此處的結合關係來連接這三個類別,以便取得所需要資訊,形成如圖4的類別圖。
圖4:結合關係
訊息溝通
單一物件能力有限,所以在物件導向分析中,不同物件之間會透過傳遞訊息(message)來進行溝通,以便互動及合作,形成一加一大於二的群力。經由訊息傳遞,可以溝通功能單純的物件,合力提供複雜且強大的功能。
請看到圖5,系統分析師可以使用UML的循序圖,來表達一群物件傳遞訊息的互動情況。在這張循序圖中,外界先發送訊息給銷售交易物件要求計算金額,這時候,銷售交易物件會執行一個迴圈(loop),發送訊息給每一個銷售次項物件,請它們各自小計自己的金額。由於,小計需要銷售數量和商品單價,所以銷售次項物件會各自發送訊息給相關的產品物件,取得商品單價,以便乘以銷售數量,算出小計並傳回給銷售交易物件。
圖5:訊息溝通
組織方法
物件導向分析並不是一種全新的思維模式,事實上,它倚賴的是人們從小就懂得的概念。原著作者引用大英百科全書指出,人們從小就懂得使用下列三種組織方式(methods of organization)來認識事物,而這正是物件導向分析中極為重要的概念。
基於人們慣用的三種組織方式,物件導向分析進一步依此發展出相關的圖示和方法,並且使用在軟體開發上頭。這三種組織方式分別為:
● 物件與屬性(objects and attributes):經由認知不同的屬性,來分辨出物件的異同。
● 整體與部分(wholes and parts):區分整體物件和它的組成部分。
● 類別與成員(class and members):物以類聚,分辨並歸類物件。此處的「成員」(member)是「物件」(object)的同義詞。
級別
一個系統不可能只包含十多個類別,通常是包含數十個類別,因此針對大型且複雜的系統,就需要採用「級別」(scale)的概念,將繁多的類別再度分類。物件導向分析中的「主題」(subject)概念,就是基於級別的概念而來。不過,我們不在此處細談「主題」,留待後面討論到如何定義主題的小節中,才來說明這個概念。
分類行為
前面,我們曾提到原著作者引用大英百科全書,說明人們從小就懂得使用三種組織方式;此處,原著作者再度引用大英百科全書,提到分類行為有下列三種常用的方法,如下:
1.立即的因果(immediate causation)
2.相似的演化(similarity of evolutionary history)
3.相似的功能(similarity of functions)
可惜的是,原著作者並沒有對這三種分類行為的方法多加解釋,僅提到物件導向分析中的「物件狀態」(object states)概念是基於上述的第二項(相似的演化)分類方法;至於「所需服務」(required services)的概念則是基於上述的第一項(立即的因果)和第三項(相似的功能)分類方法。下一期要來談談4種系統分析方法。
熱門新聞
2025-12-12
2025-12-15
2025-12-12
2025-12-12
2025-12-12
2025-12-12