第一章 對象入門

抽象入門

對管理人員,它實現(xiàn)了更快和更廉價的開發(fā)與維護(hù)過程**

? 對分析與設(shè)計人員忆谓,建模處理變得更加簡單盟迟,能生成清晰秋泳、易于維護(hù)的設(shè)計方案

對程序員,對象模型顯得如此高 雅和淺顯

如果說它有缺點攒菠,那就是掌握它需付出的代價迫皱。思考對象的時候,需要采用形象思維要尔,而不是程序化的思 維

1.1 抽象的進(jìn)步

? 每個對象都類似一臺小計算機(jī)舍杜; 它們有自己的狀態(tài),而且可要求它們進(jìn)行特定的操作赵辕。與現(xiàn)實世界的“對象”或者“物體”相比既绩,編程“對 象”與它們也存在共通的地方:它們都有自己的特征和行為。

? (1) 所有東西都是對象还惠∷俏眨可將對象想象成一種新型變量;它保存著數(shù)據(jù)蚕键,但可要求它對自身進(jìn)行操作救欧。理論 上講,可從要解決的問題身上提出所有概念性的組件锣光,然后在程序中將其表達(dá)為一個對象笆怠。(2) 程序是一大堆對象的組合;通過消息傳遞誊爹,各對象知道自己該做些什么蹬刷。為了向?qū)ο蟀l(fā)出請求,需向那

個對象“發(fā)送一條消息”频丘。更具體地講办成,可將消息想象為一個調(diào)用請求,它調(diào)用的是從屬于目標(biāo)對象的一個 子例程或函數(shù)搂漠。

(3) 每個對象都有自己的存儲空間迂卢,可容納其他對象。或者說而克,通過封裝現(xiàn)有對象靶壮,可制作出新型對象。所 以拍摇,盡管對象的概念非常簡單亮钦,但在程序中卻可達(dá)到任意高的復(fù)雜程度。(4) 每個對象都有一種類型充活。根據(jù)語法,每個對象都是某個“類”的一個“實例”蜡娶。其中混卵,“類”(Class)是“類型”(Type)的同義詞。一個類最重要的特征就是“能將什么消息發(fā)給它窖张?”幕随。(5) 同一類所有對象都能接收相同的消息。這實際是別有含義的一種說法宿接,大家不久便能理解赘淮。由于類型為 “圓”(Circle)的一個對象也屬于類型為“形狀”(Shape)的一個對象,所以一個圓完全能接收形狀消 息睦霎。這意味著可讓程序代碼統(tǒng)一指揮“形狀”梢卸,令其自動控制所有符合“形狀”描述的對象,其中自然包括“圓”副女。這一特性稱為對象的“可替換性”蛤高,是 OOP 最重要的概念之一

1.2 對象的接口

所有對象——盡管各有特色——都屬于某一系列對象的一部分,這些對象具有通用的特征和行為

當(dāng)您看到“type”這個字的時候碑幅,請同時想到 “class”戴陡;反之亦然。 建好一個類后沟涨,可根據(jù)情況生成許多對象恤批。隨后,可將那些對象作為要解決問題中存在的元素進(jìn)行處理

如何利用對象完成真正有用的工作呢裹赴?必須有一種辦法能向?qū)ο蟀l(fā)出請求喜庞,令其做一些實際的事情,比如完 成一次交易篮昧、在屏幕上畫一些東西或者打開一個開關(guān)等等赋荆。每個對象僅能接受特定的請求。我們向?qū)ο蟀l(fā)出 的請求是通過它的“接口”(Interface)定義的懊昨,對象的“類型”或“類”則規(guī)定了它的接口形式窄潭。“類 型”與“接口”的等價或?qū)?yīng)關(guān)系是面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)

1.3 實現(xiàn)方案的隱藏

Java 采用三個顯式(明確)關(guān)鍵字以及一個隱式(暗示)關(guān)鍵字來設(shè)置類邊界:public,private嫉你, protected 以及暗示性的 friendly

1.4 方案的重復(fù)使用

為重復(fù)使用一個類月帝,最簡單的辦法是僅直接使用那個類的對象。但同時也能將那個類的一個對象置入一個新 類幽污。我們把這叫作“創(chuàng)建一個成員對象”嚷辅。新類可由任意數(shù)量和類型的其他對象構(gòu)成

1.5 繼承:重新使用接口

1.5.1 改善基礎(chǔ)類.

1.5.2 等價與類似關(guān)系..

繼承只能改善原基礎(chǔ)類的函數(shù)嗎?若答案是肯定的距误,則衍生類型就是 與基礎(chǔ)類完全相同的類型簸搞,因為都擁有完全相同的接口

1.6 多形對象的互換使用

將衍生類的對象當(dāng)作基礎(chǔ)類的一個對象對待。這一點是 非常重要的准潭,因為它意味著我們只需編寫單一的代碼趁俊,令其忽略類型的特定細(xì)節(jié),只與基礎(chǔ)類打交道刑然。這樣 一來寺擂,那些代碼就可與類型信息分開。所以更易編寫泼掠,也更易理解怔软。此外,若通過繼承增添了一種新類型择镇, 如“三角形”挡逼,那么我們?yōu)椤皫缀涡螤睢毙骂愋途帉懙拇a會象在舊類型里一樣良好地工作。所以說程序具 備了“擴(kuò)展能力”沐鼠,具有“擴(kuò)展性”挚瘟。

