微型計算機硬件技術基礎_第1頁
已閱讀1頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 / 57,Java技術與應用,-面向對象技術概述,西安交大 衛(wèi)顏俊 2008年11月電子信箱:Mr.Java@163.comQQ: 610568018網站: 202.117.58.97/java,2 / 57,主要內容,面向對象技術概述面向對象的實現(程序設計) ◆,3 / 57,傳統(tǒng)的結構化技術,特征:以數據為中心,線性和過程化的處理方式每一步的開發(fā)都是在假定前一步完全規(guī)范和正確的基礎上進行

2、缺點:軟件可重用性弱軟件可維護性差無法使用組件技術開發(fā)效率低軟件危機問題依然存在◆,4 / 57,面向對象技術,特征:以對象為中心,以任何事物都是對象為前提對象、類、繼承性、消息機制和多態(tài)性是面向對象技術的特征??朔私Y構化的諸多缺點目前流行的設計工具: UML(統(tǒng)一建模語言) ◆,5 / 57,面向對象技術中的主要概念,對象(Object) :對現實實體的抽象,定義實體的屬性與方法。類(Class)描述

3、具有相同屬性和方法的對象的集合。 對象與類之間的關系 類定義該集合中每個對象的共同屬性和方法, 一個對象只是類的一個實例。 ◆,6 / 57,面向對象技術中的主要概念,繼承性反應在類的層次結構上,下一級類承襲上一級類的內容。消息機制保證對象之間通過傳遞消息來建立聯系,使對象之間建立聯系更好的一種方式 多態(tài)性反映了現實世界事物之間的動態(tài)相關性。 ◆,7 / 57,面向對象技術的基本活動,發(fā)現并且標識對象和類事

4、物(電腦、溫度),角色(母親、牧師),事件(中斷、點擊),作用(打電話、開會) 描述對象和類之間的關系關聯( “use-a” )人與電腦聚集(整體/部分關系, “has-a” )學校與學院繼承(屬性和方法的繼承, “is-a” )大學生與研究生通過描述每個類的功能確定對象的行為等。書:寫書、印書、買書、賣書和讀書◆,8 / 57,面向對象軟件開發(fā)過程,面向對象分析(OOA)面向對象設計(OOD)面向對象實現(OOP)

5、面向對象測試(OOT)面向對象維護(OOM) ◆,9 / 57,案例:虛擬酒店點菜系統(tǒng)的分析,,◆,10 / 57,案例的功能,客人使用賬號和密碼登錄成功以后,可以隨意點菜,由系統(tǒng)將點好的菜單傳送到廚師處。還可以查看廚師為自己炒好的菜單,并食用;廚師使用賬號和密碼登錄成功以后,可以看到所有客人向其點的菜單,并炒好任意一個菜,由系統(tǒng)將炒好的菜單傳送到客人;系統(tǒng)管理員可以統(tǒng)計每一位客人的消費金額,和每一位廚師的收入金額。 ◆,1

6、1 / 57,案例的分析結果,廚師類、菜系類、菜譜類、客人類和菜單類,◆,12 / 57,案例的設計結果(1),廚師類、菜系類、菜譜類、客人類、菜單類和各個類的相關操作,◆,13 / 57,案例的設計結果(2),系統(tǒng)的人機界面包括:客人面板類、客人窗口類、廚師面板類和廚師窗口類;數據管理包括:廚師表、菜系表、菜譜表、菜單表和客人表;任務管理包括:界面數據刷新線程。 ◆,14 / 57,面向對象的實現(OOP),OOP即O

7、bject-Oriented Programming上世紀60年代的simula語言70年代第二代的smalltalk語言80年代中后期的C++語言90年代中后期的Java語言OOP任務是使用一種面向對象的計算機語言把面向對象設計模型中的每個成分書寫出來。 ◆,15 / 57,面向對象的實現的要點,對象、方法和類:對象具有屬性和方法同類的對象具有相同屬性和方法對象接收和發(fā)送對應事件(動作)的消息◆,16 / 57,

8、面向對象實現中的基本概念,對象是相關狀態(tài)和行為的軟件綁定類為建立對象的藍圖或原型繼承提供組織和構建軟件的強大而自然的機制接口是類與外部世界之間的契約包是按邏輯方式組織類和接口的名字空間。 ◆,17 / 57,,貓(對象),18 / 57,貓類,,屬性(數據)名字毛色年齡品種習性身長身高體重主人,行為(方法)吃喝跑抓散步玩雜技看電視睡覺,◆,19 / 57,貓類的書寫,,1 : class

