1. 程式人生 > 其它 >oop第三次部落格總結

oop第三次部落格總結

oop第三次部落格總結

一、前言

㈠:第七次題目集題量、難度、知識點總結情況

①:知識點總結情況

7-1主要考察了繼承、多型的應用,ArrayList泛型的應用方法以及Comparable介面及泛型的應用,單一職責原則的應用,“開-閉”原則的應用以及一些排序方法的應用和輸出格式固定的方法。

7-2在7-1的基礎上進一步考察了類的繼承、多型性使用方法和介面的應用以及固定格式輸出。

②:題目集難度:

7-2在7-1的基礎上進行遞進 總體來說題目集更注重方法的考察 並沒有在演算法上面為難 而且在指導書上給了思路提示所以難度並不是很大

③:題量

題量很小 但對方法的理解與掌握幫助很大

㈡:第八次題目集題量、難度、知識點總結情況

①:知識點總結情況

7-1主要考查了類間關係應該如何設定尤其是一對多的組合關係,在設計實體類的時候能否滿足單一職責原則

②:題目集難度:

本題的題目難度我認為大概分為三個方面 1、如何設計一對多的組合關係

2、初始化資訊時應該如何儲存

3、如果我知道銀行卡的卡號 我該如何找到其對應的ATM機所在銀行 所在賬戶隸屬於誰

③:題量:一道題題量小 但難度稍有提升

㈢:第九次題目集題量、難度、知識點總結情況

①:知識點總結情況

7-1主要是在上次作業中的7-1進行迭代,增加了借記卡和信用卡還有跨行問題 考察了抽象類、繼承與多型以及類間關係的設定還有單一職責原則

②:題目集難度:

本題的題目難度我認為大概分為兩個方面 1、如何設計才能再輸入卡號以後知道卡屬於借記卡還是信用卡

2、在取錢過程中如何能儘量減少選擇語句的使用

③:題量:一道題題量小 但難度有提升

二、設計與分析:

①題目集七(7-1 7-2)

在7-1時主要只是一個comparable介面的使用 以及ArrayList工具類的使用 但在7-2當中不僅使用了7-1所用的東西 還應該在使用一個介面那就是comparator,它們之間的相同點是Comparable 和 Comparator 都是用來實現集合中元素的比較、排序的 但因為7-1的設計只是將排序後的各圖形型別及面積,格式同排序前的以及所有圖形的面積總和的輸出,它是屬於在集合內部定義的方法實現的排序所以使用comparable介面 ,但是在7-2當中在輸出上各組內圖形排序後的各圖形型別及面積,格式同排序前各組圖形的輸出 以及各組中面積之和的最大值輸出我認為他們屬於集合外部類進行比較 就是幾個類間又要進行比較 在7-1的基礎上comparable已經實現了內部的排序 在不破壞“開-閉”原則的基礎上 又要進行排序 最好的方法是實現Comparator介面用來進行比較。遞進式的設計讓人更好掌握兩個介面的相同點與不同點 以及在什麼情況下運用不同的介面 以下是複雜度分析與類圖對比

7-1

7-2

可以看到圈複雜度並沒有發生變化 但是由於比較的時候我使用的是for迴圈 沒有用到介面比較和arraylist工具類 所以我的程式碼行數很長

這是類圖

②題目集八、題目集九設計思路

題目集八與題目集九屬於一個設計思路 在設計之初首先要搞清楚的就是類間的關係和那些類是實體類那些類是業務類 本題的處理方法與雨刷例項有很多相似之處 首先在實驗書上給了很多的提示 中國銀聯類似於業務類 用來處理這些類間關係 根據提示書 我要開始設計的組合關係是 銀行與ATM和使用者組合 賬戶與卡進行組合 使用者在與賬戶進行組合 整個都是鏈式的使用者組合 設計一個初始化的類用來存放資料 然後根據鏈式結構一層一層的儲存資料 但是後來經過老師的講解我發現我在類間關係設定上面存在一定的問題 比如使用者應該與賬戶進行組合 賬戶才應該與銀行組合 使用者與賬戶之間不應該存在關係 之前的設計雖然能夠實現該程式 但在類間關係上存在漏洞 題目集九在題目集八的前提下增加了信用卡 與透支收費等問題 在設計的時候除了應該考慮類間關係的設定 也要注意在類當中應該實行“開-閉”原則和單一職責原則 一個類只能幹一件事 並且做出的類不能修改 因此 卡分為借記卡和信用卡 賬戶分為信用賬戶和信用賬戶 所以這又考察到了繼承關係 在繼承關係當中還要想到如何讓系統給出一個卡號就能識別出那個是信用卡那個是借記卡 所以我在存放的時候對借記卡和信用卡進行了區別 在初始化的時候 我就將他們分好了類別 但違背了開閉原則 雖然我經常違背這個原則 主要是我不知道如何合理的利用類間關係 增加類來達到目的 在進行演算法計算時 我們之前做過的一道賬戶題就提供了類似的思路 接下來是我的類圖 由於我在題目集八的基礎上更改了類間關係 所以下面分別是題目集八與題目集九的類圖與圈複雜度分析

