前言:

  針對第一階段作業(yè)做出的總結(jié),主要說明本次博客針對的作業(yè)情況.第一階段的作業(yè)大致是讓我們了解C語言與Java的不同,同時讓我們從面向過程編程過渡到面向?qū)ο缶幊?

 

作業(yè)過程總結(jié):

1.總結(jié)三次作業(yè)之間的之間迭代關(guān)系

 

  第一次作業(yè)給我的感覺就是很像C語言.再次熟悉了一遍for,while,switch以及if等語句的使用,認(rèn)識到了Java輸入與輸出的不同為之后的學(xué)習(xí)和作業(yè)做下鋪墊.

  第二次作業(yè)是在第一次作業(yè)的基礎(chǔ)上加大難度,除了需要對選擇循環(huán)語句熟練外,還增加了Java中方法的使用,這便開始涉及到面向?qū)ο蟮钠っ?但在作業(yè)過程中還是面向過程的編程.

  第三次作業(yè)主要讓我們認(rèn)識到了類的運用,了解到對象的聲明與創(chuàng)建.作業(yè)中類的兩種聚合類型的實現(xiàn)讓我們正真開始了解面向?qū)ο蟮木幊趟季S.

2.如何通過作業(yè)從面向過程過渡到面向?qū)ο?/span>

  第一次作業(yè)以Java形式寫C的程序,題目都是以前做過的,第二第三次作業(yè),根據(jù)提示所給方法和類圖所給的類的聚合關(guān)系完成代碼,實踐并鞏固了面向?qū)ο蟮闹R, 對面向?qū)ο笥辛艘欢ǖ恼J(rèn)識.三次作業(yè)下來,作業(yè)內(nèi)容大同小異,使三次作業(yè)的關(guān)系十分緊密,并且知識的迭代與每次作業(yè)難度的提升,使同樣功能的實現(xiàn)正逐漸擺脫面向過程編程,代碼也逐漸走向面向?qū)ο蟪绦蛟O(shè)計.就比如第三次作業(yè)中對"年""月""日"三個對象的描述,使整個解決問題的步驟更加清晰,而不是僅用函數(shù)將這些步驟一步一步實現(xiàn),由此慢慢地從面向過程過渡到面向?qū)ο?

3.作業(yè)過程中遇到的問題及解決方法

  第一次作業(yè)中的稅收問題雖然不是第一次做,但繁瑣的輸出總是讓我不經(jīng)意間輸錯某個數(shù)據(jù),之后又花大量的時間將整個代碼檢查一遍,但改了之后下一個樣例又不等價,這次我自行測試,在決定哪些地方?jīng)]有問題之后,我再有目的的進(jìn)行修改.但是在我改完之后提交還是部分正確,我又花了很多時間去修改,最后發(fā)現(xiàn)題目沒有強制保留一位小數(shù),只是樣例給的輸出都是一位小數(shù).還有一個就是特殊情況考慮不充分的問題,三角形判定那題有個測試點一直過不去,我花大把的時間去測試,把每個情況都輸出了一遍,之后我便發(fā)現(xiàn)等腰直角三角形的情況輸入不了,我才注意到題目要求輸入的是實數(shù),而勾股定理得到的斜邊可能是個無理數(shù),于是我將兩直角邊的平方和與斜邊的平方運用math.ceil函數(shù)向上取整后再做比較,最終還是沒有通過測試,因為那時作業(yè)1過期了,但我在詢問大佬之后確定我這么想沒錯.

  第二次作業(yè)中第二題誤以為每四年一個閏年導(dǎo)致錯誤,還有就是swicth語句不能對String類型的數(shù)據(jù)賦值后傳出switch語句,于是我換成了if語句解決了這個問題.還有第三小題的格式問題,我在輸出next date is : 冒號兩邊多加了空格,這么低級錯誤讓我在這題卡了好久.然后就是第四題,我在一個switch語句中嵌套了多個if,else導(dǎo)致最里層的else一直會被跳過,于是我把else改成了帶具體條件的if語句才得以解決.

  第三次作業(yè)的話,第一題第二題給我的落差太大了,以至于我第二題懵了好久,最后還是被我磨了出來.我怕可能會運行超時,便先把年份的天數(shù)先算出來了,在算月份的,最以400多行的代碼完成了,不過在我看完第三題的要求后,我發(fā)現(xiàn)我的顧慮是多余的,完全可以一天天的算,第三題運用到了類與類之間的關(guān)系,對這部分知識還不是很清楚在百度查詢后才知道這個聚合就是一個類以其他類為屬性,題目中DateUtil包含Day,Day中有包含Month,最后Month又將Year包含在最里面,清楚了這樣的層層包含關(guān)系后,我大致知道了怎么做.期間困擾我最久的問題是未能及時跳出循環(huán),剛完成代碼,接下來的測試都是沒有輸出,我懷疑是我循環(huán)條件有問題,于是我在循環(huán)體只增加了一條輸出語句,果然是沒有跳出循環(huán),我便開始更改循環(huán)條件,問題沒有得到解決,稍加思索后,我發(fā)現(xiàn)是在達(dá)到跳出循環(huán)的條件后沒有即使跳出循環(huán),發(fā)而在里面執(zhí)行語句,以致無法跳出循環(huán),于是我在每次條件改變后增加了一個if判定語句,問題才得以解決.

