blog3-題目集7~8
一、前言:
本次的Blog,是電路3和電路4,首先我想說的是在電路2的時候,我并沒有拿到滿分,直到做到電路3的時候我才發現了電路2缺少的部分,就是嵌套的串聯電路,之前是沒有考慮在一個T里面還有T的,電路3的一個測試樣例這才點醒了我,隨后也是修改了電路2的代碼,拿到了滿分。

二、設計與分析:
大作業7最后一題:
1.源碼分析:
這次的迭代相比于上次的內容,主要是增加了如下
- 增加了一個互斥開關
- 增加了一個受控窗簾
對于受控窗簾的話處理比較簡單,
class Curtain extends Controlled_equipment{...}
在處理的地方也像其他受控設備一樣加在合適的地方,受控窗簾的符號為S


而對于互斥開關而言,就有些難度了。
其主要是因為他有3個引腳,而且可以空出一個引腳。
為了方便處理,我其實是將這個互斥開關拆分為了兩個開關,而這兩個開關繼承最普通的開關,其實為何要繼承,主要是由于編號的原因。
而在互斥開關定義一個類繼承Control_equipment,并在內部頂一個兩個開關的變量。
toString()和set狀態如下

從toString()也不能看出,由于是兩個開關的結合體,而互斥開關肯定只能開一邊的,所有就是通過兩個開關的狀態來判斷了。
而sethSwitch1和sethSwitch2就主要是來設置變量的,讓互斥開關能知道是哪兩個開關的結合體。
接下來就又是一個重點了,由于他們是共享了一個引腳,而且可以靠VCC也可以靠GND的一邊,所以我做出如下處理

這個就主要是處理可能靠VCC的情況,在原來的parseEquipment函數就主要處理的是靠著GND的情況。
而在處理的時候就當做兩個開關,最后統計結果的時候合并為一個來。
2.SourceMontor分析結果:

3.UML圖:

4.時序圖


大作業8:
1.源碼分析
這是一個比較難的題,因為增加了電壓的處理,比較難以處理。由于在原來,我算的便是電壓,所以也許會稍微輕松一點。但最后實際做出來,也不是一般的難。而其中最難處理的還要屬電壓莫屬了。
首先就是增加的

由于其開關斷開的時候,并聯的一路比如開關的右側可能會有電壓。所以就如上圖代碼所做操作,首先查看開關哪個是斷開的然后去查找將另外一路的電壓賦值過去。
其次增加的還有各種判斷,由于算得了電壓,又有電阻,就能求出電流來,然后就可以看其電流是否超過了限定的電流。
其電流的額定重新設定在每一個類的構造函數里面去。

而對于輸出信息而言,就通過增加一個變量來存儲是否超過電流和一個計算現在電器電流的函數來得出最終的輸出信息。

調用例子

這樣就更加方便了輸出的操作。
同時在每次進行
device.setInputVoltage(outputVoltage);
device.setOutputVoltage(outputVoltage);
設置輸入輸出電壓的時候每次也需要進行下電壓計算的。
加上如下
device.compute();
這一函數是主要針對串聯電路和并聯電路他們的分支上的每個電器的電壓計算的。
最后還有其是否短路的標識。
public boolean isShort()
{
for(Electrical_equipment device : deviceList)
if(Double.isInfinite(device.current))
return true;
return false;
}
在最后的處理時候調用此函數,如果短路就直接輸出短路的信息,否則才會執行下一步。
在最后的反復調試下,雖然測試樣例都能過。做出了很多工作,但最后得分還是不盡人意,48分。
2.SourceMontor分析結果:

3.UML圖

4.時序圖

