[Java編程思想] 對象導(dǎo)論

該系列文章是在讀《Java編程思想》時(shí)的讀書筆記揭斧。
一只菜鳥俯萌,如文章中有錯(cuò)誤,還請指出买优,非常感謝妨马。
歡迎相互交流。
                             -- QyQiaoo
文章列表

1. 抽象過程

  • 所有編程語言都提供抽象機(jī)制杀赢『娑澹可以認(rèn)為人們所能夠解決的問題的復(fù)雜性直接取決于抽象的類型和質(zhì)量。其中“類型”是指“所抽象的是什么脂崔?”
語言 抽象
匯編語言 匯編語言是對底層機(jī)器的輕微抽象
FORTRAN / BASIC / C (“命令”式語言) 這些語言都是對匯編語言的抽象
  • 程序員必須建立起在機(jī)器模型(位于“解空間”內(nèi)液荸,對問題建模的地方)和實(shí)際待解決問題的模型(位于“問題空間”,這是問題存在的地方)之間的關(guān)聯(lián)脱篙;
  • 在面向?qū)ο蟮姆绞街校覀儗栴}空間中的元素及其在解空間中的表示稱之為“對象”伤柄,這種思想的實(shí)質(zhì)是:程序可以通過添加新類型的對象使自身用于某個(gè)特定問題绊困;
  • OOP允許根據(jù)問題來描述問題。而不是根據(jù)運(yùn)行解決方案的計(jì)算機(jī)來描述問題适刀;面向?qū)ο蟪绦蛟O(shè)計(jì)的挑戰(zhàn)之一秤朗,及時(shí)在問題空間的元素和解空間的對象之間創(chuàng)建一對一的映射;
  • Booch對對象提出了一個(gè)更加簡潔的陳述:對象具有狀態(tài)笔喉、行為和標(biāo)識取视;

2. 每個(gè)對象都有一個(gè)接口

  • 每個(gè)對象都只能滿足某些請求,這些請求由對象的接口(Interface)所定義常挚;
  • 接口確定了對某一特定對象所發(fā)出的請求作谭,如下圖所示,類型/類名稱為Light奄毡,可以向Light對象發(fā)出的請求是:打開 它折欠、關(guān)閉它、將它調(diào)亮、將它調(diào)暗锐秦。


    電燈類圖

3. 每個(gè)對象都提供服務(wù)

  • 當(dāng)試圖開發(fā)或者理解一個(gè)程序設(shè)計(jì)時(shí)咪奖,最好的方法之一就是將對象想象為“服務(wù)提供者”
    將對象看作是服務(wù)提供者還有一個(gè)附帶的好處:提高對象的內(nèi)聚信性酱床,高內(nèi)聚性是軟件設(shè)計(jì)的基本質(zhì)量要求之一羊赵。

4. 被隱藏的具體實(shí)現(xiàn)

  • 訪問控制存在原因:一、讓程序員無法觸及他們不該觸及的部分扇谣;二昧捷、允許類庫設(shè)計(jì)者改變類的內(nèi)部結(jié)構(gòu)而不用擔(dān)心影響使用該類的程序員;
  • 訪問控制有四種揍堕,如下所示:
訪問控制字符
public 任何人都可以用
private 除類型創(chuàng)建者和類型內(nèi)部方法外的任何人都不能訪問
protected 除類型創(chuàng)建者和類型的內(nèi)部方法及繼承的類外的任何人都不能訪問
default 同包中的類可以訪問(包的訪問權(quán)限)

5. 復(fù)用具體實(shí)現(xiàn)

  • 最簡單的復(fù)用某個(gè)類的方式就是直接使用該類的對象料身;
  • 復(fù)用也可以是將類的一個(gè)對象置于某個(gè)新類中,我們稱其為“創(chuàng)建了一個(gè)成員對象”衩茸,(使用現(xiàn)有類合成新的類稱之為組合(composition))芹血,如果是動態(tài)發(fā)生則稱之為聚合(aggregation),組合經(jīng)常被視為“has-a(擁有)”關(guān)系楞慈。如:我們常說“汽車擁有引擎”幔烛,可用如下UML圖表示:
    汽車擁有引擎
  • 注:組合帶來了極大的靈活性。新類的成員對象通常都被聲明為private囊蓝,使得使用新類的客戶端程序員不能訪問他們盾舌,這也可用使得你在不干擾現(xiàn)有客戶端代碼的情況下膏蚓,修改這些成員,也可以在運(yùn)行時(shí)修改這些成員對象,以實(shí)現(xiàn)動態(tài)修改程序的行為洼滚,而繼承不具備這樣的靈活性,因?yàn)榫幾g器必須通過繼承而創(chuàng)建的類事假編譯時(shí)的限制徽龟。

