一、前言
本學期的Java面向對象程序設計課程采用的是線上課和線下課結合,同時通過PTA作業(yè),實驗,Blog將理論與實踐相結合的模式,讓我們較為系統(tǒng)地學習并掌握面向對象編程的核心思想和技術實現(xiàn)。
首先,本門課程通過學堂在線的線上課程達到一個預習與知識補充的效果,然后通過線下課程對知識進行更加具體詳細的講解,一段時間之后便開始了PTA平臺上的各種習題,這是這門課程的主體部分,一般是一個星期一次,題量三到五題不等,任務量因題目難度而變,一般較為適中,難度則是根據(jù)學習階段和題目考察的方向變化,比如之前考察的電梯調度程序考察的是算法,后面的航空貨運管理則更傾向于考察我們對類的設計,要求我們符合面向對象程序設計的思想,總體難度遞增,之后還有就是本門課程的實驗動物裝進電器中,總共五個,都是在上一次實驗上進行迭代,平均六到八個學時,難度適中,然后每次的PTA迭代性大作業(yè)都會有Blog作業(yè)來對之前幾次的作業(yè)進行整理復盤,我覺得這是相當重要和實用的,可以讓我們對知識進行比較系統(tǒng)的梳理,形成結構化認知,對所學內容碰到的錯誤進行復盤。
整體而言,本門課程的工作量安排和難度層次都較為適中,達到了理論與實踐相結合,較為系統(tǒng)和全面,能夠讓我們對面向對象程序設計思想有較為深入的理解,收獲諸多。
二、面對對象技術總結
封裝
首先封裝作為面向對象的基礎原則,一直貫穿于這個學期,幾乎每次的PTA作業(yè)都會得以應用。首先我是從線上線下課初步了解學習了封裝思想,然后通過做題加深理解。比如在電梯調度程序三次迭代作業(yè)中,第一次作業(yè)就對封裝運用不夠熟練,很多地方只是對功能進行實現(xiàn),并沒有通過多個類對其進行封裝,不符合單一職責原則,所以后面的第二次作業(yè),我學會把電梯的狀態(tài)和行為單獨封裝在一個類內部等等。這樣設計可以有效防止了外部對對象內部狀態(tài)的直接修改,提高了系統(tǒng)的安全性和健壯性,同時代碼可讀性也更好,因為是迭代作業(yè)這樣還可以節(jié)約工作量。航空貨運系統(tǒng)中,通過將貨物的信息和計費邏輯單獨進行封裝,實現(xiàn)解耦合設計,當計費規(guī)則變更時,只需修改相應類而不影響整個系統(tǒng)。
繼承
繼承是面對對象編程的非常重要的思想概念,繼承概念其實挺好理解,最為典型的例子我覺得就是當時老師課上講的Shape圖形類,其子類可以是Circle圓形,Rectangle矩形等等,后面的PTA里面的點線面問題還有實驗里的Animal類作為大象,老虎和獅子的父類等等也都能夠很好體現(xiàn)繼承思想。通過繼承,我們可以減少很多重復的代碼,通過繼承父類的從而無需再在其子類當中重新定義共有的屬性方法等等,同時繼承還可以提高代碼的可擴展性和可維護性,這是尤為重要的,有了繼承,我們可以更加方便的添加新功能,且代碼會變得便于修改,同時代碼的可讀性也會大大提高。而且,繼承是實現(xiàn)多態(tài)的基礎,有了繼承才便于我們去使用多態(tài)。
多態(tài)
多態(tài)同樣也是面對對象編程的非常重要的概念,多態(tài)允許使用父類類型的引用來指向其子類的對象,并通過父類的接口調用方法。這樣的話,編寫代碼就可以不依賴于具體的子類類型,而是依賴于父類的通用接口。比如說我們實驗的Animal類有shout方法來表示動物進入電器后的叫聲,通過多態(tài)我們就可以引用Animal類型的方法,而無需知道具體是大象,老虎還是獅子對象。這樣做的好處有很多,可以增強代碼的可擴展性,可維護性,提高代碼的靈活性可讀性和解耦合。
抽象類和接口
抽象類和接口,從一般命名中看,抽象類一般作為名詞,和子類呈現(xiàn)一種“is”的關系,而接口則一般命名形容詞,可怎么的,和子類呈現(xiàn)一種“can do”關系,更傾向一種行為關系。抽象類只能夠單繼承,而接口允許一個類實現(xiàn)多個接口,從而支持多繼承的特性,這樣使得類可以同時具備多種行為而不破壞單一繼承規(guī)則。比如Comparable接口定義的compareTo方法,還有航空貨運管理系統(tǒng)中對支付方式的類定義,下面子類AliPay支付寶支付,WeChatPay微信支付還有CashPay現(xiàn)金支付等等。抽象類和接口促進了代碼的復用,提高了代碼的可擴展性,可維護性,解耦合等等。
集合框架
集合框架是一組工具集合,可以極大的簡化一些操作,提高代碼可讀性,可維護性和復用性。這個學期中也多次用到了集合框架,比如在電梯調度程序中使用LinkedList管理請求隊列,通過一些比如add(),remove()等等方法,便于對電梯內部成員進行增刪改查操作;還有圖形計算面積的作業(yè)中通過ArrayList存儲形狀對象,并應用Collections.sort()實現(xiàn)排序,通過這些習題,我們較為深刻的理解了集合框架的好處和不同集合類型的適用場景。
異常處理
異常處理是課程比較后面學的,它是通過捕獲和處理異常,使得程序可以在遇到錯誤的時候繼續(xù)運行,而不是直接就崩潰。通常有文件找不到FileNotFoundException數(shù)組越界ArrayIndexOutOfBoundsException空指針引用NullPointerException等等,通過處理異常,這樣就可以便于找到是哪一部分出錯,便于調試和維護。
JavaFx技術
JavaFX作為課程引入的GUI技術,通過我們自行通過互聯(lián)網學習,并且在課堂上進行知識分享,這個機會是我們比較缺少的,所以體驗上還行。通過閱讀課本然后上網上csdn還有聽別的同學分享等等方式,我初步的學習了解了JavaFx的一些基礎知識應用,我學習了如何使用 JavaFX 創(chuàng)建窗口、布局組件、添加事件監(jiān)聽器,對事件監(jiān)聽處理等等。但是,由于教學時間比較少,然后內容又非常多,所以雖然現(xiàn)在能夠完成一些簡單的界面設計,但實現(xiàn)復雜交互和界面美觀優(yōu)化等方面,我還存在很多不足,需要進一步學習和探索。
踩坑心得
在本門課程的學習過程中,我走過不少彎路,同時也積累了寶貴的經驗教訓。剛開始學Java的時候,由于還沒從C語音面向過程適應過來,我對代碼的編寫還是停留在功能的實現(xiàn)上,所以最初的幾次作業(yè)的類結構上設計的不好,這一點在之后的迭代性作業(yè)上得到了狠狠的教訓。后來又是在繼承多態(tài)抽象類那里碰到了問題,什么時候使用繼承,什么時候用抽象類還是用接口,兩者之間有什么區(qū)別,還有子類要實現(xiàn)接口功能等等問題。?另外,在處理集合框架和異常處理時,我也遇到了一些問題,比如什么時候用ArrayList什么時候用LinkedList,他們的優(yōu)缺點等等。還有在捕獲異常時,使用了過于寬泛的異常類型,使得程序無法準確處理具體的錯誤。通過這些教訓經驗,我對面對對象設計的理解更加深刻,同時讓我對于一些報錯不再感到害怕,能夠去處理一些問題。
改進建議及總結
課程內容總結
本學期的Java面向對象程序設計這門課程為我面對對象編程打下了良好的基礎,讓我以后不管是學習C++還是Python等都有一個較好基礎。本門課程,由易到難,線上線下課程并行,理論和實踐相結合,題目任務量適中,難度也有難有易,整體綜合性來講很棒,讓我收獲很大,學到了很多。最為精華的我覺得就是迭代性大作業(yè)加上之后的博文Blog總結,讓我從剛開始太難了不想寫到后來也能夠成功完成并且一次次的收獲新的知識,這種成長成就感能幫助我們學習知識。
改進建議
首先就是我覺得線上課程講的內容太少了,一個是對課程知識講的太淺了,很多就是簡單的提了一下,這樣壓力就給到了線下課程,如果我某一次課程我的狀態(tài)不好,可能聽課效果不佳,課后想補就會比較麻煩;
再一個就是其實可以多一些課外知識的補充視頻,比如線上課的正則表達式,我覺得還可以加上lamda表達式等等作為拓展;
然后,建議老師在課堂上增加更多的互動環(huán)節(jié),比如分組討論等,鼓勵大家積極參與,營造更加活躍的學習氛圍;
另外,雖然我們作業(yè)有PTA的大作業(yè)還有實驗,但是對于那種選填考察基本常識的題目訓練還是比較缺少的,希望老師可以在線上布置一些相關的常識性小題目給我們;
還有就是學校的實驗提交系統(tǒng)我覺得有點簡陋了些,剛開始有一些bug,比如我前面寫了中文,后面即使我的輸入法切換了英文后面還是中文輸入法,而且字體又小,后面的報錯改起來也麻煩,所以希望優(yōu)化一下實驗提交系統(tǒng);
最后在此感謝一下老師的教導,老師辛苦了。
浙公網安備 33010602011771號