三、踩坑心得
- 對于互斥開關的實現,由于其有多個引腳,且能夠空出一個引腳來控制不同電路的狀態,因此設計時面臨一定難度。我采用了拆分成兩個普通開關的方式來處理,通過繼承和對狀態的控制,實現了這個復雜開關的功能。然而,這個設計雖然有效,但仍需考慮如何簡化和優化代碼結構,使其更具可擴展性和可維護性。
- 在電路8的設計中,加入了電壓的計算和電流判斷。這一部分比較復雜,特別是在開關斷開時,如何正確處理并聯電路中的電壓傳遞,確保計算準確。這不僅僅是一個簡單的電壓電流關系問題,還涉及到如何在代碼中高效處理這些物理量。盡管我在代碼中做了較為詳細的判斷和計算,最后得分仍然不盡如人意。這提醒我在設計電路系統時,代碼的可讀性和穩健性是非常重要的,尤其是在處理較復雜的電壓電流問題時。
- 在電路的實現中,我增加了短路檢測功能。這是非常關鍵的一個環節,因為電路中的短路會影響整個系統的穩定性和可靠性。我通過遍歷設備列表,檢查電流是否為無窮大來判斷是否發生了短路。雖然功能是實現了,但在優化和提高效率方面仍有改進空間,尤其是當電路復雜時,可能需要更精細的短路判定方法。
- 在整個開發過程中,源碼分析與調試占據了很大一部分時間。面對復雜的電路控制邏輯,我不得不多次反復檢查代碼,確保每個環節都能正常工作。這也讓我認識到,良好的代碼注釋和日志記錄能夠在調試過程中提供極大的幫助。
四、改進建議
- 在電路設計中,嵌套電路的處理是非常重要的。為了避免出現類似電路2中未考慮到的嵌套串聯電路問題,建議在設計時提前規劃電路的層次結構,確保每一層的電路關系能夠正確反映到代碼中。可以在初期設計階段進行更多的結構化圖形化規劃電路的嵌套結構,確保每個電路模塊都能準確地被識別和計算。
- 互斥開關的設計雖然解決了問題,但代碼實現相對復雜。為了提升代碼的簡潔性和可擴展性,可以考慮采用更通用的設計模式,比如狀態模式或策略模式,來管理互斥開關的狀態。通過設計一個更為靈活的類結構,使得不同類型的開關能夠以統一的方式進行管理和操作。這樣可以減少對硬編碼的依賴,提升代碼的重用性。
- 這兩次的大作業讓我更加意識到良好代碼結構的重要性。在面對復雜電路時,采用模塊化編程和設計模式能夠大大提高代碼的可維護性和擴展性。特別是在處理多個設備和不同類型的開關時,繼承和封裝能有效簡化邏輯,提高代碼的復用性。而我正是需要加強這一點,因為后期寫的代碼真是一坨。
總結
通過這次電路設計與分析項目,我不僅加深了對電路模擬的理解,還在代碼實現和調試過程中積累了寶貴的經驗。在設計與實現中,我意識到電路設計不僅要關注電氣原理,還要深入理解每個組件在程序中的實現及其交互。特別是在處理復雜開關和電壓電流計算時,良好的代碼結構和優化顯得尤為重要,模塊化編程和設計模式大大提高了代碼的可維護性和擴展性。電壓、電流和短路檢測的處理雖然實現了預期功能,但也暴露出在復雜電路中對物理量計算的細致處理仍有改進空間。同時,調試與測試成為了關鍵環節,盡管做了很多工作,但得分上仍有不足,提醒我在處理電路模擬時,要兼顧邏輯正確性、性能和效率。
學期總結
在這一學期的Java課程中,我通過理論學習和實踐編程,掌握了Java語言的基礎知識和一些關鍵概念,并成功應用到實際項目中。首先,我理解了面向對象編程的基本思想,比如類和對象、繼承、多態、封裝等,并能夠在代碼中靈活運用這些概念進行設計和實現。在項目實踐方面,我做了多個涉及數據結構、算法和電路設計的任務,解決了很多編程中的實際問題,提升了自己的編程能力和問題解決能力。尤其是在電路模擬的項目中,我學會了如何把真實的電路模型轉化成代碼,掌握了電壓、電流的計算和電路連接的實現。雖然在調試一些復雜問題時遇到了一些困難,但通過不斷嘗試和修改,我逐漸提高了代碼的結構性和效率。此外,學習UML圖、時序圖等設計工具讓我意識到,良好的設計對項目的成功非常重要。總的來說,這學期我不僅提升了編程技術,還學會了如何將理論與實踐結合,未來我會繼續在代碼優化、調試技巧和項目設計方面加強自己的能力。

浙公網安備 33010602011771號