第三次部落格作業

郁郁症發表於2024-06-27

前言

這次作業是在後面新的大作業上進行了兩次迭代。

1.第七次大作業

這次大作業是模擬家居電路。裝置總共分為兩個大類:控制裝置和受控裝置。控制裝置有開關,分檔調速器,連續調速器,還有這次迭代增加的互斥開關。這些控制裝置除了為了保護電路的互斥開關有電阻外,其餘均無電阻。受控裝置包括白熾燈,日光燈,吊扇,落地扇,和這次迭代新增的受控窗簾,它的開關大小與亮度有關,所以需要新寫一個方法進行計算。這次的電路要求也進行了迭代,這次迭代考慮到了多個並聯電路串聯在一起的情況,而且一個串聯電路中包含其他串聯電路的情況。這次新的迭代主要是在電路的連線上面有了變化,也新增了一個受控裝置和控制裝置。這次的的過程需要更加嚴謹,需要思路更加清楚,需要進行有效的梳理再進行編譯,否則容易混亂,所以這次大作業對我來說難度比較大。

2.第八次大作業

此次大作業在上一次的基礎上改變了很多,增加了很多考驗思維邏輯的內容。增加管腳電壓的顯示在輸出每個電器的狀態資訊後,再依次輸出該電器每個管腳的電壓。這點非常考驗思維能力,也考驗細心程度。稍不注意就會產生計算錯誤。電流限制,電器在工作時,過大的電流會引起電器過熱,從而燒壞電路。本次迭代,每個元器件都有最大電流的設定,當實時電流超過最大電流時,在該電器輸出資訊的最後加入提示“exceeding current limit error”,與前面的資訊之間用英文空格分隔。最大限定電流:開關20、分檔調速器18、連續調速器18、白熾燈9、日光燈5、吊扇12、落地扇14、互斥開關20、受控窗簾12、二極體8。短路檢測。如果電路出現無窮大的電流造成短路,所有元器件資訊不輸出,僅輸出提示“short circuit error”。並聯電路中包含並聯。本次迭代考慮並聯電路中包含並聯電路的情況,即構成並聯電路的串聯電路可以包含別的並聯電路。二極體。增加二極體元件,其電路特性為:正向導通,反向截止;其電器符號如圖4所示,當電流從左至右流過時,二極體導通”conduction”,電阻為0;電流從右至左流動時,二極體截止”cutoff”,電阻無窮大,相當於開關開啟。這次的電路更加複雜,對我來說是一個很大的挑戰,所以我花了大量的時間去想樣例以及如何編寫。

設計與分析

以下是我對每個大作業程式碼的程式碼分析。

1.第七次大作業


這次主要增加的分為兩個方面,一個是裝置方面的,一個是電路方面的。
裝置方面主要是增加了兩個裝置:互斥開關和受控窗簾。互斥開關因為可以在並聯電路中也可以在串聯電路中,一個並聯電路中也可以有多個互斥開關,互斥開關每一個引腳的電阻不同,因為太複雜所以我想到可以將互斥開關的兩個引腳當作兩個新的開關並設定這兩個開關的電阻,比如在輸入時輸入了H3-2,我便將這個名字作為開關名稱以便區別於K,並且根據“-”後面的數字來設定這兩個開關的電阻,再將這兩個開關存進互斥開關的物件中,這樣在後面對互斥開關的改變時可以直接找到相應的互斥開關再將互斥開關中的兩個開關的狀態進行改變。這樣寫的好處是可以不用更改以前程式碼中判斷電路狀態和總電阻的方法,但是要注意區別不同互斥開關所對應兩個小開關的名字,以便後面進行呼叫。受控窗簾就比較好寫,他的初始開度是全開,然後根據亮度逐漸升高來減小窗簾的開度。由於規定了亮度不受到外界的干擾,至於電路中的兩種燈發出來的亮光有關,所以在設定窗簾開度時只需要遍歷所有燈的亮度進行累加,再將累加的資料進行輸入窗簾的改變開度的方法中。但是需要注意在輸出時使用百分比進行輸出,所以不能直接輸出開度,需要判斷開度大小換算成百分比再進行輸出。
電路方面主要也是進行了兩個變化:一個是並聯電路的改變和串聯電路中可以包含一個電路。由於考慮到下一次的迭代,所以在這次大作業我就將並聯電路進行了改進,可以實現並聯包含並聯,即將M當作一個子類繼承裝置類讓他與其他裝置一樣進行遍歷,電阻和狀態都是根據父類進行重寫,再將它分的的電壓輸入M中,也是在改變它的特性的同樣名稱的方法中開始遍歷M中的Line,判斷他們的狀態,如果是通的則再遍歷這條Line中的所有裝置,再進行分壓、進行運算。這樣寫的話就不用考慮是否有M,再將M進行單獨運算,可以直接一層層的遞迴,直到運算完電路中的所有電器。串聯電路包含電路其實比較好改,也是將Line這個類繼承裝置類,再將方法進行重寫,將他的改變特性的方法和得到狀態的方法。這樣分到電壓後進入改變特性的方法裡遍歷Line物件的所有電器進行分壓,最後在輸出所有裝置時將所有電器進行排列計算進行輸出。

2.第八次大作業


