語言學與面對物件的設計 (轉)

gugu99發表於2007-08-16
語言學與面對物件的設計 (轉)[@more@]

本來打算把這篇文章的題目叫做使用語法分析進行面對的設計,但是寫在這裡的語法分析很容易使人(尤其是員)想到一種語言的語法,而不是我在這裡所說得我們日常生活中所使用的語言中的語法(但是為了方便起見,我在後面仍使用語法分析作為這種面對物件設計方法的名稱)。

也許使用使用語法分析的方法進行物件導向的設計並不是一個新的概念,但是在我收集資料的過程中只在浙大的教學網站上發現了關於這一方法的一些資料,而這一發現還是在我打算撰寫這篇小文之後的事情。所以至少對於我這個初學者而言,這種方法是值得一提的方法。

在這裡我不想從一個開發的起步寫起,這樣的結果只會導致我偏離主題,所以以下內容的前提是我們有了關於我們要開發的系統的基本知識,並對這一系統的運作有了詳細地瞭解。這樣我們下一步的工作應該是對系統進行用例(user case)分析(至少我認為是這樣的),換一個角度說,物件導向的設計應該是在用例分析的基礎上的。用例的表達也有很多種方法,並且目前已經有許多的(pattern)發現並使用與用例表達,同時這些模式存在著各種好處,但是我們的這種物件導向的方法使用一種既簡單的用例表達法--講故事式的用例表達方法,也就是直接使用自然語言對用例進行闡述,這種用例表達方法相對於各種模式而言存在著沒有規範性等缺陷,但是為了不至於進入講解用例的誤區我們將使用這一方法。

好的,現在我們就針對一個具體的系統中的某個用例來做一下分析表達,並根據這個對用例的闡述使用前面提到的語法分析法進行物件導向的設計。下面的用例是我在旅店管理系統(我也是在涉及這個系統是聯想到的這種語法分析的方法)中的一個用例,

預定房間(用例名稱):一個顧客告訴旅店服務人員他(顧客)需要預訂房間,顧客告訴旅店服務人員預定資訊(標準,入住時間和天數應該包括入住人姓名等),旅店服務人員根據預定資訊從房間資訊中查詢是否存在符合預定資訊的房間,旅店服務人員告訴顧客是否預定成功,如果成功旅店服務人員記錄預定資訊。

如果讀者回頭去讀我在旅店管理系統中關於這一用例的描述時會我發現這裡的描述和以前的不是完全一致,但是他們表達的同一個問題,也實現了同一個目的,這是因為一個人在不同階段講故事的水平不同造成的。我們不理會這些細節,開始進行我們的語法分析。

在正式分析之前,我們先看一下我們的系統,由於我們的系統是一個不支援網上預定的系統,也就是說顧客只有透過旅店服務原來達到預定的目的,因此第一句“一個顧客告訴旅店服務人員他(顧客)需要預訂房間”是這個問題的開始條件,第二句“顧客告訴旅店服務人員預定資訊(標準,入住時間和天數應該包括入住人姓名等)”也只不過是告訴使用用例的人預定資訊的來源,與我們的系統沒有任何關係,因此以下的分析將其排除在外。

這樣的話,我們會發現在以上的用例中我們只有一個主語也就是旅店服務人員,我們把這個主語定義成一個類。接下來我們看到旅店服務人員在這個用例中只有查詢和記錄兩個行為(告訴這個行為與顧客有關,而顧客我們不考慮在內所以該行為是在系統中不存在的行為),這樣我們就把這兩個作為旅店服務員這個類的兩個方法。然後我們看到這兩個行為涉及到了其他的事物,其中包括預定資訊(查詢的條件,記錄內容),房間資訊(在那裡查詢),“是否存在符合預定資訊的房間”是一個查詢的結果,我們可以使用一個boolean的型別來表示。同時應該注意的事,如果預定資訊和房間資訊足夠簡單的話,我們可以使用程式語言中的簡單型別表示,而不必為他們建立一個類,當然如果“是否存在符合預定資訊的房間”足夠複雜,就需要定義為類來實現。這樣我們就實現了在用例中對系統要使用的類的抽象。

在這種抽象過程中,我們也可以先把用例中的名詞全部列出,然後一個個分析看是否可以作為物件使用的方法,在這裡就不再詳細介紹。

版權所有:idilent 網站轉載請註明作者 其他轉載方式請與作者聯絡(to:idilent@.com.cn">idilent@yahoo.com.cn)。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-961003/,如需轉載,請註明出處,否則將追究法律責任。

相關文章