官术网_书友最值得收藏!

2.1 面向?qū)ο蟮幕靖拍?/h2>

面向?qū)ο笫且环N程序設(shè)計(jì)方法和設(shè)計(jì)規(guī)范(paradigm),其基本思想是使用對(duì)象、類、繼承、封裝、消息等基本概念來進(jìn)行程序設(shè)計(jì)。從現(xiàn)實(shí)世界客觀存在的事物(即對(duì)象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式。

Java語言是依據(jù)面向?qū)ο蟮脑碓O(shè)計(jì)而成的,而面向?qū)ο笥兄诮鉀Q復(fù)雜的程序問題,在系統(tǒng)地學(xué)習(xí)Java語言之前,用戶必須先了解一些基本的面向?qū)ο蟮母拍睢?/p>

2.1.1 類和對(duì)象

將眾多的事物歸納、劃分成一些類是人類在認(rèn)識(shí)客觀世界時(shí)經(jīng)常采用的思維方法。類是具有相同屬性和方法的一組對(duì)象的集合。從面向?qū)ο蟮母拍顏砜矗鎸?shí)世界中每個(gè)看得見的東西都是對(duì)象,如“紙”“飛機(jī)”“小狗”和“摩天大樓”等都可以看成一個(gè)對(duì)象。“屬性”是對(duì)象的靜態(tài)描述,而“方法”則是對(duì)象的動(dòng)態(tài)描述,或解釋為操作對(duì)象的方式。類描述了對(duì)象的構(gòu)造,而且可用于構(gòu)建對(duì)象的藍(lán)圖。定義了類之后,該類的名稱即成為新的數(shù)據(jù)類型,且可用于聲明該類型的變量和創(chuàng)建該類型的對(duì)象。

2.1.2 屬性與方法

例如,如何描述“銀行賬戶”這個(gè)對(duì)象呢?將它分為屬性與方法兩個(gè)方面考慮,與“銀行賬戶”對(duì)象相關(guān)的靜態(tài)屬性主要有銀行賬號(hào)、戶名、密碼、賬戶余額等,而與“銀行賬戶”相關(guān)的動(dòng)態(tài)方法有存款、取款、查詢余額、更改密碼等。

在描述“銀行賬戶”對(duì)象的屬性和方法時(shí)會(huì)忽略許多細(xì)節(jié),這是正常的,用戶可將這些不完整的抽象描述看成是“銀行賬戶”對(duì)象的輪廓,事實(shí)上對(duì)象本來就應(yīng)該只是一個(gè)抽象的輪廓,因?yàn)楸仨氁绬栴}的不同來描述不同的對(duì)象,而不是詳細(xì)地將一個(gè)對(duì)象描述出來。

2.1.3 對(duì)象的繼承

其實(shí)無論是有意或無意地將對(duì)象描述抽象化,在許多時(shí)候是有好處的,因?yàn)樵诿嫦驅(qū)ο蠓椒ㄖ校瑢?duì)象具有繼承(inheritance)的屬性。用來描述繼承最簡單的一句話就是“保留、修改與新增”。

例如,愛迪生發(fā)明了“第一代的電燈”,在當(dāng)時(shí)可能是登峰造極的產(chǎn)品,但以現(xiàn)在的眼光來看,這第一代的電燈可能太過耗電、不夠明亮,甚至在外觀質(zhì)感上都過于粗糙。后來的公司在改良研發(fā)之后,創(chuàng)造了新一代的電燈,新一代的電燈“保留”了電燈應(yīng)有的基本屬性,并“修改”了電燈的耗電量、明亮度和外觀,甚至在電燈上“新增”了一個(gè)小電子時(shí)鐘。可以說新一代的電燈是“繼承”第一代的電燈而來。

在繼承關(guān)系下,原來的對(duì)象稱作父類對(duì)象,而新對(duì)象稱作子類對(duì)象,父類和子類之間具有“相同種類”的關(guān)系。也就是說,在上面的電燈例子中,稱第一代與第二代的產(chǎn)品都是“電燈”的一種,并且用戶會(huì)發(fā)現(xiàn)在繼承架構(gòu)中越底層的子類越具有自己的特征,而越上層的父類往往是越抽象的,如圖2-1所示,第三代電燈所具有的特征遠(yuǎn)遠(yuǎn)多于第一代電燈。

