对象与函数
摘自《UML+OOPC嵌入式C語(yǔ)言開發(fā)精講》
11.3? 對(duì)象與函數(shù)
11.3.1 ?函數(shù)的角色
經(jīng)濟(jì)諾貝爾獎(jiǎng)得主H.A.Simon(H.A.Simon,計(jì)算機(jī)人工智能之父)在其1962年的文章《The Architecture of Complexity》中說(shuō)道:“從小系統(tǒng)建造成龐大系統(tǒng)時(shí),若有穩(wěn)定的中間模塊(Intermediate Module),則龐大的系統(tǒng)穩(wěn)定且發(fā)展快速。”在日常生活中,高樓大廈之所以能夠迅速建造起來(lái),是因?yàn)槭褂昧舜罅款A(yù)制的中層模塊(如帷窗等)。這些中層模塊較平房常用的磚塊大一些。
在計(jì)算機(jī)軟件上,也適用同樣的觀念。程序的最小模塊是一個(gè)指令,如果一個(gè)程序含有10 000行指令,但未加分組或分類,這樣的程序?qū)⒑軓?fù)雜,難以駕馭。基于Simon的觀念,人們將程序分而治之(Devide and Conque),分為幾個(gè)中間模塊(Module),就是通稱的函數(shù)(Function)、程序(Procedure)、子程序(Subroutine)或段(Paragraph)。如圖11-2所示。
此時(shí),軟件中的函數(shù)或子程序扮演著模塊的角色,使得人們能快速建造出龐大的軟件系統(tǒng)。函數(shù)如同磚塊,是建造一般房子的中層模塊。至于建造高樓大廈,則適宜采用更大的中層模塊。因此計(jì)算機(jī)軟件人員,必須將函數(shù)分門別類,并組成中上層的模塊——對(duì)象(Object)。
圖11-2
傳統(tǒng)程序直接由函數(shù)或子程序所組成,OOP軟件則將函數(shù)納入對(duì)象中,再由對(duì)象組成龐大程序。函數(shù)隸屬于對(duì)象,與對(duì)象中的數(shù)據(jù)密切聯(lián)系在一起。軟件的建造理念和高樓大廈的建造觀念是一致的。函數(shù)的角色為:
l? 從對(duì)象本身觀之,函數(shù)表達(dá)了對(duì)象的動(dòng)態(tài)行為。
l? 從整個(gè)系統(tǒng)觀之,函數(shù)是支持中層模塊(即對(duì)象)的支架。
在“淚眼問花花不語(yǔ),亂紅飛過秋千去”的例子中,女主角的行為有“流淚”(Cry)及“問”(Ask),花的行為有“語(yǔ)”(Say)和“飛”(Fly),秋千的行為有“擺蕩”(Swing)。以對(duì)象來(lái)組織這些函數(shù),如圖11-3所示。
圖11-3
Cry() 和Ask() 是“女主角”對(duì)象內(nèi)的函數(shù),Say() 和Fly() 是“花”對(duì)象內(nèi)的函數(shù),而Swing() 為“秋千”對(duì)象內(nèi)的函數(shù)。
11.3.2 ?對(duì)象與類
類是群體(或集合),而對(duì)象是類中的一份子。人們常用“是一個(gè)”(is a)來(lái)表達(dá)對(duì)象與類之間的關(guān)系。例如:
l? 月亮是一個(gè)星球。
l? 嫦娥是一位(個(gè))美麗的神仙。
l? 畢加索是一個(gè)藝術(shù)家。
l? 畢加索是一個(gè)畫家。
l? 張大千是一個(gè)畫家。
l? 貝多芬是一個(gè)音樂家。
.....
所以“月球”是對(duì)象,屬于“星球”類的一份子。畢加索是對(duì)象,藝術(shù)家是類,同樣地,畫家也是類,其中畫家是藝術(shù)家群體中的小群體(部分集合)。畢加索和張大千同屬于“畫家”類,所以具有共同特點(diǎn)——精于美術(shù)繪畫。
11.3.3 ?類的用途:描述對(duì)象的共同特點(diǎn)
軟件中的對(duì)象為自然界對(duì)象的抽象表示,只表達(dá)了其重要特征與行為,而忽略了細(xì)節(jié)部分。至于哪些是重要特征和行為呢?程序中必須加以說(shuō)明。同類的對(duì)象具有共同的重要特征與行為,因此可由類統(tǒng)一說(shuō)明對(duì)象應(yīng)表達(dá)的那些特征和行為。也就是說(shuō),類統(tǒng)一說(shuō)明了對(duì)象應(yīng)含哪些“數(shù)據(jù)”(Data)和哪些“函數(shù)”(Function)。例如:
??????? double a = 3.5 + 5;
??????? printf(a);
C語(yǔ)言已定義的double、int等數(shù)據(jù)類型,其變量含有+、-、*、/等基本運(yùn)算(行為),凡double的變量皆能做這些運(yùn)算。同理,如果我們創(chuàng)造了新的數(shù)據(jù)類型(即類)——花,且定義如下:
??????? CLASS(花)
??????? {
?????????? char name[10];
?????????? int color;
?????????? void fly();
?????????? void say();
??????? };
這就是花類的定義,它說(shuō)明了,
花類內(nèi)的對(duì)象(即“花”數(shù)據(jù)類型的變量)皆具兩項(xiàng)共同特征:name和color。
l? 花類的對(duì)象皆具兩項(xiàng)共同行為:fly()和say()。
同類的對(duì)象特征和行為是一致的,所以只須在類定義中統(tǒng)一說(shuō)明,不必對(duì)對(duì)象逐一說(shuō)明。定義好以后,就能借花類來(lái)聲明對(duì)象了,此時(shí)也可以將類視為數(shù)據(jù)類型,則花類的對(duì)象就是花數(shù)據(jù)類型的變量了。花類如圖11-4所示。
圖11-4
更多樣章試讀請(qǐng)?jiān)L問:http://www.china-pub.com/209254
轉(zhuǎn)載于:https://www.cnblogs.com/bvbook/archive/2008/12/08/1350577.html
總結(jié)
- 上一篇: 计算机绘图说课视频,电气工程制图说课pp
- 下一篇: jQuery 判断所有图片加载完成