我們將這種把衍生類型當(dāng)作它的基本類型處理的過程叫作“Upcasting”(上溯造型)

1.6.1 動態(tài)綁定....

將一條消息發(fā)給對象時,如果并不知道對方的具體類型是什么饲梭,但采取的行動同樣是正確的乘盖,這種情況就叫 作“多形性”(Polymorphism)。

對面向?qū)ο蟮某绦蛟O(shè)計語言來說憔涉,它們用以實現(xiàn)多形性的方法叫作“動態(tài) 綁定”

1.6.2 抽象的基礎(chǔ)類和接口.

設(shè)計程序時订框,我們經(jīng)常都希望基礎(chǔ)類只為自己的衍生類提供一個接口。也就是說兜叨,我們不想其他任何人實際 創(chuàng)建基礎(chǔ)類的一個對象穿扳,只對上溯造型成它,以便使用它們的接口国旷。為達(dá)到這個目的矛物,需要把那個類變成

“抽象”的——使用 abstract 關(guān)鍵字

1.7 對象的創(chuàng)建和存在時間

Java 確實提供了一個垃圾收集器

1.7.1 集合與繼承器

用于 解決特定問題的新型對象容納了指向其他對象的句柄。當(dāng)然跪但,也可以用數(shù)組來做同樣的事情履羞,那是大多數(shù)語 言都具有的一種功能。但不能只看到這一點。這種新對象通常叫作“集合”(亦叫作一個“容器”

Java 也用自己的標(biāo)準(zhǔn)庫提供了集合

集合都提供了相應(yīng)的讀寫功能

將某樣?xùn)|西置入集合時忆首,采用的方式是十分明顯的爱榔。有一個叫作“推”(Push)、“添加”(Add)

如果想對集合中的 一系列元素進(jìn)行操縱或比較糙及,而不是僅僅面向一個详幽,這時又該怎么辦呢?辦法就是使用一個“繼續(xù)器”(Iterator)浸锨,它屬于一種對象唇聘,負(fù)責(zé)選擇集合內(nèi)的元素,并把它們提供給繼承器的用戶

通過繼承器的作用柱搜,集合被抽象成一個簡單的序列雳灾。繼承器允許我們遍歷那個序列,同時毋需關(guān) 心基礎(chǔ)結(jié)構(gòu)是什么——換言之冯凹,不管它是一個矢量、一個鏈接列表炒嘲、一個堆棧宇姚,還是其他什么東西。這樣一 來夫凸,我們就可以靈活地改變基礎(chǔ)數(shù)據(jù)

1.7.2 單根結(jié)構(gòu).1.7.3 集合庫與方便使用集合1.7.4 清除時的困境:由誰負(fù)責(zé)清除浑劳?1.8 違例控制:解決錯誤 1.9 多線程.1.10 永久性 1.11 Java 和因特網(wǎng).1.11.1 什么是 Web ?1.11.2 客戶端編程(注釋⑧) 1.11.3 服務(wù)器端編程 1.11.4 一個獨立的領(lǐng)域:應(yīng)用程序.1.12 分析和設(shè)計.1.12.1 不要迷失1.12.2 階段 0:擬出一個計劃1.12.3 階段 1:要制作什么夭拌?1.12.4 階段 2:如何構(gòu)建魔熏? .1.12.5 階段 3:開始創(chuàng)建 .1.12.6 階段 4:校訂 1.12.7 計劃的回報 1.13 Java 還是 C++?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸽扁,一起剝皮案震驚了整個濱河市蒜绽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桶现,老刑警劉巖躲雅,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骡和,居然都是意外死亡相赁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慰于,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钮科,“玉大人,你說我怎么就攤上這事婆赠∶喔” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長桨嫁。 經(jīng)常有香客問我植兰,道長,這世上最難降的妖魔是什么璃吧? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任楣导,我火速辦了婚禮,結(jié)果婚禮上畜挨,老公的妹妹穿的比我還像新娘筒繁。我一直安慰自己,他們只是感情好巴元,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布毡咏。 她就那樣靜靜地躺著,像睡著了一般逮刨。 火紅的嫁衣襯著肌膚如雪呕缭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天修己,我揣著相機(jī)與錄音恢总,去河邊找鬼。 笑死睬愤,一個胖子當(dāng)著我的面吹牛片仿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尤辱,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼砂豌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了光督?” 一聲冷哼從身側(cè)響起阳距,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎可帽,沒想到半個月后娄涩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡映跟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年蓄拣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片努隙。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡球恤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荸镊,到底是詐尸還是另有隱情咽斧,我是刑警寧澤堪置,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站张惹,受9級特大地震影響舀锨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宛逗,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一坎匿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雷激,春花似錦替蔬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至根悼,卻和暖如春凶异,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挤巡。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工唠帝, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玄柏。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像贴铜,于是被迫代替她去往敵國和親粪摘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容