1. 程式人生 > 其它 >oop課程第二次Blog總結

oop課程第二次Blog總結

一、前言:

第二次寫Blog與上一次的心情完全不同,這幾次作業的題目集側重點變得分散,有助於我們更集中的處理較為複雜的知識點。這幾次題目集才開始體會到面向物件的實際作用,可以說面向物件才是一個真正的進入軟體的世界,我在這幾次對待題目考慮較上次更加全面。題目集較上一次難度有所下降但是題目量增加,小的知識點分散在各個題目中,雖然作完之後分數不是很多但是成就感很多。題目集的知識點更有針對性,之前幾次題目集的指導書,說實話沒怎麼在意只是看看大致內容馬上就去實現程式碼。但是這幾次題目集沒有仔細看指導書我走了不少彎路,指導書還是要仔細看。我也發現我平時也不是很細心,題目集四的第三題和題目集五的第五題,我天真的以為就是簡單改一下就能通過,但是我還是太年輕了。繼承,多型,正則表示式,Array.list的運用,介面,抽象類這幾次的題目集難度雖然降低但是涉及到的知識點一點也不簡單,我需要學習的還有很多。程式碼還是出現很大的問題,就比如圈複雜度還是很高,我嘗試改動程式碼但是圈複雜度還是沒有下降,就證明我使用的還是C語言留下的知識,沒有創新。下一次再寫部落格希望能有所提高。

題目集四(7-2)題目集五(7-4)兩鍾日期聚合比較)

(7-2)

我認為題中的那兩個測試點應該是我主函式裡的日期間隔不是很完善導致,存在只是傳進去數但是輸出總是錯誤,也檢查我使用日期間隔求天數的方法,能考慮到的都在。之後在我後期和同學討論的時候發現,我沒有考慮到剛好邊界的情況導致我這兩個測試點沒過,太不仔細了。而且此題目類與類關係很密切,我需要呼叫一個類一個類的方法連續呼叫,類之間的偶合性很高,老師上課強調好的程式碼儘量是高聚合低偶合,這道題也是想讓我們理解高偶合的弊端。較題目集五第五題相比高聚合低偶合是怎麼實現的,類與類之間的關係不是很大,出現問題和輕鬆就能找到問題存在,但是題目集四出現問題要在一個一個類裡面看呼叫的是不是我們想要的,如果一個地方出錯,我們往往要大改裡面的方法,很麻煩對待後面的複用也不是很好,這點我很清楚,我再寫題目集五的時候本想用一下上次程式碼,發現特別不好用,而且會出現有一些我本不應該出現的問題。可能測試點的改動後面的第五題和第四題也是截然不同。

改進建議:此題目改進在題目集四的情況下,改進題目集五的類圖。判斷語句儘量減少,程式碼中還是有很多繁瑣的判斷,程式碼整體性還是有點不規範,在題目集中大數判斷是我剛開始很難過去的一點,以下s是我處理的方法。

第五次題目集無疑讓我感受到高偶合性給我帶來的好處,只要找到dateutil裡的進行呼叫非常的方便很快就發現邏輯錯誤,我認為高聚合的優勢也就體現了,再其次這次題目程式碼的可複用性較上一個有很大的改觀。

題目集4(7-3)、題目集6(7-5、7-6)三種漸進式圖形繼承設計的思路與技術運用(封裝、繼承、多型、介面等)

題目集4(7-3):