4.每次作業(yè)花費的時間比例

  第一次作業(yè)用時7小時,第二次作業(yè)前后花費5個小時,第三次作業(yè)用時十多個小時.

5.對編程過程的嚴(yán)謹(jǐn)性的認(rèn)識及教訓(xùn)

  編程之前要有清晰的思路,最好畫出類圖,這才能盡可能的吧每種情況都考慮下來,不然的話中間一亂套沒人幫得了,除了自己,讓花費個把小時去找bug改bug,代碼要盡可能簡潔,使用多次簡單循環(huán),而不要使用我們算術(shù)的簡便思想,這樣就算有邏輯錯誤也很容易解決,從而保證編程過程的嚴(yán)謹(jǐn)性,我第三次作業(yè)就是用平常思維完成的,期間犯了很多邏輯錯誤,最后的代碼還很臃腫,有400多行.

OO設(shè)計心得:

 

1.面向過程與面向?qū)ο蟮谋容^

   面向過程是對問題分析出每個步驟,每個步驟的功能實現(xiàn)對需要我們自己去做.強調(diào)步驟.

   而面向?qū)ο蠓治鰡栴}后,需要實現(xiàn)一個功能可以直接找到具備該功能的東西來幫我們解決問題.強調(diào)具備功能的東西即對象.

2.面向?qū)ο笤O(shè)計的基本原則理解

  模塊化設(shè)計,對象就是模塊,把數(shù)據(jù)和方法緊密結(jié)合在一起構(gòu)成模塊,每個對象各司其職,只做好自己的本分工作,使其更具有通用性.

3.OO編程思維的理解

  我覺得關(guān)鍵得先找出對象,分析對象之間的關(guān)系后,再把類給抽象出來,分析完類與類之間的關(guān)聯(lián)后在進(jìn)行設(shè)計.

測試的理解和實踐:

1.測試對于編碼質(zhì)量的重要性

  測試是檢測代碼質(zhì)量標(biāo)準(zhǔn),沒有測試最為保證的話,一篇代碼可能永遠(yuǎn)只能返回錯誤值,永遠(yuǎn)不能為人所用,這時代碼只能算是一堆無用的字符,就算只有個別錯誤,沒有測試的話,這個錯誤就無法被程序員及時發(fā)現(xiàn)并修改,有bug的代碼只能稱為bug,而bug滿足不了用戶的需求.總之沒有測試,代碼的質(zhì)量就得不啊到保證.

2.假如讓你設(shè)計測試用例,你會如何做

  如果讓我設(shè)計測試用例,我會盡可能設(shè)計多的用例并將特殊測試值全部安排上,就像閏年的二月,平年的二月,最大測試值,最小測試值,正常測試值.

課程收獲:

  經(jīng)過這幾周的課程學(xué)習(xí)與三次作業(yè),也算是完成了面向過程向面向?qū)ο蟮倪^度,學(xué)到了之前課程完全沒有提到過的對象的概念,對象是具體的,而類是抽象的,在Java中現(xiàn)有對象后有類,我了解到了面向?qū)ο笤O(shè)計的優(yōu)勢,一次編寫,多處引用,功能的實現(xiàn)不在依賴于過程的編寫,而取決于對象的選擇和類的創(chuàng)建.

對課程的建議:

  我覺得老師講的很細(xì)致,舉得例子也很照顧我這樣腦子不靈光的學(xué)生,但課后知識鞏固我覺得需要加強,比如布置一些小練,希望老師可以制定課前預(yù)習(xí)內(nèi)容,課后再分享一些學(xué)習(xí)查資料.