版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章 面向?qū)ο蟪绦蛟O(shè)計思想(1)類和封裝3.1面向?qū)ο笤O(shè)計方法的由來(1)提高軟件的可維護性和可復(fù)用性l 如何同時提高軟件的可維護性和可復(fù)用性是現(xiàn)代軟件工程的核心問題l 一個好的軟件設(shè)計,必須能夠允許新的設(shè)計要求以較為容易和平和的方式加入到已有的系統(tǒng)中去,從而使這個系統(tǒng)能夠不斷的煥發(fā)青春。l 復(fù)用的重要性:提高生產(chǎn)效率、提高軟件質(zhì)量、改善軟件可維護性l 傳統(tǒng)的復(fù)用方法:代碼粘貼、算法復(fù)用、數(shù)據(jù)結(jié)構(gòu)復(fù)用(2)問題抽象的進步l 所有編程語言都是對目標問題的“抽象”。l 匯編語言用機器的思維去考慮問題,是面向機器的抽象l 高級語言以接近自然語言的思維去考慮問題,是面向問題的抽象l 面向?qū)ο笳Z言以自
2、然界“物質(zhì)”的思維去考慮問題,認為程序是由一堆對象相互作用的結(jié)果(3)機器性能的提高l 思維的抽象越來越接近自然,也就意味著要用越來越多的“額外”代碼來做支撐。l 軟件執(zhí)行速度和復(fù)用型、可維護性常常是一對矛盾3.2“純粹”的面向?qū)ο蟪绦蛟O(shè)計方法是什么樣的(1)所有東西都是對象可將對象想象成一種新的類型;同一類的對象具有相同的屬性名稱和方法;(2)程序是一堆對象相互作用的結(jié)果。它們通過相互發(fā)送消息來彼此作用為了告訴對象做什么,需向那個對象“發(fā)送一條消息”。具體地講,可將消息想象為一個調(diào)用,它調(diào)用的是從屬于目標對象的一個子例程或函數(shù)。(3)每個對象是獨立的,也就是擁有獨立的存儲空間(4)每個對象都
3、有一種類型(5)同一類型的各個對象,它們能接收的消息是相同的(6)程序通過引用訪問對象3.3對象和類3.3.1類人們對事物的抽象描述,概括出該事物所具有的屬性和方法,并將其進行封裝,以供使用。用class定義類,聲明類的形式為:附加聲明 訪問修飾符 class 類名稱extends 基類 屬性 方法例3.1每位學(xué)生每學(xué)期最多有15門課程,課程有考試課和考查課兩種。課程成績的原始分按正??荚?考查實際得分計算??荚囌n的原始分使用百分制形式,考查課的原始分采用等第形式(優(yōu)秀、良好、中等、及格、不及格)。在進行測評成績計算時,考查課程成績中的優(yōu)秀、良好、中等、及格、不及格的,分別換算成為95、85、
4、75、65和50分。測評計算公式為:分析:從上面描述中可以得到以下有效關(guān)鍵字:學(xué)生、課程、考試課、考查課、原始分、評測成績、學(xué)分因此,得到下面幾個類:學(xué)生類、課程類、考試課類、考查課類。進一步考慮,我們可以發(fā)現(xiàn),考試課類和考查課類都是課程類的子類型。這種現(xiàn)象在面向?qū)ο蟮脑O(shè)計中稱為“繼承”,在UML的類圖中使用空心三角的箭頭()表示繼承,箭頭指向父類。我們可以把相同的東西合并到父類里。注意,為了“統(tǒng)一”起見,我們將考試課的原始分也定義為了String類型(字符串),這樣,考試課的“轉(zhuǎn)換成績”要做的事是將字符串的數(shù)值還原成百分制(具體的實現(xiàn)后面會講到),而考查課的“轉(zhuǎn)換成績”要做的事是將等第進行轉(zhuǎn)
5、換。于是,我們就可以寫出這四個類的結(jié)構(gòu):(1)學(xué)生類class 學(xué)生類 public String 姓名;public String 學(xué)號;public 課程類 課程列表;public void 添加課程(課程類 課程)/將課程添加到課程列表中public double 計算評測成績()return 0.0;說明:l public關(guān)鍵字是用來設(shè)定訪問權(quán)限的,表示任何程序都能夠訪問。與它相對應(yīng)還有protected(保護)、private(私有);l 課程列表我們使用了數(shù)組。關(guān)于數(shù)組,我們要過一段時間再介紹。(2)課程類class 課程類public String 課程名;public Stri
6、ng 原始分;public double 學(xué)分;public double 轉(zhuǎn)換成績()return 0.0;(3)考試課類class 考試課類 extends 課程類public double 轉(zhuǎn)換成績()/將數(shù)值型的字符串轉(zhuǎn)換為百分制return 0.0說明:l extends關(guān)鍵字表示繼承,這說明考試課類是課程類的子類,它繼承考試類中的內(nèi)容。(4)考查課類class 考試課類 extends 課程類public double 轉(zhuǎn)換成績()/將等第轉(zhuǎn)換為百分制return 0.0;3.3.2對象對象(實例):類的實例化??陀^的。對象在建立時分配了內(nèi)存,創(chuàng)建對象實際上作了兩個方面的工作:(1
7、)使用new關(guān)鍵字分配內(nèi)存;(2)使用構(gòu)造函數(shù)初始化數(shù)據(jù)(構(gòu)造函數(shù)是與類名同名的函數(shù)) 。內(nèi)存空間棧內(nèi)存堆內(nèi)存學(xué)生對象姓名學(xué)號st學(xué)生類 st=new學(xué)生類();3.3.3使用對象1、不直接使用對象,而是使用“引用”“引用”指該類型的變量并不直接存儲所包含的實際數(shù)據(jù),而是存儲實際數(shù)據(jù)的地址。2、引用間賦值時傳遞的是存放對象的地址3、當一個對象不被任何句柄引用時,視作“垃圾”。由JAVA的垃圾回收機制自動銷毀不再使用的對象。垃圾回收機制是在它認為適當?shù)臅r候自動回收不再使用的內(nèi)存的。class 測試學(xué)生類public static void main(String args) 學(xué)生類 st=new
8、 學(xué)生類();st.姓名="張三"st.學(xué)號="200"System.out.println(st.姓名+"的學(xué)號為"+ st.學(xué)號);輸出:張三的學(xué)號為2003.4 JAVA中的常用類JAVA中的數(shù)據(jù)類型分為“基本類型”和“引用類型”兩種?;绢愋痛娣旁跅?nèi)存中,對象存放在堆內(nèi)存中,而引用存放在棧內(nèi)存中,并指向?qū)ο?。使用class定義的類型稱為引用類型,在使用引用類型時,不是直接使用對象,而是通過“引用”訪問對象。就像使用遙控器訪問電視機。3.4.1字符串類型StringJava將字符串作為String類型對象來處理。有些出乎意料的
9、是當創(chuàng)建一個String 對象時,被創(chuàng)建的字符串是不能被改變的。這也就是說一旦一個String 對象被創(chuàng)建,將無法改變那些組成字符串的字符。表面上看起來, 這好像是一個嚴格的約束。然而事實并非如此。你仍能夠執(zhí)行各種類型的字符串操作。區(qū)別在于每次需要改變字符串時都要創(chuàng)建一個新的String 對象來保存新的內(nèi)容。原始的字符串不變。之所以采用這種方法是因為實現(xiàn)固定的, 不可變的字符串比實現(xiàn)可變的字符串更高效。對于那些想得到改變的字符串的情況,有一個叫做StringBuffer 的String 類的友類。它的對象包含了在創(chuàng)建之后可被改變的字符串。String類和StringBuffer類都在java.
10、lang中定義。l length( )方法可以得到字符串的長度l charAt(int index )方法可以從一個字符串中截取一個字符l toCharArray( )方法可以將字符串中的字符轉(zhuǎn)換為一個字符數(shù)組l equals( )方法可以比較兩個字符串是否相等l indexOf(String str) 搜索字符或子字符串首次出現(xiàn)的位置l lastIndexOf(String str) 搜索字符或子字符串的最后一次出現(xiàn)的位置l substring( )方法可以截取子字符串,它有兩種形式。其中第一種形式如下:String substring(int startIndex)這里startIndex
11、指定了子字符串開始的下標。這種形式返回一個從startIndex開始到調(diào)用字符串結(jié)束的子字符串的拷貝。第二種形式允許指定子字符串的開始和結(jié)束下標:String substring(int startIndex, int endIndex)這里startIndex指定開始下標,endIndex指定結(jié)束下標。返回的字符串包括從開始下標直到結(jié)束下標的所有字符,但不包括結(jié)束下標對應(yīng)的字符。l replace( )方法用另一個字符代替調(diào)用字符串中一個字符的所有具體值:String s = "Hello".replace('l', 'w'); 將字符串“
12、Hewwo”賦給s。l trim( )方法去除字符串首尾空格3.4.2數(shù)值封裝類在java.lang中定義了與基本類型相對應(yīng)的類類型:雙精度型(Double),浮點型(Float),字節(jié)型(Byte),短整型(Short),整型(Integer)和長整型(Long)l Byte,Short,Integer,Long,F(xiàn)loat和Double類分別提供了parseByte( ),parseShort( ),parseInt( ),parseLong( ),parseFloat()和parseDouble()方法。這些方法返回與調(diào)用它們的數(shù)值字符串相應(yīng)的字節(jié)(byte),短整型(sho rt),整
13、型(int),長整型(long),浮點(float)和雙精度(double)值。如果轉(zhuǎn)換失敗,將產(chǎn)生NumberFormatException異常例3.2str =”123”;try int i = Integer.parseInt(str); catch(NumberFormatException e) System.out.println("Invalid format");i = 0;l Integer和Long類還同時提供了toBinaryString( ),toHexString( )和toOctalString( )方法,可以分別將一個值轉(zhuǎn)換成二進制,十六進制和
14、八進制字符串。例3.3int num = 19648;System.out.println(num + " in binary: " +Integer.toBinaryString(num);System.out.println(num + " in octal: " +Integer.toOctalString(num);System.out.println(num + " in hexadecimal: " +Integer.toHexString(num);輸出:19648 in binary: 00019648 in octa
15、l: 4630019648 in hexadecimal: 4cc0l 要將基本類型轉(zhuǎn)換為字符串類型,可以調(diào)用相應(yīng)類(Byte,Short,Integer,Long,F(xiàn)loat和Double)的toString(x)方法。例3.4int i=1111;double d=3.25;String s=Integer.toString(i)+Double.toString(d);System.out.println(s);到這里,我們應(yīng)該可以寫出考試課類的轉(zhuǎn)換成績()方法了:例3.5public double 轉(zhuǎn)換成績()trydouble result=Double.parseDouble(thi
16、s.原始分);return result;catch(NumberFormatException e)return -1;我們在主程序中輸入以下代碼進行測試:考試課類 ks=new 考試課類();ks.原始分="96"System.out.println(ks.轉(zhuǎn)換成績();輸出:96.03.4.3Math類Math類中基本成員的功能名稱功能說明E自然對數(shù)的底數(shù)2.PI圓周率3.1415926sqrt(x)計算x的平方根abs(x)計算x的絕對值sin(x)計算x的正弦值cos(x)計算x的余弦值tan(x)計算x的正切制log(x)計算logex的值,即lnxlog10(
17、x)計算log10 x的值exp(x)計算expow(x,y)計算xycbrt(x)計算x的立方根random()在0,10)上隨機提取一個整數(shù)3.5封裝如果外面的程序可以隨意修改一個類的成員變量,會造成不可預(yù)料的程序錯誤,就象一個人的身高,不能被外部隨意修改,只能通過各種方法去修改這個屬性。 在定義一個類的成員(包括變量和方法)時,使用private關(guān)鍵字說明這個成員的訪問權(quán)限,這個成員成了類的私有成員,只能被這個類的其他成員方法調(diào)用,而不能被其他的類中的方法所調(diào)用。為了實現(xiàn)良好的封裝性,我們通常將類的成員變量聲明為private,再通過public的方法來對這個變量進行訪問。對一個變量的操
18、作,一般都有讀取和賦值操作,我們分別定義兩個方法來實現(xiàn)這兩種操作,一個是getXxx()(Xxx表示要訪問的成員變量的名字),用來讀取這個成員變量操作,另外一個是setXxx()用來對這個成員變量賦值?,F(xiàn)在,我們就用封裝的思想來改進我們的課程類:例3.6class 課程類private String 課程名;private String 原始分;private double 學(xué)分;public void set課程名(String 課程名)this.課程名=課程名;public String get課程名()return this.課程名;public void set原始分(String 原
19、始分)this.原始分=原始分;public String get原始分()return this.原始分;public void set學(xué)分(double 學(xué)分)this.學(xué)分=學(xué)分;public double get學(xué)分()return this.學(xué)分;public double 轉(zhuǎn)換成績()return 0.0;3.6上機練習(xí)1、把講義中黃色底紋的代碼在工具中進行測試。先建立課程類,然后學(xué)生類,考試課類,考查課類,最后進行測試學(xué)生類的運行,觀察結(jié)果。2、實現(xiàn)考查課類的轉(zhuǎn)換成績()方法,并在主程序中進行測試。(可選做)練習(xí)題(課后復(fù)習(xí))1.有語句String s=”hello world”; ,以下操作
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年山東濟南市商河縣選聘鄉(xiāng)村振興工作專員70人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東棗莊市精神衛(wèi)生中心急需緊缺人才引進12人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東日照市住房公積金管理中心招考工作人員18名管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東德州市市直事業(yè)單位公開招聘工作人員歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東孝水建設(shè)限公司招聘20人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東威海市環(huán)翠區(qū)融媒體中心公開招聘工作人員1名歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東事業(yè)單位濱州市技師學(xué)院招考教師管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東東營市墾利區(qū)事業(yè)單位招聘工作人員60人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年宜春市政府北京辦事處招考服務(wù)員管理單位筆試遴選500模擬題附帶答案詳解
- 2025年宜賓江安縣招考高層次和緊缺專業(yè)高校畢業(yè)生管理單位筆試遴選500模擬題附帶答案詳解
- 第六單元(整體教學(xué)課件)七年級語文上冊大單元教學(xué)名師備課系列(統(tǒng)編版2024)
- 垃圾填埋廠租地合同范本
- 漢語詞匯與文化智慧樹知到期末考試答案章節(jié)答案2024年浙江師范大學(xué)
- 科研設(shè)計及研究生論文撰寫智慧樹知到期末考試答案2024年
- 歌曲簡譜國家成龍
- 客情關(guān)系的建立和維護
- 2022年合理使用抗生素試題
- Smith圓圖的Matlab實現(xiàn)及應(yīng)用
- 防止機組非計劃停運措施(鍋爐專業(yè))
- 如何同步同時接收老公老婆微信的實用教程
- 慕安德烈文集
評論
0/150
提交評論