oop作業(yè)總結(jié)第三集
前言:
轉(zhuǎn)眼已經(jīng)到了學(xué)期末,面向?qū)ο笳n程也迎來結(jié)課,這是oop第三次作業(yè)的大總結(jié),對于我這樣的菜鳥來說,說不難是不可能的,題目集的難度都是由淺入深,循序漸進的,越往后寫越是有點力不從心的感覺。但是這門課是我們接觸軟件的開始,并不是結(jié)束,這門課結(jié)束了不代表學(xué)習(xí)就要結(jié)束,所以在結(jié)課之后,對于最后兩次題目集做一次總結(jié),以便鞏固自己所學(xué)的知識.
- 題目類型和之前的一樣,都是在家居強電電路模擬程序-2的基礎(chǔ)上進行兩次迭代。
設(shè)計與分析:
-
對于家居強電電路模擬程序-3:
這次迭代還添加了線路中包含多個串聯(lián)起來的并聯(lián)電路的情況,使得電路更加復(fù)雜。 -
代碼分析:
這次我對在家居強電電路模擬程序-2的不足之處進行了修改,對代碼進行了大規(guī)模更改,相較與之前的更加簡單,將多次重復(fù)的代碼單獨拎出來做一個方法,提高了代碼的復(fù)用性

主要類和類間關(guān)系如下:
Device 類:這是所有設(shè)備的基類,包含設(shè)備的基本屬性如ID、輸入電壓、輸出電壓和電阻。子類通過重寫calculateValue()方法來實現(xiàn)特定設(shè)備的電壓計算邏輯。
ControlledDevice 類:是Device的抽象子類,名為受控設(shè)備,所有需要計算輸出值的設(shè)備繼承自它,如B、R、D和A。
B、R、D 和 A 類:分別代表白熾燈、日光燈、吊扇和落地扇,它們都是ControlledDevice的實例,每個類都有自己的電壓計算規(guī)則。
S 類:代表窗簾,它有自己的計算方法,根據(jù)輸出的光照強度調(diào)整輸出。
ControllingDevice 類:這是一個抽象基類,名為控制設(shè)備,用于控制設(shè)備,如F、K、L和H,它們有自己的行為和狀態(tài)。
F 類:代表可調(diào)節(jié)的設(shè)備,如風扇,有上/下位置控制和電壓映射。
K 類:代表開關(guān),有開啟/關(guān)閉狀態(tài)。
L 類:代表連續(xù)調(diào)節(jié)器,可以設(shè)置參數(shù)來改變輸出電壓。
H 類:代表互斥開關(guān),可以同時控制兩條電路,一條路開時,另一條路則關(guān)閉。
Series 類:代表串聯(lián)電路,包含一個電壓和電阻,用于管理串聯(lián)設(shè)備的電壓分配。
Parallel 類:代表并聯(lián)電路,包含多個串聯(lián)電路,用于管理并聯(lián)設(shè)備的總電阻和電壓分配。
Main 類:是程序的主入口,包含了全局的設(shè)備集合,如開關(guān)、調(diào)節(jié)器等。它負責讀取用戶輸入并根據(jù)輸入更新設(shè)備狀態(tài)和電路。
Input 類:負責解析用戶輸入,根據(jù)輸入創(chuàng)建或更新設(shè)備和電路。
- 代碼邏輯:
類間關(guān)系是通過繼承、組合(如設(shè)備添加到電路)和關(guān)聯(lián)(如設(shè)備之間的控制關(guān)系)來實現(xiàn)的。例如,設(shè)備可以被添加到串聯(lián)或并聯(lián)電路中,而控制設(shè)備則可以影響其他設(shè)備的行為。通過這種方式,代碼模擬了一個復(fù)雜的電器系統(tǒng)控制模型。
這次題目相較于前一次的題目增加了由電壓和自身輸出的光照強度調(diào)控的窗簾設(shè)備,思路很簡單,重寫計算窗簾打開程度的方法,將所有燈光設(shè)備的輸出值保存相加后,最后再輸出窗簾的打開程度即可。
這一次難點在于與兩條線路發(fā)生關(guān)系的互斥開關(guān)H
我最開始的想法是在H內(nèi)添加兩個私有的基礎(chǔ)開關(guān)類Switch,分別在兩條線路中,通過H類內(nèi)的轉(zhuǎn)換方法Toggle()將Switch類的狀態(tài)state發(fā)生改變,從而實現(xiàn)互斥開關(guān)H的打開與閉合,這樣的想法很美好,但我忽略了一個問題,在于不同連接點的問題,互斥開關(guān)有三個連接點,只有2,3連接點處的兩條線路存在相互互斥,如果輸入時,連接節(jié)點和預(yù)想的不一致,不是由一條串聯(lián)電路加上一條并聯(lián)電路的類型時,就會發(fā)生錯誤。
應(yīng)該只要在輸入和處理互斥電路時對其連接節(jié)點做特殊處理并保存在H類的兩個Switch類中應(yīng)該就可以解決問題,但是由于自身能力問題,直到題目集結(jié)束我都沒有完成互斥電路的改造,也是比較痛苦的一。
還有其他的問題我認為出自上一次家居電路-2中未公布測試點所未解決的遺留的問題,也是沒有解決辦法。
不足之處在以上都有提到,寫代碼效率不高,難以發(fā)現(xiàn)并修改實際出現(xiàn)的問題,想問題不全面不深刻,出現(xiàn)漏考慮的漏洞出現(xiàn),導(dǎo)致頻繁由測試點無法通過,這些問題都在解決實際問題時有重大缺陷,要趁早改正這些不足之處,這樣我才能在這條路上走得更遠。
- 對于家居強電電路模擬程序-4:
在家居強電電路模擬程序-3的
Device 類,ControlledDevice 類,B、R、D 和 A 類,S 類,ControllingDevice 類,F(xiàn) 類,K 類,L ,H ,Series 類,Parallel 類,Main 類,Input 類的基礎(chǔ)上
添加了一個新設(shè)備二極管設(shè)備繼承自ControledDevice類,并實現(xiàn)其calculateValue()方法來模擬二極管的特性,通過其輸入的二極管接觸點來判斷二極管的方向,從而實現(xiàn)單向聯(lián)通的功能,
除此之外,本題除了根以往一樣輸出電路設(shè)備的基礎(chǔ)信息以外,還要輸出電路設(shè)備在此條電路上的電壓,并且對于電路設(shè)備添加了電流上限的限制,這個的解決思路很簡單,電流的值很好得到,用電壓除以電阻即可,當然也要考慮某些特殊情況,不能出現(xiàn)除以0的情況,要注意做錯誤分析。
當然此題最大的難度還是在于復(fù)雜的電路,各種設(shè)備的出現(xiàn),如互斥開關(guān)和二極管,再加上迭代出現(xiàn)的并聯(lián)內(nèi)還有并聯(lián)電路的情況,符合實際生活中出現(xiàn)的隨機且復(fù)雜的問題,但是對于沒有完全通過前面兩次迭代的我來說,無疑是難上加難,設(shè)計編寫很久的代碼也只能得到寥寥無幾的分數(shù),各種問題同時涌現(xiàn),整得我束手無策。
踩坑心得:
互斥電路考慮不全面導(dǎo)致整個電路在運行時會出錯,應(yīng)該在剛剛開始添加這個類時就應(yīng)該考慮清楚,就可以避免這么多麻煩,省時又省力,這個問題告訴我們考慮問題一定要全面,把所有可能的情況都考慮一遍,不能想到哪寫到哪,先做需求分析不是沒有道理的。只有預(yù)先分析了所有問題所在,才有可能編寫出一段適用于應(yīng)對所有狀況的代碼,即使出現(xiàn)問題也只要添加新的類應(yīng)對新需求即可,這才可以被稱作一份正常可用的代碼。越是復(fù)雜的問題就越是貼近我們現(xiàn)實中的實際問題,雖然這次題目沒有能夠取得一個令人滿意的成績,但是這也為我的面向?qū)ο髮W(xué)習(xí)過程積累了重要的經(jīng)驗,犯過的錯不再犯也許也是一種不錯的進步。
改進建議:
這幾次的題目集都沒有公布測試點,正如老師說的實際生活中沒有測試點給你,你只能自己思考,這句話當然沒有錯,比如在電路-2的寫題過程中沒有測試點公布當然可以,我也原意接收這樣的挑戰(zhàn),但是我認為在下一次題目發(fā)布時,應(yīng)該公布上一次測試點的提示,為什么呢,就拿我來說,在電路-2中有三個測試點沒有通過,經(jīng)過很多次測試也沒有發(fā)現(xiàn)問題所在,這樣導(dǎo)致的結(jié)果是什么呢,下一次題目在有相同或者類似的測試點中只會一錯再錯,經(jīng)過幾次迭代的累計,正確的根本所剩無幾,沒有發(fā)現(xiàn)問題就無法改正自己的思路,不能更正,無異于在shi山代碼上再次堆疊,我覺得這也是最后一次題目集成績?nèi)绱藨K淡的原因之一,沒有改正的機會,又怎么能得到提高呢。
總結(jié):
這是面向?qū)ο笳n程的最后兩次作業(yè),每個人都想認真對待,來實現(xiàn)自我在面向?qū)ο缶幊谭矫娴奶岣撸瓿蛇@樣的一系列的作業(yè)也有很多收獲:
通過編寫和維護這樣的代碼,提高了在面向?qū)ο缶幊蹋∣OP)方面的編程能力。
還可以鞏固設(shè)計模式相關(guān)知識,如策略模式(ControlledDevice和其子類),有助于學(xué)習(xí)如何在軟件設(shè)計中使用設(shè)計模式來提高代碼的可復(fù)用性和可維護性。
提高問題解決能力,在編寫代碼的過程中,可能會遇到各種問題,解決這些問題可以鍛煉問題解決能力和調(diào)試技巧。
有了一定軟件架構(gòu)設(shè)計能力,通過構(gòu)建這樣的一個系統(tǒng),可以學(xué)習(xí)如何設(shè)計軟件架構(gòu),如何將復(fù)雜系統(tǒng)分解為可管理的模塊。
還有助于我們對于實際應(yīng)用理解,可以更好地理解現(xiàn)實生活中出現(xiàn)的問題和挑戰(zhàn),以及如何用軟件來解決問題。
總的來說,面向?qū)ο笳n程是我們學(xué)習(xí)軟件的敲門磚,現(xiàn)在大一所學(xué)的都是基礎(chǔ)中的基礎(chǔ),只有熟練掌握這些知識,才能在以后的課程甚至工作中能有繼續(xù)學(xué)習(xí)的能力,學(xué)習(xí)的過程無疑是枯燥的,但是,每學(xué)習(xí)完一些知識,每攻破一個測試點,每次發(fā)現(xiàn)最后問題所在,也無疑會給我們帶來不斷的激勵,有動力才更會學(xué)習(xí),我希望我能在今后軟件路上走的更遠更深更快更踏實,一時的失敗不代表永遠,不斷的向前學(xué)習(xí)永遠都是勝利,加油繼續(xù)努力吧!!!
posted on 2024-06-29 15:58 oblivioner 閱讀(33) 評論(0) 收藏 舉報
浙公網(wǎng)安備 33010602011771號