此題設計同上一次的設計基本類似,只是在上一次的基礎上在每個類中增加了一個變數p,用於記錄裝置的引腳便於後續判斷兩端電壓,增加了一個二極體“P”類,“P”類中放了一個ArrayList ls用於存放p所在的那條路。雖然此次設計與上次類似,但我仍在上次的設計上進行了一些修改:
在每個類中增加變數p用於存放第一個出現的引腳(不相同的是互斥開關),並且在Zong類中增加“v1”“v2”“v3”(只有H需要用到v3),來記錄兩端電壓
互斥開關:雖然仍是用p表示第一次出現的引腳但是若第一次出現的引腳不是“1”號,那就用H類中的開關的p記錄第一次出現的引腳。
在Zong類中增加了一個checkI(double V)和check變數用於判斷裝置的電流是否超過最大電流,但是P和K類重寫了checkI()方法,因為他們的電阻是0,需要用整條路的電流來判斷
由於在上次編寫程式碼的過程中就已經考慮到這次的迭代,所以“並聯中包含並聯”的情況在上一次的迭代中就已經判斷。
可以按如下進行修改首先同上一次一樣建立連結串列並讀取,只是在讀取資訊並對資訊進行拆分的時候進行了一定的修改:不僅要讀取name還要讀取他的引腳並且將第一次出現的引腳存放到p變數中去。與上次出現明顯差異的地方是:(1)新用了一個變數vn來對兩端的電壓進行計算,首先讓vn=v,找到主路後計算主路中裝置的電壓並讓vn逐次遞減。(2)新增一個判斷,若主路的state=1並且getR=0,此時輸出“short circuit error”並結束整個程式。(3)在對M進行計算時每次迴圈的開始都讓vn=m.v1然後一次進行計算。(4)輸出時先調裝置的p變數若p=1則比較v1與v2的大小,先輸出較大者再輸出較小者反之也相同。(4)兩端電壓後還需判斷裝置的check變數是否為0,為0則輸出“exceeding current limit error”表示透過他的電流超過最大限定電流

踩坑心得

1.第七次大作業

因為將H分為了兩個開關而沒有將H存進這條電路的電器連結串列中,而改變H狀態的方法僅僅是改變了H狀態這個屬性,而沒有改變電路的狀態就沒有進行修改兩個開關的狀態。所以在後面改變H的狀態的時候結果有誤,需要按如下修改H的change函式就可以了
未寫好所有裝置狀態的函式,以為沒達到電壓就將它的狀態設為關閉,導致後面判斷電路狀態時有誤
需要像如下修改所有的change函式
未看清題目要求,需要將窗簾的開度全部化為百分比,需要修改輸出為如下

2.第八次大作業

計算二極體的最大電流事判斷錯誤,將“8”寫成“18”導致最終判斷結果錯誤,需改為如下程式碼
在並聯電路且有通有不通的時候應該將不同的電路從不通的那個電器往後都和並聯末尾的電壓相同,前面的與前面的相同,需要將程式碼改為如下

改進意見

1.編寫清晰和詳盡的文件、註釋和README檔案,說明程式碼的用途、實現細節、關鍵設計決策等。良好的文件能夠幫助他人理解和使用你的程式碼。
2.在編寫程式碼之前需要畫好類圖,否則寫程式碼時就會出現呼叫關係不清晰等問題。
3.在編寫程式碼之前先考慮測試用例,並遵循測試驅動開發的方法。編寫高質量的單元測試可以幫助驗證程式碼的正確性,減少潛在的bug,並提升程式碼的可靠性和可維護性。
4.學習和應用程式設計最佳實踐,如單一職責原則、開閉原則、依賴倒置原則等,以及常見的設計模式,能夠幫助你寫出更具擴充套件性、可維護性和可重用性的程式碼。
5.在測試用例的時候發現bug就要及時修改,不能只顧著測試點的修改,要盡力將整個程式碼的bug全部修改出來
透過遵循這些建議,你可以編寫出更高質量、可維護和可擴充套件的程式碼,提升自己作為開發者的技能水平和職業發展

總結

收穫

1.在第七次迭代時考慮到了第八次會並聯包含並聯所以在這次迭代中就進行了修改,所以在第八次迭代時就省去了時間去考慮這種情況。
2.學會了不要將一個裝置就最為一個裝置進行判斷,可以根據這個裝置的特性與別的裝置進行融合,比如在互斥開關的設定時可以將其與開關進行關聯再在其基礎上增加電阻再存進相應的型別中。
3.隨著程式碼越來越長需要考慮的東西越來越多,所以現在養成了先理清思路再進行編譯的好習慣,所以在後面編譯有著清晰的思路。
4.由於大部分沒有給出樣例的提示,所以考驗我們自己思考的能力,讓我們自己思索應該注意些什麼,也有利於我們理清我們的思路。

不足

1.由於物理知識已經很久沒有用過了,所以在編譯時會出現很多問題,比如這次的並聯電路中有路是通的,有路是斷的,就需要找斷的那個點,斷開前的需要與並聯電路前端電壓相同,斷開後的需要與並聯電路後端相同。
2.未考慮到開關等裝置無電阻,所以在判斷是否超過限制電流時想直接使用它的電壓除以它的電阻,這樣就會導致輸出錯誤,所以需要考慮更多不同的情況。

課程改進意見

對於教師、課程、作業、實驗、課上及課下組織方式等方面,我認為可以提出以下改進建議:
1.教師可以及時更新教學內容,跟上行業最新的發展和趨勢,讓學生學到最新的知識和技能。
2.作業應該設計合理,能夠鞏固學生所學的知識和技能,同時不要過於繁重,以免影響學生的學習效果。
3.實驗室的硬體設施和軟體環境應該得到改善和完善,保證學生能夠順利進行實驗和專案開發。
4.在課堂上可以增加更多的互動環節,讓學生參與到課堂討論和問題解決中,提高學生的學習積極性。
5.學校可以提供更多的課下學習資源,比如線上課程、教學影片等,幫助學生更好地學習和掌握知識。

相關文章