9、 貓 {2 : //屬性3 : String 名字;4 : Color 毛色;5 : int 年齡;6 : String 品種;7 : String 習性;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)點總結,通過代碼重用節(jié)省開發(fā)時間和成本一個應用中的對象類可以用在另一個應用中易于測試和調試類作為單獨模塊獨立測試重用對象不必進一步測試◆,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,主要的類修飾符,無類修飾,表示該類的權限為friendly,位于同一個包中的類可以使用該類,public,表示該類的權限為最大,稱為公共類,任何其它類都可以使用該類,abstract,表示該類為抽象類,不能直接定義其對象,final,表示該類不能產生子類。 ◆,25 / 57,,extends 父類名,表示正在定義的類繼承了父類,implements 父接口名,

13、表示正在定義的類實現了父接口名。 ◆,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,主要的成員變量修飾符,無變量修飾,表示該變量的權限為friendly,位于同一個包中的類可以使用該變量,public,表示該變量的權限為最大,任何其它類都可以使用,protected,表示該變量的權限為保護型,留給子類繼承用,private,表示該變量的權限為最小,只有該

15、類內部可以使用,static,表示該變量為靜態(tài)的。在系統(tǒ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,成員方法的定義,方法修飾符 返回類型 方法名(形式參數列表) throws 異常類列表{ 方法體} ◆,32 / 57,主要的成員方法修飾符,無方法修飾,位于同一個包中的類可以使用該變量,public,表示該方法的權限

18、為最大,任何其它類都可以使用,protected,表示該方法的權限為保護型,留給子類繼承用,private,表示該方法的權限為最小,只有該類內部可以使用,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,三種特殊方法的定義,構造方法類名([參數列表]){ ……}析構方法protected vo

22、id finalize() throws Throwable { …...}主方法public static void main (String args[]){ ……} ◆,37 / 57,構造方法,構造方法完成對象狀態(tài)的初始化工作,其名字與類相同如果在定義一個類時,定義了構造方法,則以定義的格式為準如果未明確定義構造方法,則Java編譯器會增加一個無形式參數的構造方法(稱為缺省構造方法)而且當這個類是原生類(不繼

23、承任何其它類),增加的構造方法的方法體為空代碼塊這個類存在父類時,則構造方法無參數且調用父類的構造方法。 ◆,38 / 57,,子類沒有定義構造方法時,自動繼承父類不含參數的構造方法,并在創(chuàng)建新子類對象時自動執(zhí)行子類有自己的構造方法時,創(chuàng)建新子類對象時也要先執(zhí)行父類不含參數的構造方法,再執(zhí)行自己的構造函數使用super(參數)方法可以顯式調用父類的構造方法,且該調用語句必須是子類構造方法的第一個可執(zhí)行語句。 一個類可能有多個

24、構造方法 使用this(參數)方法調用同一個類的構造方法,且此時this應是第一個可執(zhí)行語句◆,39 / 57,靜態(tài)初始化器,完成靜態(tài)數據成員的初始化工作靜態(tài)初始化器中的語句在類加載內存時執(zhí)行,時間上先于構造方法執(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;}一個類中定義了幾個同名方法,它們完成同一類操作,但是又有區(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,構造方法的重

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,內部類,定義在另一個類

32、中的類一般稱為嵌套類(nested classes),如果再強加一個限制,即其前面不加static 標識符,則稱為內部類(inner class) 內部類的作用:主要應用在事件驅動的控制結構中從邏輯上將類進一步編組,并控制其可見度◆,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,對象的定義,Java語言中的對象包括三個狀態(tài),定義、使用和釋放,其中最后一個狀態(tài)由Java的GC機制來完成,目的是回收無用對象。前兩個狀態(tài)由程序員來完成。 修飾符 類名 [] 對象名=new類名 [](參數列表); ◆,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】正方形類,分析出的結果: 正方形類,它既具有邊長、位置、邊界顏色和內部顏色等屬性,又具有畫圖、擦圖和移動等操作 ◆,54 / 57,大例子,設計出的結果 :

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 內部顏色;8 : 9 : public 正方形類(int 邊長, Point 位置, Color 邊界顏色, Color 內部顏色) {10: this.邊長 = 邊長;11: this.位置 = 位置;12: this.邊界顏色 = 邊界顏色;13: this.內部顏色 = 內部顏色;14

40、: }15: 16: public void 畫圖(Canvas 畫布) {17: 畫布.getGraphics().setColor(邊界顏色);,56 / 57,大例子,程序代碼(2) : ◆,18: 畫布.getGraphics().drawRect(位置.x, 位置.y

41、, 邊長, 邊長);19: 20: 畫布.getGraphics().setColor(內部顏色);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 移動(Point 新位置) {31: 位置 = 新位置;32: },57 / 57,,,本講結束!

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論