章永龍 徐向英



摘要:針對學生在Android實踐訓練過程中存在的代碼“復制-粘貼”現象,即代碼重復,分析其原因在于缺乏提煉代碼的想法以及代碼提煉無從下手,更深層原因是對面向對象設計模型理論理解不足。以“案例-方法-案例改進”為線,探討面向對象知識在Android項目代碼中的靈活運用以提高代碼重用性。
關鍵詞:Android課程;Java;重用性
Abstract: For the code "copy paste" phenomenon in the process of Android practice training, i.e., code duplication. The reason is twofold, one is the lack of the idea and inability of refining code, and the other is the insufficient understanding of object-oriented design model theory. According to the mean of "case-method-case improvement", this paper will discuss the flexible application of object-oriented knowledge in Android project code in order to improve code reusability.
Keywords: Android course; Java; Reusability
1 引言
市場研究機構IDC所做的2019年智能手機市場最新預測報告顯示,運行Android操作系統的智能手機市場份額從2018年的85.1%上漲到87%。面對如此大的市場需求,各地高職、高校競相開設Android系列課程,甚至將其作為人才培養計劃的重要支撐內容。通過Android課程[1]學習,使學生具備開發復雜功能的Android應用程序的能力。但在實際教學過程中發現存在一些問題,例如:在課程學時安排方面,存在理論學時比重過大,實踐學時比重過小,完全不符合Android課程實踐性極強的特點,導致學生在學習過程中不知如何將理論知識靈活運用到Android實踐訓練過程中,容易造成學生的畏懼情緒,從而失去學習和實踐興趣。另外,Android課程所依賴的程序設計語言主要以Java為主,而在Java程序設計課程授課過程中,卻將大部分學時放在變量、常量、流程控制語句、數組等過程語言內容部分,而面向對象設計的主要內容,如:繼承、多態、接口等,講解得過少,甚至因為學時不夠而放棄,造成“學而不精”,以致編寫代碼過程中經常出現“復制-粘貼”現象,很少甚至沒有學生會進一步考慮代碼的優化,利用面向對象設計的核心思想去提煉代碼,減少代碼的冗余,提高代碼的重用性。
代碼重用在Android項目開發過程中起著重要作用,具有精簡代碼、提升可讀性和維護性、減少重復編碼、縮短開發時間等作用。如何在教學過程中講解代碼重用的方法與技巧是授課教師所需要思考的,關系到學生“代碼優化意識”培養以及獨立思考和解決問題能力的提升。本文以“案例-方法-案例改進”為主軸,討論面向對象知識點在Android項目編碼中的靈活運用以提高代碼重用性。
2 案例分析
以“圖書銷售App”為例,其主要包含圖書管理、客戶管理、訂單管理等功能模塊,界面展示利用RecyclerView控件來呈現圖書、客戶和訂單信息。具體邏輯流程如圖1所示:
App端邏輯代碼利用Retrofit帶參調用遠程應用服務端的應用接口,應用接口接收到請求之后,通過形成SQL語句操作數據庫,檢索數據庫中相應的數據表數據,并將檢索數據結果集以JSON形式回傳給App端,并在RecyclerView控件上展示。下面以圖
從上述代碼可以看出,只需要將其中的Books替換成Customs和Orders,并“復制-粘貼”就可以分別完成客戶和訂單的數據加載邏輯功能,這種現象經常出現在學生Android項目實訓過程中。出現這種情況的原因在于:要么是習慣于不假思索的“復制-粘貼”,而從未考慮過代碼優化;要么不知道運用哪些方法對重復代碼進行優化。
3 重用性方法
在這一節,圍繞著上一節的案例,重點介紹面向對象Java語言中實現代碼重用的幾種方法。
3.1? 泛型
泛型[2]常用于集合類,如List、Set、Map,其保證編譯時類型安全監測,使得代碼具有更好的安全性和可讀性。在本質上,泛型就是類型參數化,即將所操作的數據類型指定為一個抽象參數,類似方法中的變量參數(形參),在實際使用中需要傳入具體的數據類型,稱為類型實例化。當涉及數據不同,數據操作相同或相似時,就可以使用泛型形成類似于C++語言中函數模板或類模板的泛型方法、泛型類和泛型接口。因此,可將上述案例中涉及Books類型的地方使用泛型表示,將BooksActivity類修改為泛型類CommActivity
3.2? 繼承
繼承[3]是面向對象語言中的重要特性之一,借鑒生物遺傳與變異法則,在已存在類的基礎上,通過添加新的屬性或方法,或者對已存在類方法進行重構來創建新的類。顯然,繼承可以方便復用已有的代碼,提高開發效率。在實際項目開發過程中,對于若干個相同或者相似的類,可以抽象出它們共有的行為或者屬性并將其定義成一個父類或者超類,這些類繼承該父類。在上述案例中,圖書、客戶和訂單數據加載和展示邏輯相同,因此,可定義一個父類CommActivity。然后,利用繼承機制分別創建派生類BooksActivity、CustomsActivity和OrdersActivity。