此題子類繼承父類我們也是第一次接觸到這類題目,程式碼的完成比較順利,繼承也是我們學習JAVA的入門必須要掌握的技術,與其說是技術對於我們JAVA程式設計者是必須要學會的,在專業的角度來說繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。子類又被稱為派生類; 父類又被稱為超類(Super Class)。子類即使不擴充父類,也能維持父類的操作。子類還有一個特點:子類實際上是將父類定義的更加的具體化的一種手段。父類表示的範圍大,而子類表示的範圍小。現在預設呼叫的是無參構造,而如果這個時候父類沒有無參構造,則子類必須通過super()呼叫指定引數的構造方法。重寫也是本題我們第一次參與運用,大體意思是:是子類的方法覆蓋父類的方法,要求方法名和引數相同,訪問修飾符的限制一定要大於被重寫方法的訪問修飾符。重寫是對類中方法的擴充,因為繼承用的是父類的東西,重寫則不僅得到父類的東西,同時也加入了自己的東西,這也只是我個人的理解。在查閱相關資料中官方的理解則更全面。官方理解:子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和引數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。當然重寫也需要注意一些事項:1.發生方法重寫的兩個方法返回值、方法名、引數列表必須完全一致(子類重寫父類的方法)2.子類丟擲的異常下不能超過父類相應方法丟擲的異常(子類異常不能大於父類異常)3.子類方法的訪問級別不能低於父類相應方法的訪問級別(子類訪問級別不能低於父類訪問級別。

題目集6(7-5)圖形面積的求和,和比較此題問題看似簡單但是這裡運用我們剛學的多型性,對於多型我剛開始還是很陌生,引用老師的說法一個物件具備多種形態,也可以理解為事物存在的多種體現形態。

(父類的引用型別變數指向了子類物件,或者是介面的引用型別變數指向了介面實現類的物件)。此題通過實驗報告能大概理解多型怎麼用所謂的“多型”,簡單的理解就是物件在不同情況下的不同表現,具體體現在定義和功能兩個方 面,簡單的總結一下,多型可以用“三個定義和兩個方法”來總結。三個定義分別是父類定義子類構 建、介面定義實現類構建和抽象類定義實體類構建,而兩個方法分別是方法過載和方法重寫。本次作 業我們採用的是抽象類定義、實體類構建的方式。即 Shape 為抽象類,Circle、Rectangle 及 Triangle 為實體類。抽象的方法和抽象類的引用剛開始理解的不算透徹,但是具有抽象方法的一定是抽象類。抽象類無法直接建立物件,只能被子類繼承後,建立子類物件。getArea()方法為抽象方法,功能為求得圖形的面積;validate()方法也為抽象方法,對圖形的屬 性進行合法性校驗;toString()繼承自 Object,功能為輸出圖形的面積資訊。
子類需要繼承抽象父類並完成最終的方法實現細節(即重寫方法,完成方法體)。而此時,方法重寫不再是加強父類方法功能,而是父類沒有具體實現,子類完成了具體實現,我們將這種方法重寫也叫做實現方法。Array.list連結串列可以說是動態陣列的應用,toArray()方法會返回List中所有元素構成的陣列。剛開始用動態陣列,用的不是很6但是用起來真的好方便。

踩坑心得:此題剛開始做就沒想明白動態陣列怎麼存,這是我感覺遇到過很大的問題,在就是抽象類種方法的引用也是剛開始遇到很多困難。

三次正則表示式的應用

(1)題目集三次正則表示式相對前幾次題目集正則相對簡單,題目集六第一題查詢QQ號是否合法。相對來說還比較好處理,剛開始寫這道題也出現一些小錯誤。

採坑心得:

剛開始範圍取的不對是{4-14},應該是{5-14}。

正則表示式訓練-驗證碼校驗

這道題也很容不易,也是在QQ號檢測的基礎上稍加修改就能完成,就是驗證碼有字母的檢驗。

該正則表示式用於檢測字串型別以及字串長度。

正則表示式訓練-學號校驗:

滿足條件:1、2位:入學年份後兩位,例如20年;3、4位:學院程式碼,軟體學院程式碼為20;5位:方向程式碼,例如1為軟體工程,7為物聯網;6位:班級序號;7、8位:學號(序號)。

運用的正則表示式用於分段式字串檢測,字串中有固定的字元,只需要簡單的通過正則表示式描繪出特性即可以完成檢測。

統計Java程式中關鍵詞的出現次數

".*//.*"用於檢測資料和後續字元。
str1 = strx[i].replaceAll("//.*", " "); 將檢測的字串轉化為空格。
".*/\\*.*?\\*/.*"檢測/*和*/之間的字元。
str2 = str1.replaceAll("/\\*.*?\\*/", " ");將字元替換成空格。
".*\\\"([^\\\"]*)\\\".*"檢測[]。
str3 = stry.replaceAll("\\\"([^\\\"]*)\\\"", " ");檢測的結果替換成空格
str4 = strz.replaceAll("\\p{Punct}", " ")將標點符號換成空格。
關鍵字題目沒有實現,後面在和同學討論中才逐漸明白當時存在的問題,主要原因就是正則字串處理轉換我還是不太清楚,後續查詢有關的做法才明白題目的主要處理手段,在這幾次題目集中簡單的正則還能實現,但是每次做到要求實現功能多的正則表示式,因為是初學者,在對知識點認知較少導致我
只要是做到有關正則的題目心裡都有點畏懼感,應該在後面的學習多加練習,現在是我唯一能做的,希望下次做到正則大題我能做的好一點。

第二階段Blog總結:

第二次的部落格總結到這裡就要結束了,與上次所有題目集來說這一階段的題目集我收穫的還是很多,上一次我們在類裡面摸索,這一次我們在類基礎上完成架構,在類設計的基礎上,通過對繼承,多型,介面等多方面學習,也逐漸明白各自的用法和存在的缺點,面向物件程式設計的思想這幾次題目集我們才是真正走進JAVA程式設計的開始,面向物件程式設計不同於面向過程程式設計,在創立一個物件後便有明確的功能性,通過繼承,多型,介面可以實現不同物件實現不同的功能,每一個類之間的關係逐漸優化高偶合低聚合的目標在不斷改進,我們也在每一次的改進中理解到什麼題目應該怎樣去設計才能更好,我認為這才是題目集想要我們學到的東西,學習類屬性的訪問許可權主要分為四個部分:public,private,protected,default;以及不同類的型別:實體類,業務類,介面類;在類設計上我們學習的思維越多有助於以後我們的程式設計基礎,思路也逐漸變得開闊,在不同題目中都有自己獨特的理解方式,尤其是日期題目的兩次改動,讓我真正理解聚合的用法,不同的設計方法效果完全不同。

對於字串的處理,和正則表達試的應用掌握對複雜資料的校驗,擷取,替換,作為一種對字元和字串處理的工具我應用的不是很流暢,也是我下一階段主要練習的地方,對於LIST我感覺是真的好用,極大的優化程式碼,動態的陣列,在C裡面可以理解為指標

,對於字串的學習我還有很多處理,學習總該是在不斷的總結中尋找方向並且實現目標的過程。

課堂建議:老師傳授我們程式設計思維,而不是針對某一道題目,我逐漸理解老師的用以,現在感覺到對於知識點的由淺入深快樂,每一次優化都是新的挑戰。希望老師就在對我們寫的PTA作業進行總的問題指導,進行點評或者講解,總感覺一道題目拿到滿分但是不知道自己應該在哪些方面應該優化,這也是我應該學習的但是還是希望老師多加點評。

第二階段於此就告一段落了,首先感謝OOP課程的老師與助教的付出。我將會以全新的心態去完成後面的題目集,在後面的題目集中攻堅克難。