語言學與面對物件的設計 (轉)
本來打算把這篇文章的題目叫做使用語法分析進行面對的設計,但是寫在這裡的語法分析很容易使人(尤其是員)想到一種語言的語法,而不是我在這裡所說得我們日常生活中所使用的語言中的語法(但是為了方便起見,我在後面仍使用語法分析作為這種面對物件設計方法的名稱)。
也許使用使用語法分析的方法進行物件導向的設計並不是一個新的概念,但是在我收集資料的過程中只在浙大的教學網站上發現了關於這一方法的一些資料,而這一發現還是在我打算撰寫這篇小文之後的事情。所以至少對於我這個初學者而言,這種方法是值得一提的方法。
在這裡我不想從一個開發的起步寫起,這樣的結果只會導致我偏離主題,所以以下內容的前提是我們有了關於我們要開發的系統的基本知識,並對這一系統的運作有了詳細地瞭解。這樣我們下一步的工作應該是對系統進行用例(user case)分析(至少我認為是這樣的),換一個角度說,物件導向的設計應該是在用例分析的基礎上的。用例的表達也有很多種方法,並且目前已經有許多的(pattern)發現並使用與用例表達,同時這些模式存在著各種好處,但是我們的這種物件導向的方法使用一種既簡單的用例表達法--講故事式的用例表達方法,也就是直接使用自然語言對用例進行闡述,這種用例表達方法相對於各種模式而言存在著沒有規範性等缺陷,但是為了不至於進入講解用例的誤區我們將使用這一方法。
好的,現在我們就針對一個具體的系統中的某個用例來做一下分析表達,並根據這個對用例的闡述使用前面提到的語法分析法進行物件導向的設計。下面的用例是我在旅店管理系統(我也是在涉及這個系統是聯想到的這種語法分析的方法)中的一個用例,
預定房間(用例名稱):一個顧客告訴旅店服務人員他(顧客)需要預訂房間,顧客告訴旅店服務人員預定資訊(標準,入住時間和天數應該包括入住人姓名等),旅店服務人員根據預定資訊從房間資訊中查詢是否存在符合預定資訊的房間,旅店服務人員告訴顧客是否預定成功,如果成功旅店服務人員記錄預定資訊。
如果讀者回頭去讀我在旅店管理系統中關於這一用例的描述時會我發現這裡的描述和以前的不是完全一致,但是他們表達的同一個問題,也實現了同一個目的,這是因為一個人在不同階段講故事的水平不同造成的。我們不理會這些細節,開始進行我們的語法分析。
在正式分析之前,我們先看一下我們的系統,由於我們的系統是一個不支援網上預定的系統,也就是說顧客只有透過旅店服務原來達到預定的目的,因此第一句“一個顧客告訴旅店服務人員他(顧客)需要預訂房間”是這個問題的開始條件,第二句“顧客告訴旅店服務人員預定資訊(標準,入住時間和天數應該包括入住人姓名等)”也只不過是告訴使用用例的人預定資訊的來源,與我們的系統沒有任何關係,因此以下的分析將其排除在外。
這樣的話,我們會發現在以上的用例中我們只有一個主語也就是旅店服務人員,我們把這個主語定義成一個類。接下來我們看到旅店服務人員在這個用例中只有查詢和記錄兩個行為(告訴這個行為與顧客有關,而顧客我們不考慮在內所以該行為是在系統中不存在的行為),這樣我們就把這兩個作為旅店服務員這個類的兩個方法。然後我們看到這兩個行為涉及到了其他的事物,其中包括預定資訊(查詢的條件,記錄內容),房間資訊(在那裡查詢),“是否存在符合預定資訊的房間”是一個查詢的結果,我們可以使用一個boolean的型別來表示。同時應該注意的事,如果預定資訊和房間資訊足夠簡單的話,我們可以使用程式語言中的簡單型別表示,而不必為他們建立一個類,當然如果“是否存在符合預定資訊的房間”足夠複雜,就需要定義為類來實現。這樣我們就實現了在用例中對系統要使用的類的抽象。
在這種抽象過程中,我們也可以先把用例中的名詞全部列出,然後一個個分析看是否可以作為物件使用的方法,在這裡就不再詳細介紹。
版權所有:idilent 網站轉載請註明作者 其他轉載方式請與作者聯絡(to:idilent@.com.cn">idilent@yahoo.com.cn)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-961003/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 面嚮物件語言概論 (一) (轉)物件
- 使用 Python 學習面對物件的程式設計Python物件程式設計
- 面嚮物件語言基礎二(1) (轉)物件
- java面對物件程式設計的概念Java物件程式設計
- 面對物件的思考 (轉)物件
- 學寫PEP,參與Python語言的設計Python
- 面對物件的思考(二) (轉)物件
- 一種新的面嚮物件語言――Other語言(暫定名)物件R語言
- Coco學程式設計--《設計模式》,語言無關的好書 (轉)程式設計設計模式
- 好程式設計師前端教程面對物件與原型原型鏈程式設計師前端物件原型
- 結對程式設計(c語言)程式設計C語言
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- 程式語言設計,程式設計哲學程式設計
- C語言/C++對程式設計學習的重要性!C語言C++程式設計
- 基於物件的JavaScript語言(轉)物件JavaScript
- Java語言程式設計——物件和類09Java程式設計物件
- 物件-函數語言程式設計簡史物件函數程式設計
- C語言大型軟體設計的物件導向C語言物件
- Java程式設計__Chap3 面對物件__程式設計題Java程式設計物件
- C 語言程式設計(unix) (轉)程式設計
- 函數語言程式設計 VS 物件導向程式設計函數程式設計物件
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- Airbnb的設計之道:明晰與優雅的設計語言AI
- 我對函數語言程式設計的理解函數程式設計
- 對函數語言程式設計的誤解函數程式設計
- Matlab與C語言程式的應用程式設計介面(轉)MatlabC語言程式設計
- 一種面嚮物件語言的方法呼叫過程。物件
- lua學習: lua及函數語言程式設計語言函數程式設計
- 閒言碎語話程式設計 (轉)程式設計
- C語言高效程式設計的幾招(轉)C語言程式設計
- 函數語言程式設計的優與劣函數程式設計
- iOS 與 函數語言程式設計iOS函數程式設計
- Reactive設計語言與正規化React
- Battleship程式設計語言與技術BAT程式設計
- IT程式設計各學科語言的介紹程式設計
- C#與Lua語言學習對比一C#
- OOC 物件導向 C 語言程式設計實踐物件程式設計
- 物件導向 vs. 函數語言程式設計物件函數程式設計