版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 / 57,Java技術(shù)與應(yīng)用,-面向?qū)ο蠹夹g(shù)概述,西安交大 衛(wèi)顏俊 2008年11月電子信箱:Mr.Java@163.comQQ: 610568018網(wǎng)站: 202.117.58.97/java,2 / 57,主要內(nèi)容,面向?qū)ο蠹夹g(shù)概述面向?qū)ο蟮膶?shí)現(xiàn)(程序設(shè)計(jì)) ◆,3 / 57,傳統(tǒng)的結(jié)構(gòu)化技術(shù),特征:以數(shù)據(jù)為中心,線性和過程化的處理方式每一步的開發(fā)都是在假定前一步完全規(guī)范和正確的基礎(chǔ)上進(jìn)行
2、缺點(diǎn):軟件可重用性弱軟件可維護(hù)性差無法使用組件技術(shù)開發(fā)效率低軟件危機(jī)問題依然存在◆,4 / 57,面向?qū)ο蠹夹g(shù),特征:以對(duì)象為中心,以任何事物都是對(duì)象為前提對(duì)象、類、繼承性、消息機(jī)制和多態(tài)性是面向?qū)ο蠹夹g(shù)的特征??朔私Y(jié)構(gòu)化的諸多缺點(diǎn)目前流行的設(shè)計(jì)工具: UML(統(tǒng)一建模語言) ◆,5 / 57,面向?qū)ο蠹夹g(shù)中的主要概念,對(duì)象(Object) :對(duì)現(xiàn)實(shí)實(shí)體的抽象,定義實(shí)體的屬性與方法。類(Class)描述
3、具有相同屬性和方法的對(duì)象的集合。 對(duì)象與類之間的關(guān)系 類定義該集合中每個(gè)對(duì)象的共同屬性和方法, 一個(gè)對(duì)象只是類的一個(gè)實(shí)例。 ◆,6 / 57,面向?qū)ο蠹夹g(shù)中的主要概念,繼承性反應(yīng)在類的層次結(jié)構(gòu)上,下一級(jí)類承襲上一級(jí)類的內(nèi)容。消息機(jī)制保證對(duì)象之間通過傳遞消息來建立聯(lián)系,使對(duì)象之間建立聯(lián)系更好的一種方式 多態(tài)性反映了現(xiàn)實(shí)世界事物之間的動(dòng)態(tài)相關(guān)性。 ◆,7 / 57,面向?qū)ο蠹夹g(shù)的基本活動(dòng),發(fā)現(xiàn)并且標(biāo)識(shí)對(duì)象和類事
4、物(電腦、溫度),角色(母親、牧師),事件(中斷、點(diǎn)擊),作用(打電話、開會(huì)) 描述對(duì)象和類之間的關(guān)系關(guān)聯(lián)( “use-a” )人與電腦聚集(整體/部分關(guān)系, “has-a” )學(xué)校與學(xué)院繼承(屬性和方法的繼承, “is-a” )大學(xué)生與研究生通過描述每個(gè)類的功能確定對(duì)象的行為等。書:寫書、印書、買書、賣書和讀書◆,8 / 57,面向?qū)ο筌浖_發(fā)過程,面向?qū)ο蠓治觯∣OA)面向?qū)ο笤O(shè)計(jì)(OOD)面向?qū)ο髮?shí)現(xiàn)(OOP)
5、面向?qū)ο鬁y試(OOT)面向?qū)ο缶S護(hù)(OOM) ◆,9 / 57,案例:虛擬酒店點(diǎn)菜系統(tǒng)的分析,,◆,10 / 57,案例的功能,客人使用賬號(hào)和密碼登錄成功以后,可以隨意點(diǎn)菜,由系統(tǒng)將點(diǎn)好的菜單傳送到廚師處。還可以查看廚師為自己炒好的菜單,并食用;廚師使用賬號(hào)和密碼登錄成功以后,可以看到所有客人向其點(diǎn)的菜單,并炒好任意一個(gè)菜,由系統(tǒng)將炒好的菜單傳送到客人;系統(tǒng)管理員可以統(tǒng)計(jì)每一位客人的消費(fèi)金額,和每一位廚師的收入金額。 ◆,1
6、1 / 57,案例的分析結(jié)果,廚師類、菜系類、菜譜類、客人類和菜單類,◆,12 / 57,案例的設(shè)計(jì)結(jié)果(1),廚師類、菜系類、菜譜類、客人類、菜單類和各個(gè)類的相關(guān)操作,◆,13 / 57,案例的設(shè)計(jì)結(jié)果(2),系統(tǒng)的人機(jī)界面包括:客人面板類、客人窗口類、廚師面板類和廚師窗口類;數(shù)據(jù)管理包括:廚師表、菜系表、菜譜表、菜單表和客人表;任務(wù)管理包括:界面數(shù)據(jù)刷新線程。 ◆,14 / 57,面向?qū)ο蟮膶?shí)現(xiàn)(OOP),OOP即O
7、bject-Oriented Programming上世紀(jì)60年代的simula語言70年代第二代的smalltalk語言80年代中后期的C++語言90年代中后期的Java語言O(shè)OP任務(wù)是使用一種面向?qū)ο蟮挠?jì)算機(jī)語言把面向?qū)ο笤O(shè)計(jì)模型中的每個(gè)成分書寫出來。 ◆,15 / 57,面向?qū)ο蟮膶?shí)現(xiàn)的要點(diǎn),對(duì)象、方法和類:對(duì)象具有屬性和方法同類的對(duì)象具有相同屬性和方法對(duì)象接收和發(fā)送對(duì)應(yīng)事件(動(dòng)作)的消息◆,16 / 57,
8、面向?qū)ο髮?shí)現(xiàn)中的基本概念,對(duì)象是相關(guān)狀態(tài)和行為的軟件綁定類為建立對(duì)象的藍(lán)圖或原型繼承提供組織和構(gòu)建軟件的強(qiáng)大而自然的機(jī)制接口是類與外部世界之間的契約包是按邏輯方式組織類和接口的名字空間。 ◆,17 / 57,,貓(對(duì)象),18 / 57,貓類,,屬性(數(shù)據(jù))名字毛色年齡品種習(xí)性身長身高體重主人,行為(方法)吃喝跑抓散步玩雜技看電視睡覺,◆,19 / 57,貓類的書寫,,1 : class
9、 貓 {2 : //屬性3 : String 名字;4 : Color 毛色;5 : int 年齡;6 : String 品種;7 : String 習(xí)性;8 : int 身長;9 : int 身高;10: int 體重;11: String 主人;,12: //方法13: void 喝() {}14: void 跑() {}15: void 抓() {}16:
10、 void 散步() {}17: void 玩雜技() {}18: void 看電視() {}19: void 睡覺() {}20: } ◆,20 / 57,OOP的優(yōu)點(diǎn)總結(jié),通過代碼重用節(jié)省開發(fā)時(shí)間和成本一個(gè)應(yīng)用中的對(duì)象類可以用在另一個(gè)應(yīng)用中易于測試和調(diào)試類作為單獨(dú)模塊獨(dú)立測試重用對(duì)象不必進(jìn)一步測試◆,21 / 57,,,22 / 57,包的定義與使用,定義:package 包名;package
11、 chapter1.vector;public class Mosquito { int capacity; }使用:import 包名.{*|類|接口};package chapter1.test;import chapter1.vector.Mosquito;class Test {} ◆,23 / 57,類的定義,類修飾符 class 類名 [] [extends 父類名] [implemen
12、ts 父接口名]{ 類體} ◆,24 / 57,主要的類修飾符,無類修飾,表示該類的權(quán)限為friendly,位于同一個(gè)包中的類可以使用該類,public,表示該類的權(quán)限為最大,稱為公共類,任何其它類都可以使用該類,abstract,表示該類為抽象類,不能直接定義其對(duì)象,final,表示該類不能產(chǎn)生子類。 ◆,25 / 57,,extends 父類名,表示正在定義的類繼承了父類,implements 父接口名,
13、表示正在定義的類實(shí)現(xiàn)了父接口名。 ◆,26 / 57,舉例,1 : package points;2 : abstract class Point {}3 : 4 : package points;5 : public class Point3d extends Point {}6 : 7 : import points.Point3d;8 : public final class Point4d extends Poi
14、nt3d {} ◆,27 / 57,類的成員變量的定義,變量修飾符 類型 變量名 [,類型 變量名,…, 類型 變量名]; ◆,28 / 57,主要的成員變量修飾符,無變量修飾,表示該變量的權(quán)限為friendly,位于同一個(gè)包中的類可以使用該變量,public,表示該變量的權(quán)限為最大,任何其它類都可以使用,protected,表示該變量的權(quán)限為保護(hù)型,留給子類繼承用,private,表示該變量的權(quán)限為最小,只有該
15、類內(nèi)部可以使用,static,表示該變量為靜態(tài)的。在系統(tǒng)中只分配一次存儲(chǔ)單元,是整個(gè)類的屬性,而不歸類的任何具體對(duì)象獨(dú)有,即使用類的任何對(duì)象訪問時(shí),取相同的值,而使用類的任何對(duì)象去修改時(shí),都是對(duì)同一個(gè)存儲(chǔ)單元進(jìn)行。應(yīng)該使用類名作前綴,即“類名.變量名”來存取該屬性,final,表示該變量為常量,不可修改其值。 ◆,29 / 57,舉例(1),1 : package points;2 : public class Point {
16、3 : private int x, y;4 : protected int useCount ;5 : static int totalUseCount;6 : public static final int TOTALMOVES=10;7 : } ◆,30 / 57,舉例(2),9 : package points;10: class Point3d extends Point {}11: 12: p
17、ackage points;13: class Test{}14: 15: import points.*;16: class Point4d extends Point {} ◆,31 / 57,成員方法的定義,方法修飾符 返回類型 方法名(形式參數(shù)列表) throws 異常類列表{ 方法體} ◆,32 / 57,主要的成員方法修飾符,無方法修飾,位于同一個(gè)包中的類可以使用該變量,public,表示該方法的權(quán)限
18、為最大,任何其它類都可以使用,protected,表示該方法的權(quán)限為保護(hù)型,留給子類繼承用,private,表示該方法的權(quán)限為最小,只有該類內(nèi)部可以使用,static,表示該方法為靜態(tài)的,直接通過類就可以使用,final,表示該方法不可在子類中覆蓋,native,表示本地方法,由C/C++語言編寫,abstract,表示抽象方法,用在抽象類中,synchronized,表示同步方法(用在線程方面)。 ◆,33 / 57,
19、,throws 異常類列表方法體的格式如下:代碼塊;return 返回值; ◆,34 / 57,舉例(1),1 : package points;2 : public abstract class Point {3 : public void move(int dx, int dy) {}4 : private void printMoves() {}5 : protected int getUseCoun
20、t() {}6 : static int getTotalUseCount() {}7 : public static final int getTotalMoves() {}8 : public abstract void int area();9 : } ◆,35 / 57,舉例(2),11: package points;12: class Point3d extends Point {13: pub
21、lic int area() {}14: }15: 16: package points;17: class Test {}18: 19: import points.*;20: class Point4d extends Point {21: public int area() {}22: } ◆,36 / 57,三種特殊方法的定義,構(gòu)造方法類名([參數(shù)列表]){ ……}析構(gòu)方法protected vo
22、id finalize() throws Throwable { …...}主方法public static void main (String args[]){ ……} ◆,37 / 57,構(gòu)造方法,構(gòu)造方法完成對(duì)象狀態(tài)的初始化工作,其名字與類相同如果在定義一個(gè)類時(shí),定義了構(gòu)造方法,則以定義的格式為準(zhǔn)如果未明確定義構(gòu)造方法,則Java編譯器會(huì)增加一個(gè)無形式參數(shù)的構(gòu)造方法(稱為缺省構(gòu)造方法)而且當(dāng)這個(gè)類是原生類(不繼
23、承任何其它類),增加的構(gòu)造方法的方法體為空代碼塊這個(gè)類存在父類時(shí),則構(gòu)造方法無參數(shù)且調(diào)用父類的構(gòu)造方法。 ◆,38 / 57,,子類沒有定義構(gòu)造方法時(shí),自動(dòng)繼承父類不含參數(shù)的構(gòu)造方法,并在創(chuàng)建新子類對(duì)象時(shí)自動(dòng)執(zhí)行子類有自己的構(gòu)造方法時(shí),創(chuàng)建新子類對(duì)象時(shí)也要先執(zhí)行父類不含參數(shù)的構(gòu)造方法,再執(zhí)行自己的構(gòu)造函數(shù)使用super(參數(shù))方法可以顯式調(diào)用父類的構(gòu)造方法,且該調(diào)用語句必須是子類構(gòu)造方法的第一個(gè)可執(zhí)行語句。 一個(gè)類可能有多個(gè)
24、構(gòu)造方法 使用this(參數(shù))方法調(diào)用同一個(gè)類的構(gòu)造方法,且此時(shí)this應(yīng)是第一個(gè)可執(zhí)行語句◆,39 / 57,靜態(tài)初始化器,完成靜態(tài)數(shù)據(jù)成員的初始化工作靜態(tài)初始化器中的語句在類加載內(nèi)存時(shí)執(zhí)行,時(shí)間上先于構(gòu)造方法執(zhí)行class Point { static int useCount; static int totaUseCount; static{ useCount=3; totaUseCount=u
25、seCount+6; } } ◆,40 / 57,舉例,1 : class Guest {2 : final int SERIALNO;3 : private static int totalSerialNo;4 : static {5 : totalSerialNo = 10000;6 : }7 : 8 : Guest() {9 : totalSerialNo = totalSe
26、rialNo + 1;10: SERIALNO = totalSerialNo;11: }12: } ◆,41 / 57,方法重載,int add(int x,int y){return x+y;}float add(float x,float y){return x+y;}float add(float x,int y){return x+y;}String add(char x,char y){return
27、""+x+y;}一個(gè)類中定義了幾個(gè)同名方法,它們完成同一類操作,但是又有區(qū)別。 ◆,42 / 57,舉例(1),1 : class Chinese {2 : public void speak() {3 : System.out.println("您好!");4 : }5 : public void speak(int count) {6 : for (
28、int i = 0; i < count; i++) {7 : System.out.println("您好!");8 : }9 : }10: public void speak(String word) {11: System.out.println(word);12: } ◆,43 / 57,舉例(2),13: public void speak(S
29、tring word, boolean reverse) {14: if (reverse) {15: System.out.println(new StringBuffer(word).reverse());16: }17: else {18: System.out.println(word);19: }20: }21: } ◆,44 / 57,構(gòu)造方法的重
30、載(舉例),1 : class Point {2 : int x, y;3 : Point(int x, int y) {4 : this.x = x;5 : this.y = y;6 : }7 : }8 : ◆,45 / 57,,9 : class ColoredPoint extends Point {10: static final int WHITE = 0, BLACK = 1
31、;11: int color;12: ColoredPoint(int x, int y) {13: this(x, y, WHITE);14: }15: ColoredPoint(int x, int y, int color) {16: super(x, y);17: this.color = color;18: }19: } ◆,46 / 57,內(nèi)部類,定義在另一個(gè)類
32、中的類一般稱為嵌套類(nested classes),如果再強(qiáng)加一個(gè)限制,即其前面不加static 標(biāo)識(shí)符,則稱為內(nèi)部類(inner class) 內(nèi)部類的作用:主要應(yīng)用在事件驅(qū)動(dòng)的控制結(jié)構(gòu)中從邏輯上將類進(jìn)一步編組,并控制其可見度◆,47 / 57,舉例(1),1 : class Outer {2 : int x = 3;3 : void showX() {4 : System.out.println(x)
33、;5 : }6 : 7 : class Inner {8 : int y = x + 5;9 : void showY() {10: showX();11: System.out.println(y); ◆,48 / 57,舉例(2),12: }13: }14: }15:16: class Other {17: Outer outer = new
34、Outer();18: Outer.Inner inner = outer.new Inner();19: } ◆,49 / 57,對(duì)象的定義,Java語言中的對(duì)象包括三個(gè)狀態(tài),定義、使用和釋放,其中最后一個(gè)狀態(tài)由Java的GC機(jī)制來完成,目的是回收無用對(duì)象。前兩個(gè)狀態(tài)由程序員來完成。 修飾符 類名 [] 對(duì)象名=new類名 [](參數(shù)列表); ◆,50 / 57,舉例(1),ColoredPoint coloredPo
35、int=new ColoredPoint(100,200,0xFFFFFF); ◆,51 / 57,舉例(2),1 : class Adder {2 : T x;3 : T y;4 : Adder(T x,T y){5 : this.x=x;6 : this.y=y;7 : }8 : T add(T x, T y) { return x + y; }9 : } ◆,52
36、/ 57,舉例(3),Adder adder1= new Adder (3,5);adder1.x=3; Adder adder2= new Adder (3.3,5.5);adder1.y=5;Adder adder2= new Adder ("3.3 ", "5
37、.5 ");int x=adder1.add(3,5); ◆,53 / 57,大例子 - 【例2-2】正方形類,分析出的結(jié)果: 正方形類,它既具有邊長、位置、邊界顏色和內(nèi)部顏色等屬性,又具有畫圖、擦圖和移動(dòng)等操作 ◆,54 / 57,大例子,設(shè)計(jì)出的結(jié)果 :
38、 ◆,55 / 57,大例子,程序代碼(1) : ◆,1 : import java.awt.*;2 : 3 : public class 正方形類 {4 : public int 邊長;5 : public Point 位置;6 : public Co
39、lor 邊界顏色;7 : public Color 內(nèi)部顏色;8 : 9 : public 正方形類(int 邊長, Point 位置, Color 邊界顏色, Color 內(nèi)部顏色) {10: this.邊長 = 邊長;11: this.位置 = 位置;12: this.邊界顏色 = 邊界顏色;13: this.內(nèi)部顏色 = 內(nèi)部顏色;14
40、: }15: 16: public void 畫圖(Canvas 畫布) {17: 畫布.getGraphics().setColor(邊界顏色);,56 / 57,大例子,程序代碼(2) : ◆,18: 畫布.getGraphics().drawRect(位置.x, 位置.y
41、, 邊長, 邊長);19: 20: 畫布.getGraphics().setColor(內(nèi)部顏色);21: 畫布.getGraphics().fillRect(位置.x, 位置.y, 邊長, 邊長);22: }23: 24: public void 擦圖(Canvas 畫布) {25: 畫布.getGraphics().setColor(Color.WHITE
42、);26: 畫布.getGraphics().drawRect(位置.x, 位置.y, 邊長, 邊長);27: 畫布.getGraphics().fillRect(位置.x, 位置.y, 邊長, 邊長);28: }29: 30: public void 移動(dòng)(Point 新位置) {31: 位置 = 新位置;32: },57 / 57,,,本講結(jié)束!
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 03微型計(jì)算機(jī)硬件組成
- 03微型計(jì)算機(jī)硬件組成
- 03 微型計(jì)算機(jī)硬件組成
- 微型計(jì)算機(jī)組成計(jì)算機(jī)硬件結(jié)構(gòu)圖
- 《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序
- 《計(jì)算機(jī)硬件技術(shù)基礎(chǔ)》實(shí)驗(yàn)答案程序
- 計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第08章
- 計(jì)算機(jī)硬件
- 1 微型計(jì)算機(jī)基礎(chǔ)概論
- 計(jì)算機(jī)硬件知識(shí)
- 計(jì)算機(jī)硬件維護(hù)
- 計(jì)算機(jī)硬件基礎(chǔ)知識(shí)試題
- 微型計(jì)算機(jī)控制技術(shù)
- 計(jì)算機(jī)硬件類_計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)1
- 計(jì)算機(jī)硬件類_計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)1
- 《計(jì)算機(jī)硬件基礎(chǔ)》復(fù)習(xí)題匯總
- 計(jì)算機(jī)硬件組成設(shè)備維護(hù)技術(shù)
- 計(jì)算機(jī)硬件知識(shí)48445
- 計(jì)算機(jī)硬件參數(shù)解釋
- 計(jì)算機(jī)硬件購買合同
評(píng)論
0/150
提交評(píng)論