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