圖2-1 架構(gòu)中底層子類中的特征

2.1.4 對(duì)象的重用

由對(duì)象的繼承屬性還可以看出另一個(gè)面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn),即對(duì)象的“重用性”。這是非常重要的特色,用戶在使用面向?qū)ο蠓椒ㄔO(shè)計(jì)程序時(shí)應(yīng)該時(shí)時(shí)提醒自己,盡量要將對(duì)象的重用性最大化。這可以從兩方面來說明:一是當(dāng)用戶在創(chuàng)造新對(duì)象時(shí),應(yīng)該以繼承現(xiàn)有對(duì)象為前提,而不是絞盡腦汁再去創(chuàng)造另一個(gè)全新的對(duì)象;另一方面應(yīng)該盡量以現(xiàn)成的對(duì)象來構(gòu)建程序。

例如,定義了一個(gè)“人”對(duì)象,那么當(dāng)定義“導(dǎo)游”對(duì)象時(shí)應(yīng)該以繼承“人”對(duì)象為出發(fā)點(diǎn),然后進(jìn)一步去做“保留、修改和新增”的工作,而不是毫無根據(jù)地再定義一個(gè)新的導(dǎo)游對(duì)象,并且當(dāng)定義好導(dǎo)游對(duì)象之后就應(yīng)該在所有需要導(dǎo)游對(duì)象的程序中重復(fù)使用。

對(duì)象重用性所帶來的好處是:用戶定義的對(duì)象越多,程序開發(fā)越容易,甚至就像堆積木那樣輕松與簡單(對(duì)象=積木)。程序設(shè)計(jì)中面向?qū)ο笾赜眯缘囊粋€(gè)最佳例子,就是Java所提供的各種API,這些API中的類彼此之間可相互繼承,并不斷派生新增功能,使得程序設(shè)計(jì)人員能容易地使用Java設(shè)計(jì)出功能強(qiáng)大的程序。

2.1.5 對(duì)象的封裝

導(dǎo)致對(duì)象可以被重復(fù)使用的關(guān)鍵因素是對(duì)象的封裝(encapsulation)屬性,在此前曾提到過,凡是對(duì)象都具有屬性和方法,而封裝的意思就是將對(duì)象的屬性和方法做適當(dāng)程度的“包裝”,只留下操作的接口,所以封裝也可以說成是一種“信息隱藏”(information hiding)。

封裝的最大好處就是會(huì)使對(duì)象容易使用,用戶無須去關(guān)心其內(nèi)部的細(xì)節(jié)。例如,“錄音機(jī)”是一個(gè)對(duì)象,無論其內(nèi)部構(gòu)造有多復(fù)雜,用戶總是由各種“錄音鍵”“播放鍵”“停止鍵”等按鍵來操作錄音機(jī)。這是因?yàn)椤颁浺魴C(jī)”對(duì)象已經(jīng)將其內(nèi)部的功能做了適當(dāng)程度的封裝,而“錄音鍵”“播放鍵”和“停止鍵”即是其所保留的操作接口。

2.1.6 對(duì)象的多態(tài)性

對(duì)象的多態(tài)性是指在一般類中定義的屬性或方法被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或方法在一般類及其各個(gè)特殊類中具有不同的語義。例如,“幾何圖形”的“繪圖”方法,“橢圓”和“多邊形”都是“幾何圖形”的子類,但其“繪圖”方法功能不同。

主站蜘蛛池模板: 馆陶县| 庆云县| 怀柔区| 荆门市| 阳西县| 遂川县| 高雄市| 枣强县| 申扎县| 舞钢市| 栾城县| 霍城县| 永寿县| 龙州县| 景德镇市| 武城县| 元朗区| 万州区| 慈溪市| 新郑市| 永城市| 涟源市| 本溪| 肇州县| 瑞安市| 咸阳市| 白城市| 宁都县| 凌海市| 麻城市| 保定市| 永修县| 略阳县| 墨玉县| 高碑店市| 孟津县| 绥棱县| 阜南县| 吉安县| 铜鼓县| 泰州市|