《物件導向程式設計》課程作業四

2022-03-09 02:07:48 字數 1931 閱讀 2477

ooa(object oriented analysis,物件導向分析): 從客觀存在的事務和事務之間的關係,歸納出有關物件(包括物件的屬性和行為)以及物件之間的聯絡,並將具有相同屬性和行為的物件用乙個類(class)來表示。建立乙個能夠反映真實情況的需求模型。

ood(object oriented design,物件導向設計):將物件導向分析階段形成的需求模型進一步具體設計。如類的設計(繼承、派生、類與類之間的訊息協作)、演算法的設計等。採取通用的工具,如流程圖、類圖等來描述。

在編碼前我有手寫過一些文字,大概就是要分幾個函式,然後各個函式大概的介面長什麼樣子(不確定,只是初步),負責什麼功能。我的前期草稿大概就這樣,沒有像這次題目要求的這麼細緻。很多東西都是到了真正編碼的過程中遇到了問題or發現了更好的方法才加以改進的。

我覺得我把我的**解釋一遍就達到作業的要求了!一圖勝千言,但發現畫出清晰的圖並不是很容易的事情。

對於類,我只設計了乙個表示式類。剩下的東西我覺得不足以用「類」去歸納它們。我現在是這麼認為的:如果乙個「東西」是名詞,那麼就可以寫成類,如果這個東西是「動詞」,那我覺得不應該寫成類。比方說,這個「東西」是「表示式」,那麼就可以寫乙個表示式類,裡面私有成員包括中綴形式的式子、逆波蘭形式式子、表示式的正確結果,以及一些方法。但如果這個「東西」是「交換」,「交換」是乙個方法,那麼我不喜歡把它寫成類,而是寫成swap函式。

如果要把swap寫成類,那麼方法就是對字元swap、對整數swap、…… 我不太贊成,我覺得應該是對乙個「名詞」寫乙個類,裡面包含乙個方法,叫做swap。

類圖如下:

主函式框架如下(雖然覺得uml的圖很高大上,然而還是不會畫,所以先用lowb流程圖):

我這裡主要想通過流程圖介紹自己的思想。在圖中我標註③和④的部分是主要的演算法所在。但這兩個部分的東西可以通過上網查閱資料學習,這裡就不做流程圖了。

下圖是表示式產生的過程:

三個私有成員:expression 是顯示給使用者的中綴表示式,用 reversepolishnotation 來計算value 。用 value 和使用者輸入的答案比較正確與否

我的思路:長的表示式是由小part和運算子組成的。part可以是乙個數,也可以是乙個形如 (a+b) 的式子。part 和 part 之間再用運算子(oper)連線。整個式子的形式是(以式子的part數為3舉例):part oper part oper part通過 part 來實現表示式的生成是我的想法,好處是:容易加入括號、容易實現不同長度且形式隨機的表示式、並簡化了程式的編寫。

只要 part 內部的運算值合法,且 part 和 part 之間的運算值合法,就可以認為整個式子的運算值一定合法。不合法的例子包括:除以0和除不盡(對於小學生直接拋棄除不盡的除法式子)。可以看出來,都和除法有關。

解決方案:

最後說一下感想:我覺得這是棟哥這學期以來布置的最好的一次作業,甚至應該在寒假作業三之前布置這個作業,而不是先布置編碼,讓大家知道:乙個好的工程不只有寫**(當然敲**也很重要。。。)。先給出大致的框架,然後再修修補補,這樣也不至於在編碼的時候特別暴力或者無頭緒。

《物件導向程式設計》課程作業 (四)

採取物件導向的方法,四則運算自動出題軟體,根據需求可以劃分為幾個類?每個類具有什麼屬性?每個類具有什麼行為?類與類之間是如何進行協作的?誰給誰傳送訊息?誰持有誰的引用?該自動出題軟體採取何種演算法或者是如何實現的?可以採用流程圖描述的方法。類的劃分 根據需求,我劃分了三個類。類1 userinter...

《物件導向程式設計》課程作業八

emmm.轉眼又到學期末了。從寒假到這次結束,經歷的部落格及編碼作業的過程 時間過得好快啊,過年的時候在家裡用草稿紙上寫著函式原型和功能分塊,和朋友討論具體實現的細節 感覺寒假就在昨天一樣。部落格的話,不僅僅寫了這次作業,還積累了很多別的東西,這份收穫是可喜的。這次編碼是把所學知識做了一次真實的應用...

《物件導向程式設計》課程作業七

題目描述 請將隨機生成數字 表示式的部分設計成 乙個random基類,基類中有random 方法。並由該基類派生出randomnumber類 randomoperation類,繼承並覆蓋父類方法。學習簡單工廠模式,思考能否將該模式運用到題目的第一點要求中。include includeusing n...