第八次

第九次

可以從圈複雜度分析可以看出來 因為第二次在老師的基礎上改 圈複雜度降低了 並且也在一定程度上實行了單一職責原則

三、採坑心得

1、題目集七7-1:

在輸出的時候格式錯誤 只能輸出wrong format 主要時我不會應用toString來固定格式 所以經常要用輸出來固定格式

後來我固定了輸出的格式

②我採用的是氣泡排序法比較 後面幾個點經常不過 所以我查了一下氣泡排序 結果從小到大排序 與題目規定正好相反

③我再進行修改時發現只有圓的時候和多個圖形測試總歸是不會過 後來我改成了r>=0就可以通過測試點 但我始終沒想明白為什麼園的半徑可以為零但是其他的圖形卻不可以

④我對while迴圈與switch的應用還是不熟悉 在選擇模式的時候 我一開始並不知道要如何能選擇好模式以後 就輸入半徑來進行計算 所以選擇了switch與for迴圈結合

2、題目集七7-2:

①因為是在題目集7-1上的遞進關係 所以在大方向上並沒有犯什麼錯誤 主要是在輸出格式上和比較上卡殼了 首先在輸出格式上 我不知道如何控制按照輸出要求那樣 而且在不同條件下有不同的輸出問題 所以這次我的解決還是利用輸出來解決問題 而且每一次的計算與排序我都運到用了氣泡排序並沒有利用ArrayList工具類 也沒有運用collection 在介面的使用上也出現了錯誤

interface Comparable {
	public int compareTo(double x,double y);
}

3、題目集八7-1:

①本題我所遇到的問題就是初始化錯誤問題 我打錯了一個卡號 所以導致幾個點一直過不去

②在傳參上我也遇到了問題 在比較是否跨行和查詢卡號是否錯誤時候在傳參時 我默認了密碼就是8888888 所以我就直接將密碼傳進來 並將類內部的keyword賦值為8888888 但傳進來的password也變成了88888888 所以根本檢測不出來密碼錯誤因此我將密碼錯誤檢測改為

public boolean validate1(Account account) {
		for(int i = 0;i<account.getList().size();i++) {
	     if(keywords.equals(account.getList().get(i).getKeywords())==true) {
	    	 return true;
	     }
		}
	     return false;
	}

  ③在進行有下到上的查詢的時候 我一直沒有辦法查詢 雖然在儲存資訊上儲存進去了 但就是沒有辦法進行查詢 所以debug 因為聲明瞭新的業務類 並沒有對業務類進行返回 所以在主類當中他們的儲存的資訊就是空 所以我在業務類做了修改 也在主類進行了修改

這樣就可以進行正常的進行查詢

④因為要檢測#才算停止 而且單個卡號查詢餘額時不需要輸入密碼 但是我又不會進行區分 所以我採用了比較偷懶的方法就是檢測他的密碼是不是警號 如果是警號就輸出餘額 但後來看了老師的方法才知道可以進行字串分割

4.題目集八7-1:

①本題我所遇到的問題就是初始化錯誤問題 我打錯了一個卡號 多加了一個空格 導致最後一個點一直過不去

②在校驗是否跨行時候我也出現了問題 我用它的初始化的每一個資訊都與傳進來的進行對比 但是我兩個位置放反了 所以一直檢測不出來是否跨行 後來改正如下

③在編寫程式碼時 跨行收取手續費時候 我在跨行的時候減去了手續費 然後後期在透支的時候 又減了一遍跨行 所以我改了只算了他們的手續費 最後一起算餘額

if (aTM.AcrossATM(account.getBank())==false) {
			if(aTM.getATMID().matches("0[1-4]")) {
				taxes = 0.02*amount;
			}
			if(aTM.getATMID().matches("0[5-6]")) {
				taxes = 0.03*amount;
			}
			if(aTM.getATMID().matches("0[7-9]||1[0-1]")) {
				taxes = 0.04*amount;
			}
		}

  ④在計算透支額度時 我總是多收費 就是在卡里還有餘額的時候並沒有把卡里的餘額減去在在透支基礎上收取費用 所以我在演算法上做了改動

四、改進建議

1、減少if else語句的使用 在遇到問題時每次最先想到的就是條件語句

2、對類間的單一職責原則 和開閉原則還是使用的不到位 也可能是理解得不夠透徹不知道該如何使用

3、加強對一些介面和ArrayList工具類的使用 學會while switch 等使用

4、提高自己邏輯性和嚴謹性 每次的程式碼都要因為不夠嚴謹而出錯尤其是初始化

五、總結

1、通過本月的訓練 主要加強了我對一些java中方便的一些工具類和方法進行實現 比如collection排序的使用

2、對繼承多型進一步的理解

3、掌握了toString的固定輸出格式

4、對泛型應用方法掌握更具體了

5、組合關係該如何寫 並且什麼情況下是組合關係 怎麼由小找到大 可以利用迭代器進行查詢