章永龍 徐向英
摘要:針對(duì)學(xué)生在Android實(shí)踐訓(xùn)練過程中存在的代碼“復(fù)制-粘貼”現(xiàn)象,即代碼重復(fù),分析其原因在于缺乏提煉代碼的想法以及代碼提煉無從下手,更深層原因是對(duì)面向?qū)ο笤O(shè)計(jì)模型理論理解不足。以“案例-方法-案例改進(jìn)”為線,探討面向?qū)ο笾R(shí)在Android項(xiàng)目代碼中的靈活運(yùn)用以提高代碼重用性。
關(guān)鍵詞: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 引言
市場(chǎng)研究機(jī)構(gòu)IDC所做的2019年智能手機(jī)市場(chǎng)最新預(yù)測(cè)報(bào)告顯示,運(yùn)行Android操作系統(tǒng)的智能手機(jī)市場(chǎng)份額從2018年的85.1%上漲到87%。面對(duì)如此大的市場(chǎng)需求,各地高職、高校競(jìng)相開設(shè)Android系列課程,甚至將其作為人才培養(yǎng)計(jì)劃的重要支撐內(nèi)容。通過Android課程[1]學(xué)習(xí),使學(xué)生具備開發(fā)復(fù)雜功能的Android應(yīng)用程序的能力。但在實(shí)際教學(xué)過程中發(fā)現(xiàn)存在一些問題,例如:在課程學(xué)時(shí)安排方面,存在理論學(xué)時(shí)比重過大,實(shí)踐學(xué)時(shí)比重過小,完全不符合Android課程實(shí)踐性極強(qiáng)的特點(diǎn),導(dǎo)致學(xué)生在學(xué)習(xí)過程中不知如何將理論知識(shí)靈活運(yùn)用到Android實(shí)踐訓(xùn)練過程中,容易造成學(xué)生的畏懼情緒,從而失去學(xué)習(xí)和實(shí)踐興趣。另外,Android課程所依賴的程序設(shè)計(jì)語言主要以Java為主,而在Java程序設(shè)計(jì)課程授課過程中,卻將大部分學(xué)時(shí)放在變量、常量、流程控制語句、數(shù)組等過程語言內(nèi)容部分,而面向?qū)ο笤O(shè)計(jì)的主要內(nèi)容,如:繼承、多態(tài)、接口等,講解得過少,甚至因?yàn)閷W(xué)時(shí)不夠而放棄,造成“學(xué)而不精”,以致編寫代碼過程中經(jīng)常出現(xiàn)“復(fù)制-粘貼”現(xiàn)象,很少甚至沒有學(xué)生會(huì)進(jìn)一步考慮代碼的優(yōu)化,利用面向?qū)ο笤O(shè)計(jì)的核心思想去提煉代碼,減少代碼的冗余,提高代碼的重用性。
代碼重用在Android項(xiàng)目開發(fā)過程中起著重要作用,具有精簡(jiǎn)代碼、提升可讀性和維護(hù)性、減少重復(fù)編碼、縮短開發(fā)時(shí)間等作用。如何在教學(xué)過程中講解代碼重用的方法與技巧是授課教師所需要思考的,關(guān)系到學(xué)生“代碼優(yōu)化意識(shí)”培養(yǎng)以及獨(dú)立思考和解決問題能力的提升。本文以“案例-方法-案例改進(jìn)”為主軸,討論面向?qū)ο笾R(shí)點(diǎn)在Android項(xiàng)目編碼中的靈活運(yùn)用以提高代碼重用性。
2 案例分析
以“圖書銷售App”為例,其主要包含圖書管理、客戶管理、訂單管理等功能模塊,界面展示利用RecyclerView控件來呈現(xiàn)圖書、客戶和訂單信息。具體邏輯流程如圖1所示:
App端邏輯代碼利用Retrofit帶參調(diào)用遠(yuǎn)程應(yīng)用服務(wù)端的應(yīng)用接口,應(yīng)用接口接收到請(qǐng)求之后,通過形成SQL語句操作數(shù)據(jù)庫,檢索數(shù)據(jù)庫中相應(yīng)的數(shù)據(jù)表數(shù)據(jù),并將檢索數(shù)據(jù)結(jié)果集以JSON形式回傳給App端,并在RecyclerView控件上展示。下面以圖
從上述代碼可以看出,只需要將其中的Books替換成Customs和Orders,并“復(fù)制-粘貼”就可以分別完成客戶和訂單的數(shù)據(jù)加載邏輯功能,這種現(xiàn)象經(jīng)常出現(xiàn)在學(xué)生Android項(xiàng)目實(shí)訓(xùn)過程中。出現(xiàn)這種情況的原因在于:要么是習(xí)慣于不假思索的“復(fù)制-粘貼”,而從未考慮過代碼優(yōu)化;要么不知道運(yùn)用哪些方法對(duì)重復(fù)代碼進(jìn)行優(yōu)化。
3 重用性方法
在這一節(jié),圍繞著上一節(jié)的案例,重點(diǎn)介紹面向?qū)ο驤ava語言中實(shí)現(xiàn)代碼重用的幾種方法。
3.1? 泛型
泛型[2]常用于集合類,如List、Set、Map,其保證編譯時(shí)類型安全監(jiān)測(cè),使得代碼具有更好的安全性和可讀性。在本質(zhì)上,泛型就是類型參數(shù)化,即將所操作的數(shù)據(jù)類型指定為一個(gè)抽象參數(shù),類似方法中的變量參數(shù)(形參),在實(shí)際使用中需要傳入具體的數(shù)據(jù)類型,稱為類型實(shí)例化。當(dāng)涉及數(shù)據(jù)不同,數(shù)據(jù)操作相同或相似時(shí),就可以使用泛型形成類似于C++語言中函數(shù)模板或類模板的泛型方法、泛型類和泛型接口。因此,可將上述案例中涉及Books類型的地方使用泛型表示,將BooksActivity類修改為泛型類CommActivity
3.2? 繼承
繼承[3]是面向?qū)ο笳Z言中的重要特性之一,借鑒生物遺傳與變異法則,在已存在類的基礎(chǔ)上,通過添加新的屬性或方法,或者對(duì)已存在類方法進(jìn)行重構(gòu)來創(chuàng)建新的類。顯然,繼承可以方便復(fù)用已有的代碼,提高開發(fā)效率。在實(shí)際項(xiàng)目開發(fā)過程中,對(duì)于若干個(gè)相同或者相似的類,可以抽象出它們共有的行為或者屬性并將其定義成一個(gè)父類或者超類,這些類繼承該父類。在上述案例中,圖書、客戶和訂單數(shù)據(jù)加載和展示邏輯相同,因此,可定義一個(gè)父類CommActivity。然后,利用繼承機(jī)制分別創(chuàng)建派生類BooksActivity、CustomsActivity和OrdersActivity。