6. 繼承

  • 通過繼承我們可以實(shí)現(xiàn)以現(xiàn)有類為基礎(chǔ)蟋软,復(fù)制它并發(fā)添加修改這個(gè)副本來創(chuàng)建新類,但當(dāng)父類發(fā)生變動時(shí)姥芥,子類也會反映出這些變動兔乞,UML類圖如下所示:

    繼承

  • 父類包含了所有子類所共有的特性。

  • 父類和子類有著相同的基礎(chǔ)接口凉唐,所以伴隨著此接口必定有某些方法的具體實(shí)現(xiàn)庸追。有兩種方法可以使父類與子類產(chǎn)生差異:一、在子類中添加新方法台囱;二淡溯、改變現(xiàn)有父類的方法,這被稱之為覆蓋(Overridding)那個(gè)方法

  • 若子類中沒有添加新的方法簿训,此時(shí)可以稱子類完全替代一個(gè)基類對象血筑,可以被視為純粹替代绘沉,這種關(guān)系被稱為is-a(是一個(gè))關(guān)系;若添加了新的方法可以稱為is-like-a(像是一個(gè))關(guān)系豺总。

7. 伴隨多態(tài)的可互換對象

  • 在處理類型的層次結(jié)構(gòu)時(shí)车伞,經(jīng)常想把一個(gè)對象對象不當(dāng)作他所屬的特定類型來對待,而是將其作為基類的對象來對待喻喳,這使得人們可以編寫不依賴特定類型的代碼另玖。
  • 在Java中采用了后期綁定的概念解決了程序直至運(yùn)行時(shí)才能確定代碼的地址的問題;為了執(zhí)行后期綁定表伦,Java使用了一小段特殊的代碼來替代絕對地址調(diào)用谦去,這段代碼使用在對象中儲存的信息來計(jì)算方法體的地址。
  • 將子類看為父類的過程稱為 向上轉(zhuǎn)型(upcasting)

8. 單根繼承結(jié)構(gòu)

  • 單根繼承結(jié)構(gòu)保證了所有對象都具有某些功能蹦哼,因此在系統(tǒng)中可以在每個(gè)對象上執(zhí)行某些基本的操作鳄哭,并且所有的對象都可以很容易的在對上創(chuàng)建,參數(shù)傳遞也得到了極大的簡化纲熏,并且單根集成結(jié)構(gòu)也使的垃圾回收器的實(shí)現(xiàn)變得容易很多妆丘。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市局劲,隨后出現(xiàn)的幾起案子勺拣,更是在濱河造成了極大的恐慌,老刑警劉巖鱼填,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件药有,死亡現(xiàn)場離奇詭異,居然都是意外死亡苹丸,警方通過查閱死者的電腦和手機(jī)愤惰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赘理,“玉大人宦言,你說我怎么就攤上這事「泻叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵令花,是天一觀的道長阻桅。 經(jīng)常有香客問我,道長兼都,這世上最難降的妖魔是什么嫂沉? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮扮碧,結(jié)果婚禮上趟章,老公的妹妹穿的比我還像新娘杏糙。我一直安慰自己,他們只是感情好蚓土,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布宏侍。 她就那樣靜靜地躺著,像睡著了一般蜀漆。 火紅的嫁衣襯著肌膚如雪谅河。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天确丢,我揣著相機(jī)與錄音绷耍,去河邊找鬼。 笑死鲜侥,一個(gè)胖子當(dāng)著我的面吹牛褂始,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播描函,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼崎苗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赘阀?” 一聲冷哼從身側(cè)響起益缠,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎基公,沒想到半個(gè)月后幅慌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轰豆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年胰伍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酸休。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骂租,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斑司,到底是詐尸還是另有隱情渗饮,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布宿刮,位于F島的核電站互站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏僵缺。R本人自食惡果不足惜胡桃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磕潮。 院中可真熱鬧翠胰,春花似錦容贝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闺兢,卻和暖如春茂缚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屋谭。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工脚囊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桐磁。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓悔耘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親我擂。 傳聞我的和親對象是個(gè)殘疾皇子衬以,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法校摩,內(nèi)部類的語法看峻,繼承相關(guān)的語法,異常的語法衙吩,線程的語...
    子非魚_t_閱讀 31,662評論 18 399
  • (一)Java部分 1互妓、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,114評論 0 62
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,233評論 0 2
  • 簡書寫作一年多灼狰,我卻只收獲了300多個(gè)喜歡,40多個(gè)關(guān)注浮禾。面對如此慘淡的成績交胚,我的心里失落無比。 我曾一度懷疑自己...
    彼岸很美閱讀 846評論 7 24
  • 天下熙熙皆為利來,天下嚷嚷皆為利往挣轨。不管一個(gè)人的理想是遠(yuǎn)大還是渺小军熏,夢想是高尚還是低俗轩猩,絕大多數(shù)的人都是為了實(shí)現(xiàn)人...
    性感有才的郭郭閱讀 234評論 0 1