版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
.3管理員需求 6目錄TOC\o"1-5"\h\z\o"CurrentDocument"摘要 I\o"CurrentDocument"Abstract II\o"CurrentDocument"前言 1\o"CurrentDocument"第1章概述 2緒論 2課題背景 2課題研究的意義 2\o"CurrentDocument"手機(jī)銷售網(wǎng)站的現(xiàn)狀 3\o"CurrentDocument"開發(fā)工具 3JAVADODO 3TomcatODO 3MySQLODD 3JSP 4MyEclipse 4第2章需求分析 6\o"CurrentDocument"需求確定 6普通用戶需求 6會員用戶需求 62.22.2架構(gòu)分析與設(shè)計 74.3.1Product4.3.1Product類JavaBean的封裝 24邏輯架構(gòu) 7物理架構(gòu) 7\o"CurrentDocument"第3章系統(tǒng)總體設(shè)計 8系統(tǒng)類圖 8\o"CurrentDocument"數(shù)據(jù)庫結(jié)構(gòu)與表設(shè)計 9User表 10Product表 10Category表 11SalesOrder表 11SalesItem表 11頁面設(shè)計 12前臺 12后臺(adminODO) 14\o"CurrentDocument"第4章功能實現(xiàn) 16數(shù)據(jù)庫連接 16會員模塊 16User類 16用戶模塊后臺 17會員模塊前臺 22產(chǎn)品模塊 .2產(chǎn)品類接口設(shè)計 24產(chǎn)品類接口的實現(xiàn) 25產(chǎn)品模塊前端 31文件上傳 35\o"CurrentDocument"購物車模塊 37購物車后臺 37購物車前臺 40下單模塊 42訂單對象實體類 42訂單接口設(shè)計 42訂單的接口實現(xiàn) 43訂單前臺的處理 43\o"CurrentDocument"第5章系統(tǒng)運行測試 46代碼審查 46會員模塊測試 46商品購買功能測試 47管理員模塊測試 48結(jié)論 52\o"CurrentDocument"總結(jié)與體會 53\o"CurrentDocument"謝辭 54\o"CurrentDocument"參考文獻(xiàn) 55附錄一英文原文 56附錄二中文譯文 61第 第 # 頁response.sendRedirect("UserLogin.jsp");return;TOC\o"1-5"\h\z}Cartc= (Cart) session.getAttribute("cart");if(c== null) {c=newCart();session.setAttribute("cart", c);}Stringaddr = request.getParameter("addr");u.setAddr(addr);//重新設(shè)置 user對象中的地址intorderId = u.buy(c);session.removeAttribute("cart");%>第章系統(tǒng)運行測試代碼審查一般的軟件測試應(yīng)該進(jìn)行代碼會審。 代碼會審是由一組人通過閱讀、 討論和爭議對□□□□□□□□□□□ □□□□□□□, 213名程序設(shè)計和測試人員及程序員組成。會審小組在充分閱讀待審程序文本、 控制流程圖及有關(guān)要求、 規(guī)范等文件基礎(chǔ)上, 召開代碼會審會,程序員逐句講解程序的邏輯, 并展開熱烈的討論甚至爭議, 以揭示錯誤的關(guān)鍵所在。針對本系統(tǒng)的開發(fā)特點, 開發(fā)者本人再一次對所編寫代碼進(jìn)行審查, 并將其講解給確實可以發(fā)現(xiàn)許多自己原來沒有發(fā)周圍同學(xué)。實踐證明,當(dāng)再一次進(jìn)行閱讀和講解時,現(xiàn)的錯誤。確實可以發(fā)現(xiàn)許多自己原來沒有發(fā)會員模塊測試點擊如圖 5T所示□□□□□□□ □□□□□□□□□□□□□, □□□□□□□□□□□□□□□□, 如圖5-3□□□□□□□□□□□□□□ □□□□□□□□□□□□□□ 5-4所示頁面, □□□□□□□□□□, □□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□(!)£?笈損篇殺(!)會員號:密碼:[新用戶注冊][忘記密碼]圖5-1用戶登錄界面圖5-1用戶登錄界面圖5-2用戶信息填寫就迎您;Z:d.修改我的信息修改我的密碼瀏覽以往訂單圖5-3用戶登錄成功用戶修改-必填內(nèi)容用戶名:電話;|123送貨地址:a2d圖5-4用戶信息修改商品購買功能測試如圖5-5所示點擊如圖5-5所示點擊□□□□□□按鈕,把該商品如圖5-6所示,□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□息,□□□□□□□如圖5-7所示,□□□□□□□□□□□□□□結(jié)賬完后,□□□□□□□□□點擊“刪□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□全部2種商品.共1.頁苫前第1.頁Nokia/諾基亞息,□□□□□□□如圖5-7所示,□□□□□□□□□□□□□□結(jié)賬完后,□□□□□□□□□點擊“刪□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□全部2種商品.共1.頁苫前第1.頁Nokia/諾基亞5800W商品編號:9市場價格:V1S00.0會員價格:¥1300.0旭磁,諾基丑5600V/58QCI終極升級版支持即向上網(wǎng)功能>我要購買囿Nokia/諾基亞5233商品編號:e市場價格:¥120口.5會員價格:¥999.0Ncikia.:諾基丑52333.2英寸160口力色高素質(zhì)"口款觸摸屏智能觸控手機(jī)圖5-5手機(jī)列表?產(chǎn)品m產(chǎn)品名稱 ?購買數(shù)量?單價總價?處理|9|Nokia/T?g#5800W11 11500.011500.0|刪除下單修改圖5-6購物車圖5-6購物車圖5-7購物車結(jié)賬■http://1ocaIhostr80B0/Shopping/Orderjsp■http://1ocaIhostr80B0/Shopping/Orderjsp-Windc靜?http://localhost:8D&O/&hopping/On令帆遇|虞s建設(shè)網(wǎng)站▼@網(wǎng)頁快謬▼爵http://localhost&OBO/Sh□pping/Order.jsp單已下!號:7圖5-8購買成功管理員模塊測試刪除和修改商品,□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□刪除和修改商品,□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□5—9所示,5-10□□□□□□□□□□□□□□□5-10□□□□□□□□□□□□□□□□□□□□□□□5-13、5-14□□,□□□□□□□□□□□□□□□5-15、□□□□□□□□5-13、5-14□□,□□□□□□□□□□□□□□□5-15、5-16□□□□□□□□□□圖5-9管理員登錄界面用戶管理口類別管理類別列表類別列表4JAX產(chǎn)品管理,產(chǎn)品列表產(chǎn)品搜索用訂單管理,,訂單列表個統(tǒng)計分析為直播管理圖5-10管理員權(quán)限界面添加恨尖利類別編號類別名稱類別?述PID代表學(xué)串級別處理1手機(jī)手機(jī)0100001修改類別添加子類別2--諾基亞1101002修改類別添加子類別3…-三星1102002修改類別添加子類別4--HTC1103002修改類別添加子類別5--蘋果1104002修改類別添加子類別6--摩托羅拉1105002修改類別添加子類別圖5-11類別列表界面涿加類用-必填向容類別名稱:1 ―1類別描述:Jjj圖5-12類別添加產(chǎn)品管理》產(chǎn)品列表添加新產(chǎn)品|11|1/6|1|2|3|4|5|6|>|>| -|選擇 產(chǎn)品ID 產(chǎn)品名稱 產(chǎn)品據(jù)述 市場價格 會員價格 上架時間 所屬類別 處理r11Motorola/摩托羅拉EX226送電池Motorola/摩托羅拉EX226雙卡雙待觸摸鍵盤行貨433.02012-05-0122:46:34摩托羅拉刪改上傳r10Motorola/摩托羅拉XT615Motorola/屋托羅拉XT615手機(jī)智能安卓正品行貨全國聯(lián)保帚發(fā)票1900.02012-05-0122:46:07摩托羅拉刪改上傳|r|Delete1提交11 搜索或排序方式:積分-用戶名-性別-注冊日期-管理頭銜圖5-13商品界面高級搜索圖5-14商品刪除簡單搜索類別:一蘋果圖5-16搜索結(jié)果注冊時間送貨地址提交I或排序方式:租分-用戶名-性別-注冊日期-管理頭銜圖5-17用戶列表用戶名 UID聯(lián)系電話11231232012-05-0121:39:27ZC123418888888882012-05-0616:50:27213213123sdsqdl234629211/1852| |6市場價格Fruni會員價格FruniFroKi123321產(chǎn)品管理”產(chǎn)品列表重走圖5-15商品搜索添加新產(chǎn)品來自同應(yīng)的消息真的要冊?確定產(chǎn)品七:iphQnc搜索提森」提交.選擇 產(chǎn)品ID 產(chǎn)品名環(huán) 產(chǎn)品摘逑 市場價格 會員價格 上架時間 所屬類別 處理r1IPH0NE4S蘋果IPHONE4s4998.04998.02012-05-0121:51:38蘋果刪改|廠|Delete.|iphone 搜索提交|或排序方式:積分-用戶名-性別-注冊日期-管理頭銜IDusern;airieaddi1□datestatus1null1111S012-Q5-0122<G2:19/.OQ訂至明即f.訂單修改2:zcl234213213123sdsqdl23r,012-05-0616751;50..00訂單明1訂單修改下一頁圖5-18訂單列表經(jīng)過測試,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□不一。后經(jīng)分析發(fā)現(xiàn),開發(fā)使用的電腦是 16:10寬屏設(shè)計,因此造成了一般尺寸的筆記本顯示器顯示不正常的現(xiàn)象。 及時修改頁面大小可以修正此問題。 其他功能未發(fā)現(xiàn)異常。經(jīng)過上述的測試過程對軟件進(jìn)行測試后, 窗體大小合適, 控件布局合理, 軟件基本滿足開發(fā)的要求,測試宣告結(jié)束,經(jīng)驗收后,軟件可投入使用。本系統(tǒng)設(shè)計實現(xiàn)了一個手機(jī)銷售網(wǎng)站。本網(wǎng)站采用了流行的三層架構(gòu),采用JSP作為開發(fā)環(huán)境,MySQL作為數(shù)據(jù)庫服務(wù)器通過將整個系統(tǒng)分為不同的邏輯模塊,大大降低了應(yīng)用程序系統(tǒng)開發(fā)和維護(hù)的成本,提高了系統(tǒng)模塊的復(fù)用性,同時使系統(tǒng)的可擴(kuò)展性大大提高。由于本系統(tǒng)設(shè)計實現(xiàn)了一個手機(jī)銷售網(wǎng)站。本網(wǎng)站采用了流行的三層架構(gòu),采用JSP作為開發(fā)環(huán)境,MySQL作為數(shù)據(jù)庫服務(wù)器通過將整個系統(tǒng)分為不同的邏輯模塊,大大降低了應(yīng)用程序系統(tǒng)開發(fā)和維護(hù)的成本,提高了系統(tǒng)模塊的復(fù)用性,同時使系統(tǒng)的可擴(kuò)展性大大提高。由于JSP自身的優(yōu)點,本網(wǎng)站對系統(tǒng)的要求較低,兼容性很好,為網(wǎng)站的推廣使用提供了便利和可能。在線手機(jī)銷售系統(tǒng)的開發(fā)過程中,通過對JSP在線手機(jī)銷售系統(tǒng)的開發(fā)過程中,通過對JSP技術(shù)的學(xué)習(xí)和運用,我充分體會到了JSP技術(shù)在系統(tǒng)移植方面出眾的優(yōu)點以及它的無限魅力。JSP技術(shù)在系統(tǒng)移植方面出眾的優(yōu)點以及它的無限魅力。JSP技術(shù)正在不同的方式影響者企業(yè)、個人和開發(fā)人員。對于個人,JSP技術(shù)將網(wǎng)絡(luò)商店變得更加普遍的同時也更加個性化。對于企業(yè)和網(wǎng)站開發(fā)人員,JSP技術(shù)讓開發(fā)變得更加簡便和實用,與傳統(tǒng)開發(fā)方法相比執(zhí)行效率也更高,它將改變企業(yè)的銷售模式,使IT真正成為企業(yè)成功的重要因素。在系統(tǒng)開發(fā)過程中,我遇到了這樣那樣的問題,經(jīng)過老師和同學(xué)的熱心幫助都一一解決, 從直觀的角度講,在線手機(jī)銷售系統(tǒng)的界面還不夠美觀。由于時間關(guān)系,本人掌握的素材有限。本系統(tǒng)中并沒有能夠完全發(fā)揮出它的強(qiáng)大功能,把圖形化界面做到美輪企業(yè)、個人和開發(fā)人員。對于個人,JSP技術(shù)將網(wǎng)絡(luò)商店變得更加普遍的同時也更加個性化。對于企業(yè)和網(wǎng)站開發(fā)人員,JSP技術(shù)讓開發(fā)變得更加簡便和實用,與傳統(tǒng)開發(fā)方法相比執(zhí)行效率也更高,它將改變企業(yè)的銷售模式,使IT真正成為企業(yè)成功的重要因素。在系統(tǒng)開發(fā)過程中,我遇到了這樣那樣的問題,經(jīng)過老師和同學(xué)的熱心幫助都一一解決, 從直觀的角度講,在線手機(jī)銷售系統(tǒng)的界面還不夠美觀。由于時間關(guān)系,本人掌握的素材有限。本系統(tǒng)中并沒有能夠完全發(fā)揮出它的強(qiáng)大功能,把圖形化界面做到美輪美奐。 在今后還應(yīng)該注意積累素材,不斷修改,讓界面趨于完美。購物車模塊也有不足之處,管理員不能動態(tài)的對用戶已經(jīng)購買的產(chǎn)品價格進(jìn)行修改,這就有一定的局限性。本系統(tǒng)中諸如以上的功能尚不完善的地方還有不少,相信在今后不斷的開發(fā)和維護(hù)本系統(tǒng)中諸如以上的功能尚不完善的地方還有不少,相信在今后不斷的開發(fā)和維護(hù)過程中,系統(tǒng)的功能會一步步趨于完善,真正做到購銷雙方都得心應(yīng)手。總結(jié)與體會□□□□□□□□,□□□□□□□□□□,□□□□□□□,□□□□□□□□□□□□□□□□□□□□□,□□□□□,□□□□□□□□□□□□,□□□□□業(yè)知識方面和動手能力方面有了質(zhì)的飛躍?!酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢?□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□,畢業(yè)□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□能力;□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□,指導(dǎo)做口□□□□□□□□□□□□□□□□□□□□□其次,□□□□□□□□□□□□□□□□,□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□結(jié),□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□結(jié),□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,而且也是對自己能力的一種提高?!酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢?而且也是對自己能力的一種提高?!酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢?□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□,□□□□□□,□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□,努力□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□,努力□□□□□□□□□□□□何入手??傊酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢酢?最后終于做完了有種如釋重負(fù)的感覺。此外,□□□□□□□,□□□□□□□:不知道如□□□□□□□□□□□□□□□!□□□□□□□□□,□□□□□□□□□□□□□□□,何入手??傊?,□□□□□□□□□□□□□□□□□□□□,最后終于做完了有種如釋重負(fù)的感覺。此外,□□□□□□□,□□□□□□□:不知道如□□□□□□□□□□□□□□□!□□□□□□□□□,□□□□□□□□□□□□□□□,所以□□□□□□□□□□□□□□□□□□□□總體而言,該系統(tǒng)基本上可以實現(xiàn)了核心功能,但是還有些欠缺。由于時間和學(xué)習(xí)到的知識有限,這些欠缺的部分將在以后的深入學(xué)習(xí)研究和對程序的優(yōu)化中加以彌補(bǔ),最終使該系統(tǒng)更加完善。謝辭大學(xué)四年即將結(jié)束, 也意味著即將告別學(xué)生生涯。 但正如比爾蓋茨所說: “人生是沒有假期的?!苯Y(jié)束的也只是學(xué)生生涯, 學(xué)習(xí)的路還很長,需要學(xué)習(xí)的還很多, 無涯的學(xué)海也才剛剛揚帆起航。沒有太多收獲,也沒有太多遺憾;沒有指點江山,激揚文字的豪情,也沒有揮一揮手,不帶走一片云彩的傷懷。沒有大喜,也沒有大悲。這就是生活!雖不是與世無爭的世外桃源,卻也閑逸、安然。唯于心不安者是辜負(fù)了父母的心血、親友的厚愛、父老的期望。大學(xué)也許是學(xué)習(xí)的殿堂, 也許是知識的象牙塔, 也許它什么也不是, 而只是作為一個現(xiàn)代人應(yīng)該經(jīng)歷的一個過程。 四年大學(xué)生活的得與失, 也是不能一言以蓋之的, 更不是僅以一篇論文所能表達(dá)的!也許正應(yīng)了一句話:“工夫全在文章外?!碑厴I(yè)論文也是自讀書以來做的時間最長的一次作業(yè), 卻不知是不是因為這是最后一次作業(yè)的緣故?做論文以來,還是頗多感受。最先讓我想到的便是 “秀才不出門,能知天下事”的道理。不過這也得益于網(wǎng)絡(luò),是它讓世界變小。□□□□□XXXXXX,特別感謝XXXX□□,□□□□□□□□□□□□□□,□□次畢業(yè)設(shè)計中, 他給了我極大的幫助和鼓勵, 才使我完成這最后的作業(yè)! 在此表示衷心的感謝。 老師認(rèn)真負(fù)責(zé)的工作態(tài)度, 嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的專業(yè)水平都使我受益匪淺。同時還要感謝同窗四年的同學(xué), 他們在學(xué)習(xí)和生活中給了我極大的幫助! 并最后, 借用孫中山先生的一句話,聊以自勉?!笆聵I(yè)尚未成功,同志仍須努力!”[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19][20]參考文獻(xiàn)劉國衛(wèi),嚴(yán)輝.數(shù)據(jù)庫技術(shù)與運用彭晨陽.Java實用系統(tǒng)開發(fā)指南-SQLServer[M].北京:清華大學(xué)出版社,[M].北京:機(jī)械工業(yè)出版社,2007.28—402004.98—1212004.1—1002004.1—100張杰.Java進(jìn)口教程[M].北京:機(jī)械工業(yè)出版社,杜江,管培森.JavaDODO100例[M].北京:中國鐵道出版社,2004.56—77唐洪亮唐洪亮.SQLServer數(shù)據(jù)庫數(shù)據(jù)與系統(tǒng)開發(fā)教程杜江.PHP5與MySQL5Web開發(fā)技術(shù)詳解戴士劍,涂彥輝.數(shù)據(jù)庫恢復(fù)技術(shù)第二版[M].北京:清華大學(xué)出版社,[M].北京:電子工業(yè)出版社[M].北京:電子工業(yè)出版社2007.45—50.2007.58—61.2005.85—92邵麗萍,邵光亞,張后揚
石志國,劉翼偉,王志良
池雅慶,周珺,岳元媛
李鐘蔚,馬文強(qiáng),王殊宇2008.10—41邵麗萍,邵光亞,張后揚
石志國,劉翼偉,王志良
池雅慶,周珺,岳元媛
李鐘蔚,馬文強(qiáng),王殊宇2008.10—412008.10—622006.5—232008.7—10.JAVA語言課程設(shè)計[M].北京:清華大學(xué)出版社,.JSP應(yīng)用教程[M].北京:清華大學(xué)出版社,.JSP項目開發(fā)實踐[M].北京:中國鐵道出版社,.JAVA項目開發(fā)實例[M].北京:人民郵電出版社,2008.1—692008.1—692009.88—992008.26—362006.23—24苗春義.JAVA項目開發(fā)全程實錄程茂,楊學(xué)全.JSPD程技術(shù)苗春義.JAVA項目開發(fā)全程實錄葉乃文.JAVA核心技術(shù)(卷一口[M].北京:清華大學(xué)出版社,[M].北京:清華大學(xué)出版社,[M].北京:清華大學(xué)出版社,[M].北京:機(jī)械工業(yè)出版社,陳昊鵬,王浩,姚建平.JAVA核心技術(shù)(卷二)[M].北京:機(jī)械工業(yè)出版社,2006.41—52關(guān)東升,田登山 .JSP網(wǎng)絡(luò)程序設(shè)計[M].北京:北京郵電大學(xué)出版社, 2011.1—67李興華.名師講壇— JAVAWEB開發(fā)實戰(zhàn)經(jīng)典基礎(chǔ)篇 [M].北京:清華大學(xué)出版社, 2010.73曾健.JSP網(wǎng)絡(luò)開發(fā)入門與實踐 [M].北京:電子工業(yè)出版社, 2008.364—404丁一口,口遠(yuǎn).WEB高級程序設(shè)計 (Java&JSP)[M].大連:大連理工大學(xué)出版社, 2011.55-62
附錄一英文原文Capitalizethefirstletterofclassnames.Thefirstletteroffields,methods,andobjects(handles)shouldbelowercase.Allidentifiersshouldruntheirwordstogether,andcapitalizethefirstletterofallintermediatewords.Forexample:ThisIsAClassNameCapitalizeallthelettersofstaticfinalprimitiveidentifiersthathaveconstantinitializersintheirdefinitions.Thisindicatestheyarecompile-timeconstants.Packagesareaspecialcase:theyarealllowercaseletters,evenforintermediatewords.Thedomainextension(com,org,net,edu,etc.)shouldalsobelowercase.(ThiswasachangebetweenJava1.1andJava1.2.)Whencreatingaclassforgeneralp-urposeuse,followa“canonicalform”andincludedefinitionsforequals(),hashCode(),toString(),clone()(implementCloneable),andimplementSerializable.Foreachclassyoucreate,considerincludingamain()thatcontainscodetotestthatclass.Youdon’tneedtoremovethetestcodetousetheclassinaproject,andifyoumakeanychangesyoucaneasilyre-runthetests.Thiscodealsoprovidesexamplesofhowtouseyourclass.Methodsshouldbekepttobrief,functionalunitsthatdescribeandimplementadiscretepartofaclassinterface.Ideally,methodsshouldbeconcise;iftheyarelongyoumightwanttosearchforawaytobreakthemupintoseveralshortermethods.Thiswillalsofosterreusewithinyourclass.(Sometimesmethodsmustbelarge,buttheyshouldstilldojustonething.)Whenyoudesignaclass,thinkabouttheclientprogrammer’sperspective(theclassshouldbefairlyobvioustouse)andtheperspectiveofthepersonmaintainingthecode(anticipatethekindofchangesthatwillbemade,tomakethemeasy).Trytokeepclassessmallandfocused.Cluestosuggestredesignofaclassare:Acomplicatedswitchstatement:considerusingpolymorphismAlargenumberofmethodsthatcoverbroadlydifferenttypesofoperations:considerusingseveralclassesAlargenumberofmembervariablesthatconcernbroadlydifferentcharacteristics:considerusingseveralclassesKeepthingsas“privateaspossible.”O(jiān)nceyoupublicizeanaspectofyourlibrary(amethod,aclass,afield),youcannevertakeitout.Ifyoudo,you’llwrecksomebody’sexistingcode,forcingthemtorewriteandredesign.Ifyoupublicizeonlywhatyoumust,youcanchangeeverythingelsewithimpunity,andsincedesignstendtoevolvethisisanimportantfreedom.Privacyisespeciallyimportantwhendealingwithmultithreading-onlyprivatefieldscanbeprotectedagainstun-synchronizeduse.Watchoutfor“giantobjectsyndrome.”ThisisoftenanafflictionofproceduralprogrammerswhoarenewtoOOPandwhoendupwritingaproceduralprogramandstickingitinsideoneortwogiantobjects.Withtheexceptionofapplicationframeworks,objectsrepresentconceptsinyourapplication,nottheapplication.Ifyoumustdosomethingugly,atleastlocalizetheuglinessinsideaclass.Anytimeyounoticeclassesthatappeartohavehighcouplingwitheachother,considerthecodingandmaintenanceimprovementsyoumightgetbyusinginnerclasses(see“Improvingthecodewithaninnerclass”onpage605).Usecommentsliberally,andusethejavadoccomment-documentationsyntaxtoproduceyourprogramdocumentation.Avoidusing“magicnumbers,”whicharenumbershard-wiredintocode.Theseareanightmareifyouneedtochangethem,sinceyouneverknowif“100”means“thearraysize”or“somethingelseentirely.”Instead,createaconstantwithadescriptivenameandusetheconstantidentifierthroughoutyourprogram.Thismakestheprogrameasiertounderstandandmucheasiertomaintain.Intermsofconstructorsandexceptions,you’llgenerallywanttore-throwanyexceptionsthatyoucatchwhileinaconstructorifitcausesfailureofthecreationofthatobject,sothecallerdoesn’tcontinueblindly,thinkingthattheobjectwascreatedcorrectly.Ifyourclassrequiresanycleanupwhentheclientprogrammerisfinishedwiththeobject,placethecleanupcodeinasingle,well-definedmethodwithanamelikecleanup()thatclearlysuggestsitspurpose.Inaddition,placeabooleanflagintheclasstoindicatewhethertheobjecthasbeencleanedup.Inthefinalize()methodfortheclass,checktomakesurethattheobjecthasbeencleanedupandthrowaclassderivedfromRuntimeExceptionifithasn’t,toindicateaprogrammingerror.Beforerelyingonsuchascheme,ensurethatfinalize()worksonyoursystem.(YoumightneedtocallSystem.runFinalizersOnExit(true)toensurethisbehavior.)Ifanobjectmustbecleanedup(otherthanbygarbagecollection)withinaparticularscope,usethefollowingapproach:Initializetheobjectand,ifsuccessful,immediatelyenteratryblockwithafinallyclausethatperformsthecleanup.Whenoverridingfinalize()duringinheritance,remembertocallsuper.finalize()(thisisnotnecessaryifObjectisyourimmediatesuperclass).Youshouldcallsuper.finalize()asthefinalactofyouroverriddenfinalize()ratherthanthefirst,toensurethatbase-classcomponentsarestillvalidifyouneedthem.Whenyouarecreatingafixed-sizecollectionofobjects,transferthemtoanarray(especiallyifyou’rereturningthiscollectionfromamethod).Thiswayyougetthebenefitofthearray’scompile-timetypechecking,andtherecipientofthearraymightnotneedtocasttheobjectsinthearrayinordertousethem.Chooseinterfacesoverabstractclasses.Ifyouknowsomethingisgoingtobeabaseclass,yourfirstchoiceshouldbetomakeitaninterface,andonlyifyou’reforcedtohavemethoddefinitionsormembervariablesshouldyouchangeittoanabstractclass.Aninterfacetalksaboutwhattheclientwantstodo,whileaclasstendstofocuson(orallow)implementationdetails.Insideconstructors,doonlywhatisnecessarytosettheobjectintotheproperstate.Activelyavoidcallingothermethods(exceptforfinalmethods)sincethosemethodscanbeoverriddenbysomeoneelsetoproduceunexpectedresultsduringconstruction.(SeeChapter7fordetails.)Objectsshouldnotsimplyholdsomedata;theyshouldalsohavewell-definedbehaviors.Choosecompositionfirstwhencreatingnewclassesfromexistingclasses.Youshouldonlyusedinheritanceifitisrequiredbyyourdesign.Ifyouuseinheritancewherecompositionwillwork,yourdesignswillbecomeneedlesslycomplicated.Useinheritanceandmethodoverridingtoexpressdifferencesinbehavior,andfieldstoexpressvariationsinstate.Anextremeexampleofwhatnottodoisinheritingdifferentclassestorepresentcolorsinsteadofusinga“color”field.Toavoidahighlyfrustratingexperience,makesurethatthere’sonlyoneclassofeachnameanywhereinyourclasspath.Otherwise,thecompilercanfindtheidenticallynamedotherclassfirst,andreporterrormessagesthatmakenosense.Ifyoususpectthatyouarehavingaclasspathproblem,trylookingfor.classfileswiththesamenamesateachofthestartingpointsinyourclasspath.Whenusingtheevent“adapters”intheJava1.1AWT,there’saparticularlyeasypitfallyoucanencounter.Ifyouoverrideoneoftheadaptermethodsandyoudon’tquitegetthespellingright,you’llendupaddinganewmethodratherthanoverridinganexistingmethod.However,thisisperfectlylegal,soyouwon’tgetanyerrormessagefromthecompilerorrun-timesystem-yourcodesimplywon'tworkcorrectly.Usedesignpatternstoeliminate“nakedfunctionality.”Thatis,ifonlyoneobjectofyourclassshouldbecreated,don’tboltaheadtotheapplicationandwriteacomment“Makeonlyoneofthese.”Wrapitinasingleton.Ifyouhavealotofmessycodeinyourmainprogramthatcreatesyourobjects,lookforacreationalpatternlikeafactorymethodinwhichyoucanencapsulatethatcreation.Eliminating“nakedfunctionality”willnotonlymakeyourcodemucheasiertounderstandandmaintain,itwillalsomakeitmorebulletproofagainstthewell-intentionedmaintainersthatcomeafteryou.Watchoutfor“analysisparalysis.”Rememberthatyoumustusuallymoveforwardinaprojectbeforeyouknoweverything,andthatoftenthebestandfastestwaytolearnaboutsomeofyourunknownfactorsistogotothenextstepratherthantryingtofigureitoutinyourhead.Watchoutforprematureoptimization.Firstmakeitwork,thenmakeitfast-butonlyifyoumust,andonlyifit’sproventhatthereisaperformancebottleneckinaparticularsectionofyourcode.Unlessyouhaveusedaprofilertodiscoverabottleneck,youwillprobablybewastingyourtime.Thehiddencostofperformancetweaksisthatyourcodebecomeslessunderstandableandmaintainable.Rememberthatcodeisreadmuchmorethanitiswritten.Cleandesignsmakeforeasyto-understandprograms,butcomments,detailedexplanations,andexamplesareinvaluable.Theywillhelpbothyouandeveryonewhocomesafteryou.Ifnothingelse,thefrustrationoftryingtoferretoutusefulinformationfromtheonlineJavadocumentationshouldconvinceyou.Whenyouthinkyou’vegotagoodanalysis,design,orimplementation,doawalkthrough.Bringsomeoneinfromoutsideyourgroup-thisdoesn'thavetobeaconsultant,butcanbesomeonefromanothergroupwithinyourcompany.Reviewingyourworkwithapairoffresheyescanrevealproblemsatastagewhereit’smucheasiertofixthemandmorethanpaysforthetimeandmoney“l(fā)ost”tothewalkthroughprocess.Elegancealwayspaysoff.Intheshorttermitmightseemlikeittakesmuchlongertocomeupwithatrulygracefulsolutiontoaproblem,butwhenitworksthefirsttimeandeasilyadaptstonewsituationsinsteadofrequiringhours,days,ormonthsofstruggle,you’llseetherewards(evenifnoonecanmeasurethem).Andthere’snothingthatmatchesthefeelingthatcomesfromknowingyou’vegotanamazingdesign.Resisttheurgetohurry;itwillonlyslowyoudown.YoucanfindotherprogrammingguidelinesontheWeb.Agoodsetoflinkscanbefoundathttp:〃www.ulb.ac.be/esp/ip-Links/Java/joodcs/mm-WebBiblio.htmlInformationSources:Thinkinginjava附錄二中文譯文Java編程規(guī)則本附錄包含了大量有用的建議, 幫助大家進(jìn)行低級程序設(shè)計, 并提供了代碼編寫的一般性指導(dǎo):類名首字母應(yīng)該大寫。字段、方法以及對象(句柄)的首字母應(yīng)小寫。對于所有標(biāo)識符,其中包含的所有單詞都應(yīng)緊靠在一起,而且大寫中間單詞的首字母。例如:ThisIsAClassNamethisIsMethodOrFieldName若在定義中出現(xiàn)了常數(shù)初始化字符,則大寫 staticfinal基本類型標(biāo)識符中的所有字母。這樣便可標(biāo)志出它們屬于編譯期的常數(shù)。Java□□Package□□□□□□□□□:□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□,□ com,org,net或者edu□,□□□□□□□□□□Java1.1和Java1.2的區(qū)別之一)。為了常規(guī)用途而創(chuàng)建一個類時,請采取“經(jīng)典形式” ,并包含對下述元素的定義:equals()hashCode()toString()clone()(implementCloneable)implementSerializable□□□□□□□□□□□,□□□□□□□ main(),其中包含了用于測試那個類的代碼。 為使用一個項目中的類, 我們沒必要刪除測試代碼。 若進(jìn)行了任何形式的改動,可方便地返回測試。這些代碼也可作為如何使用類的一個示例使用。用它描述和實現(xiàn)一個不連續(xù)的類接口部可考慮通過某種方式將其分割成較短(有些時候, 方法必須非常大,用它描述和實現(xiàn)一個不連續(xù)的類接口部可考慮通過某種方式將其分割成較短(有些時候, 方法必須非常大,但它們分。理想情況下, 方法應(yīng)簡明扼要。 若長度很大,的幾個方法。 這樣做也便于類內(nèi)代碼的重復(fù)使用仍應(yīng)只做同樣的一件事情) 。
(5)設(shè)計一個類時,請設(shè)身處地為客戶程序員考慮一下(5)設(shè)計一個類時,請設(shè)身處地為客戶程序員考慮一下(類的使用方法應(yīng)該是非常明確的)。然后,再設(shè)身處地為管理代碼的人考慮一下(預(yù)計有可能進(jìn)行哪些形式的修改,想想用什么方法可把它們變得更簡單) 。使類盡可能短小精悍, 而且只解決一個特定的問題。 下面是對類設(shè)計的一些建議:■一個復(fù)雜的開關(guān)語句:考慮采用“多形”機(jī)制■數(shù)量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現(xiàn)■許多成員變量在特征上有很大的差別:考慮使用幾個類□□□□□□□□□□□□□□—— private。□□□□□□□□□□□□□(一個方法、類或者一個字段等等) ,就永遠(yuǎn)不能把它拿出。若強(qiáng)行拿出,就可能破壞其他人現(xiàn)有的代碼, 使他們不得不重新編寫和設(shè)計。 若只公布自己必須公布的, 就可放心大膽地改變其他任何東西。在多線程環(huán)境中,隱私是特別重要的一個因素——只有private□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ □□□□□□□□□□□□□□□□□ OOP領(lǐng)域的新手,往往喜歡先寫一個順序執(zhí)行的程序, 再把它嵌入一個或兩個巨大的對象里。 根據(jù)編程原理,對象表達(dá)的應(yīng)該是應(yīng)用程序的概念,而非應(yīng)用程序本身。若不得已進(jìn)行一些不太雅觀的編程,至少應(yīng)該把那些代碼置于一個類的內(nèi)部。任何時候只要發(fā)現(xiàn)類與類之間結(jié)合得非常緊密, 就需要考慮是否采用內(nèi)部類,從而改善編碼及維護(hù)工作(參見第盡可能細(xì)致地加上注釋,并用避免使用 從而改善編碼及維護(hù)工作(參見第盡可能細(xì)致地加上注釋,并用避免使用 “魔術(shù)數(shù)字”無疑會成為一場噩夢,因為根本不知道“javadoc□□□□□□□□□□□□□□□□,這些數(shù)字很難與代碼很好地配合。 如以后需要修改它,100”到底是指“數(shù)組大小”還是“其他全然不同的東西” 。所以,我們應(yīng)創(chuàng)建一個常數(shù),并為其使用具有說服力的描述性名稱,并在整個程序中都采用常數(shù)標(biāo)識符。這樣可使程序更易理解以及更易維護(hù)。涉及構(gòu)建器和異常的時候,通常希望重新丟棄在構(gòu)建器中捕獲的任何異?!绻斐闪四莻€對象的創(chuàng)建失敗。 這樣一來, 調(diào)用者就不會以為那個對象已正確地創(chuàng)建,從而盲目地繼續(xù)。當(dāng)客戶程序員用完對象以后,若你的類要求進(jìn)行任何清除工作,可考慮將清□□□□□□□□□定口的方法里, □□□□□ cleanup。這樣的名字, □□□□□□的用途。除此以外,可在類內(nèi)放置一個boolean□布爾口標(biāo)記,指出對象是否已被清除。在類的finalize。方法里,請確定對象已被清除,并已丟棄了從RuntimeException繼承的一個類(如果還沒有的話),從而指出一個編程錯誤。在采取象這樣的方案之前,請確定finalize()能夠在自己的系統(tǒng)工作(可能要調(diào)System.runFinalizersOnExit(true),從而確保這一行為)(15)在一個特定的作用域內(nèi),若一個對象必須清除(非由垃圾收集機(jī)制處理)采用下述方法:初始化對象;若成功,則立即進(jìn)入一個含有finally從句的try塊,始清除工作。(16)若在初始化過程中需要覆蓋(取)finalize(),記住調(diào)super.finalize()(若Object□□□□□□□□□,□□□□□□。在對finalize()進(jìn)行覆蓋的過程中,對super.finalize()的調(diào)用應(yīng)屬于最后一個行動,而不應(yīng)是第一個行動,這樣可確保在需要基礎(chǔ)類組件的時候它們依然有效。創(chuàng)建大小固定的對象集合時,請將它們傳輸至一個數(shù)組(若準(zhǔn)備從一個方法里返回這個集合,更應(yīng)如此操作)。這樣一來,我們就可享受到數(shù)組在編譯期進(jìn)行類型檢查的好處。此外, 為使用它們,數(shù)組的接收者也許并不需要將對象“造型”到數(shù)組里。盡量使用interfaces,不要使用abstract□□□□□□□□□□□□□□個基礎(chǔ)類,那么第一個選擇應(yīng)是將其變成一個interface(接口) □□□□□□□□□方法定義或者成員變量的時候,才需要將其變成一個abstract(□□□□□□□□□的用途。除此以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年軟件系統(tǒng)分析與設(shè)計系統(tǒng)架構(gòu)規(guī)劃與測試題
- 2026年文化事業(yè)黨員文化素養(yǎng)提升試題
- 2026年幼兒教師資格面試題及參考答案指導(dǎo)
- 孕期營養(yǎng)指南及飲食規(guī)劃
- 丁類管輪考試題庫及答案
- 軌道力學(xué)試題及答案詳解及答案
- 2025年懷遠(yuǎn)縣幼兒園教師招教考試備考題庫附答案解析
- 2024年翼城縣招教考試備考題庫帶答案解析
- 2025年南部縣幼兒園教師招教考試備考題庫及答案解析(必刷)
- 2024年靜??h招教考試備考題庫附答案解析(奪冠)
- 大眾試駕協(xié)議書
- 2026年醫(yī)療行業(yè)患者滿意度改善方案
- GB/T 4605-2025滾動軸承推力滾針和保持架組件及推力墊圈
- 老年機(jī)構(gòu)養(yǎng)老心理健康評估方案
- 港澳聯(lián)考中文真題及答案
- 統(tǒng)編版語文四年級下冊全冊教案(2025年2月修訂)
- GB 11174-2025液化石油氣
- 肝素鈉工藝流程
- 熱工儀表工試題全集
- 2025-2030老年婚戀市場需求分析與服務(wù)平臺優(yōu)化方向
- 《JJG 875-2019數(shù)字壓力計》解讀
評論
0/150
提交評論