雨刷問題及相關課程作業總結

2022-10-09 11:39:08 字數 3880 閱讀 4072

雨刷問題及相關課程作業總結

近幾周學習內容,課程方面包括物件導向七大設計原則(雨刷問題),作業方面則包括pta,及實驗題,現對上述學習內容進行階段性總結如下。

雨刷問題

由雨刷問題開始的七大設計原則

第一次雨刷1.0

課上給出了雨刷系統的基本運作模式,根據司機對控制桿,刻度盤的調節,改變雨刷的狀態(主要是雨刷速度),當然也包括一些條件如控制桿和刻度盤需逐級調節等等,類似於現實中的控制桿,刻度盤,採用三種程式語言(c,j**a,python)實現。三種語言的**都只包含在單一檔案中,包括main函式及其他一些函式,筆者的j**a及python程式主要為物件導向,採用雨刷物件進行操作,而c則主要為面向過程,僅考慮司機操作,雨刷響應操作這一過程。

現擷取部分**截圖如下:

第二次雨刷2.0

相比第一次雨刷問題,將控制桿,刻度盤,雨刷等分離,引入單一職責原則(老死不相往來),迪公尺特法則,利用j**a做成多個類,各司其職,不同物件擁有它們自己的屬性方法而不受其他類影響,

不同物件採用業務類進行互動,因此我引入了controlbar類,dail類,brush類,control類,還有driver類(僅為讀取使用者輸入,記錄司機操作,雖然意義不明 ),main中做了輸出

由control類獲取driver操作來更改dail,controlbar的刻度,然後獲取刻度調節brush速度

類圖

不足:對輸入輸出沒實現分離,且類之間關係較為混亂

第三次雨刷3.0

在第二次的基礎上對程式進行了改進,control類更名為intermediary,更好區分於controlbar,

也對driver類進行了大改,不再記錄司機操作,而是driver通過intermediary來實現操作控制雨刷

新增了output類來做輸出,同樣由intermediary類(即原來的control)來控制不同物件間的互動,

把輸入放進了main中

類圖

不足:對輸入輸出的處理依舊不到位

第四次雨刷4.0

在第三次基礎上未增加新類,刪除類,將輸入輸出統一移至output類下,並將driver類改為了單例模式,即不可建立多個driver物件,僅能存在乙個driver,

當然現實中也是只有乙個人開車,而非兩個人同時開車,又因為driver通過intermediary控制雨刷,也就同時避免了建立多個brush等

這樣分離開後,output類也即使用者介面,顯示資訊給使用者,並接受使用者資訊

intermediary類也即業務類,管理不同物件間的互動,也通過output物件接受使用者傳入的資訊

類圖

第五次雨刷5.0

在第四次基礎上根據黎克特制代換原則 ,依賴倒置原則對程式進行了修改,為實現能使用兩套不同的雨刷,將controlbar類,dail類,intermediary類,output類改為了抽象類,作為父類

並新增了它們的子類controlbartype1,controlbartype2,dailtype1等,以dailtype1,dailtype2舉例,它們都擁有父類的屬性擋位gear,但是擋位的上限有所不同,它們擁有與父類同名的擋位調節方法(黎克特制代換原則)

但是經過重寫它們對擋位的調節上限不同,也即擁有不同的調檔位方法。

在intermediary類中進行controlbar,dail,output等抽象類互動,而不涉及它們的實體子類(依賴倒置原則,依賴抽象,頂層打交道,不依賴具體,底層解耦)。

類圖

題目集1

主要為日期的相關問題,三個日期的題目中類的關係也有所不同,主要是利用程式求當前日期(年月日表示)的後n天,或前n天,

重點在筆者看來,整體上是不同類之間關係的理解,不同的繼承的處理,即處理好不同的年月日之間的關係,

具體實現上則是邊界值的處理,跨年跨月,尤其是二月的天數會根據年份變化,需考慮周到。

題目集2

主要為對基礎語法的複習,利用好分支,迴圈即可。

題目集3

主要為對輸入的判別,需考慮周到,對不同情況即不同輸入作出相應方法,可使用正規表示式,使**更簡潔

實驗experiment

實驗1

分為兩塊,一是加入乙個新的學生後,找出班級中取得最高分的學生,及取得最高平均分的學生

二是修改求分數間運算的**

小結

通過題目1,鞏固了類的基本寫法,但對類之間沒有做好整體規劃,拖慢了進度

後續打算提前做好規劃,明確不同類應實現的功能

題目2為除錯程式,不斷改正題目所給**的錯誤,鞏固了語法,對除錯程式有了進一步理解,學會了基本的除錯手段

實驗2

農夫過河問題:乙個農夫帶著一匹狼、乙隻羊、一顆白菜要過河,河上只有一條船能夠渡河,而且農夫每次最多只能帶乙個動物或物品過河。當農夫不在的時候狼會吃羊,羊會吃白菜

小結

完善**時要關注業務類,根據業務類確定其他類應當實現的功能,關注具體的實現過程,不斷改進最終做出應有的效果,對程式的邏輯有了更深入的了解

總結與感想

寫程式之前花的時間應該多於或等於寫程式本身花的時間,即要對程式中應該實現的功能要先有個了解,並做好整體規劃,切不可看到題目直接動手寫**,

具體些則是,想好程式應該有些什麼樣的類,類中應該實現怎樣的方法,類之間又有何關係,

寫程式過程中也應該時刻注意是否犯下一些語法或邏輯錯誤,減少

之後除錯的時間,寫完後則要關注程式是否有什麼不足,可以怎樣修改。

自動雨刷問題

今天老師為了讓體驗設計模式布置了一道自動雨刷的問題,題目大致是汽車雨刷的速度控制由lever和dial控制,關係如下表 手動實現的部分較為簡單,題目中還提供了類圖 只需要按照類圖實現類和方法就行了,但是題目有公升級,要自動雨刷,根據雨量自動調節雨刷速度。雨量和速度的關係如下圖 其中雨量的資料是要求由...

死鎖及相關問題

系統中的資源可以分為兩類,一類是可剝奪資源,是指某程序在獲得這類資源後,該資源可以再被其他程序或系統剝奪。cpu和主存均屬於可剝奪性資源。另一類資源是不可剝奪資源,當系統把這類資源分配給某程序後,再不能強行收回,只能在程序用完後自行釋放,如磁帶機 印表機等。死鎖是指兩個或兩個以上的程序在執行過程中,...

ml課程 機器學習演算法串講及相關常見問題總結

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。問題1 機器學習演算法有計算型和規則型這兩類的演算法,請問這兩類下各自的都有哪些演算法,以及您對這個分類思路的理解?問題2 同樣是進行分類任務,lr與決策樹在解決問題的思想上有哪些不同?問題3 為什麼說決策樹在進行非線性表達這個層面要優於lr?問...