1.3 一切都是對象
1.3.1面向過程
面向?qū)ο蟮牡谝粋€(gè)原則是把數(shù)據(jù)和對該數(shù)據(jù)的操作都封裝在一個(gè)類中,在程序設(shè)計(jì)時(shí)要考慮多個(gè)對象及其相互間的關(guān)系。有些功能并不一定由一個(gè)程序段完全實(shí)現(xiàn),可以讓其它對象來實(shí)現(xiàn),在本例中就由類Max完成求值的功能。而面向?qū)ο蟮牧硗庖粋€(gè)好處是實(shí)現(xiàn)代碼的重復(fù)使用,例如其它的程序中如果需要求值的功能,只需要通過類Max的對象就可以達(dá)到目的。但是如果象面向過程的代碼段那樣把求值的算法都實(shí)現(xiàn)在該代碼段中,則無法復(fù)用
早期的編程語言如FORTRAN、C基本上都是面向過程的語言,其編程的主要思路專注于算法的實(shí)現(xiàn)。例如下面是一個(gè)面向過程的求正整數(shù)值的程序:
int maxSoFar=0,price=1; //值maxSoFar的初始值為0,price是輸入的值
while(price>0){ //循環(huán)輸入price的值
if (price>maxSoFar) //輸入的值price大于值maxSoFar
maxSoFar=price; //則maxSoFar的值為price的值
String input=JoptionPane.showInputDialog("Enter the next price");
//繼續(xù)輸入price
price=Double.parseDouble(input); //把字符串input轉(zhuǎn)換成整數(shù)price
}
System.out.println("The maximum is "+maxSoFar); //打印值maxSoFar
} 來源:www.examda.com
該程序段主要實(shí)現(xiàn)了求值的算法,但是,如果考慮用面向?qū)ο蟮木幊?,可以是另外一種方式:
Max max=new Max( ); //max是類Max的一個(gè)對象
while(price>0){
max.updateMax(price); //對象max調(diào)用updateMax方法,更新值
price=max.getPrice( ); //對象max調(diào)用getPrice獲得下一個(gè)price的值
}
System.out.println("The maximum is "+max.getMax( ));//對象max調(diào)用getMax
方法獲得值,并打印出來
1.3.2 面向?qū)ο?BR> 純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)方法是這樣的:
1. 所有的東西都是對象。可以將對象想象成為一種新型變量,它保存著數(shù)據(jù),而且還可以對自身數(shù)據(jù)進(jìn)行操作。例如類Max中保留著數(shù)據(jù)的值,同時(shí)還有方法updateMax根據(jù)新加入的price值產(chǎn)生最新的值,還有g(shù)etMax方法返回?cái)?shù)據(jù)的值。
2. 程序是一大堆對象的組合。通過消息傳遞,各對象知道自己應(yīng)該做些什么。如果需要讓對象做些事情,則須向該對象"發(fā)送一條消息"。具體來說,可以將消息想象成為一個(gè)調(diào)用請求,它調(diào)用的是從屬于目標(biāo)對象的一個(gè)方法。例如上面面向?qū)ο蟮某绦蚨螒?yīng)該是屬于某個(gè)類的,比如說是屬于類Shopping,則Shopping中就包含了類Max的對象max,調(diào)用方法updateMax就相當(dāng)于Shopping對象對max對象發(fā)出一條指令"updateMax",要求對象max重新計(jì)算值。
3. 每個(gè)對象都有自己的存儲(chǔ)空間??扇菁{其它對象,或者說通過封裝現(xiàn)有的對象,可以產(chǎn)生新型對象。因此,盡管對象的概念非常簡單,但是經(jīng)過封裝以后卻可以在程序中達(dá)到任意高的復(fù)雜程度。
4. 每個(gè)對象都屬于某個(gè)類。根據(jù)語法,每個(gè)對象都是某個(gè)"類"的一個(gè)"實(shí)例"。一個(gè)類的最重要的的特征就是"能將什么消息發(fā)給它?",也就是類本身有哪些操作。例如max是類Max的實(shí)例。
1.3.1面向過程
面向?qū)ο蟮牡谝粋€(gè)原則是把數(shù)據(jù)和對該數(shù)據(jù)的操作都封裝在一個(gè)類中,在程序設(shè)計(jì)時(shí)要考慮多個(gè)對象及其相互間的關(guān)系。有些功能并不一定由一個(gè)程序段完全實(shí)現(xiàn),可以讓其它對象來實(shí)現(xiàn),在本例中就由類Max完成求值的功能。而面向?qū)ο蟮牧硗庖粋€(gè)好處是實(shí)現(xiàn)代碼的重復(fù)使用,例如其它的程序中如果需要求值的功能,只需要通過類Max的對象就可以達(dá)到目的。但是如果象面向過程的代碼段那樣把求值的算法都實(shí)現(xiàn)在該代碼段中,則無法復(fù)用
早期的編程語言如FORTRAN、C基本上都是面向過程的語言,其編程的主要思路專注于算法的實(shí)現(xiàn)。例如下面是一個(gè)面向過程的求正整數(shù)值的程序:
int maxSoFar=0,price=1; //值maxSoFar的初始值為0,price是輸入的值
while(price>0){ //循環(huán)輸入price的值
if (price>maxSoFar) //輸入的值price大于值maxSoFar
maxSoFar=price; //則maxSoFar的值為price的值
String input=JoptionPane.showInputDialog("Enter the next price");
//繼續(xù)輸入price
price=Double.parseDouble(input); //把字符串input轉(zhuǎn)換成整數(shù)price
}
System.out.println("The maximum is "+maxSoFar); //打印值maxSoFar
} 來源:www.examda.com
該程序段主要實(shí)現(xiàn)了求值的算法,但是,如果考慮用面向?qū)ο蟮木幊?,可以是另外一種方式:
Max max=new Max( ); //max是類Max的一個(gè)對象
while(price>0){
max.updateMax(price); //對象max調(diào)用updateMax方法,更新值
price=max.getPrice( ); //對象max調(diào)用getPrice獲得下一個(gè)price的值
}
System.out.println("The maximum is "+max.getMax( ));//對象max調(diào)用getMax
方法獲得值,并打印出來
1.3.2 面向?qū)ο?BR> 純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)方法是這樣的:
1. 所有的東西都是對象。可以將對象想象成為一種新型變量,它保存著數(shù)據(jù),而且還可以對自身數(shù)據(jù)進(jìn)行操作。例如類Max中保留著數(shù)據(jù)的值,同時(shí)還有方法updateMax根據(jù)新加入的price值產(chǎn)生最新的值,還有g(shù)etMax方法返回?cái)?shù)據(jù)的值。
2. 程序是一大堆對象的組合。通過消息傳遞,各對象知道自己應(yīng)該做些什么。如果需要讓對象做些事情,則須向該對象"發(fā)送一條消息"。具體來說,可以將消息想象成為一個(gè)調(diào)用請求,它調(diào)用的是從屬于目標(biāo)對象的一個(gè)方法。例如上面面向?qū)ο蟮某绦蚨螒?yīng)該是屬于某個(gè)類的,比如說是屬于類Shopping,則Shopping中就包含了類Max的對象max,調(diào)用方法updateMax就相當(dāng)于Shopping對象對max對象發(fā)出一條指令"updateMax",要求對象max重新計(jì)算值。
3. 每個(gè)對象都有自己的存儲(chǔ)空間??扇菁{其它對象,或者說通過封裝現(xiàn)有的對象,可以產(chǎn)生新型對象。因此,盡管對象的概念非常簡單,但是經(jīng)過封裝以后卻可以在程序中達(dá)到任意高的復(fù)雜程度。
4. 每個(gè)對象都屬于某個(gè)類。根據(jù)語法,每個(gè)對象都是某個(gè)"類"的一個(gè)"實(shí)例"。一個(gè)類的最重要的的特征就是"能將什么消息發(fā)給它?",也就是類本身有哪些操作。例如max是類Max的實(shí)例。