第1章對(duì)象導(dǎo)論筆記

1.1 抽象過(guò)程


面向?qū)ο笳Z(yǔ)言如java的5個(gè)基本特性

  • 萬(wàn)物皆對(duì)象。 可將對(duì)象想象成為一個(gè)奇特的變量;它保存著數(shù)據(jù)骤坐,還可要求它對(duì)自身進(jìn)行操作锻拘。
  • 程序是對(duì)象的集合油吭,他們通過(guò)彼此發(fā)送消息來(lái)告知彼此所需要的。 要想請(qǐng)求一個(gè)對(duì)象署拟,就必須對(duì)該對(duì)象發(fā)送一條消息婉宰。更具體的說(shuō),可以把消息相像為對(duì)某個(gè)特定對(duì)象的方法的調(diào)用推穷。
  • 每個(gè)對(duì)象都有自己的有其他對(duì)象所構(gòu)成的存儲(chǔ)心包。 換句話說(shuō),可以通過(guò)創(chuàng)建包含現(xiàn)有對(duì)象的包的方式來(lái)創(chuàng)建新的對(duì)象馒铃。在構(gòu)建復(fù)雜的體系中蟹腾,可以將其復(fù)雜性隱藏在對(duì)象的簡(jiǎn)單性背后痕惋。
  • 每個(gè)對(duì)象都擁有其類型 通用的來(lái)說(shuō),"每個(gè)對(duì)象都是某個(gè)類(class)的一個(gè)實(shí)例(instance)"娃殖,這里"類"就是"類型"的同義詞值戳,每個(gè)類最重要的區(qū)別于其他類的特性就是"可以發(fā)送什么消息給它"。
  • 某一特定類型的所有對(duì)象都可以接收同樣的消息 由于類型為"圓"(Circle)的一個(gè)對(duì)象也屬于類型為“形狀”(Shape)的一個(gè)對(duì)象炉爆,所以一個(gè)圓完全能接收形狀消息堕虹。這意味著可讓程序代碼統(tǒng)一指揮“形狀”,令其自動(dòng)控制所有符合“形狀”描述的對(duì)象芬首,其中自然包括"圓"赴捞。這一特性稱為對(duì)象的“可替換性”,是OOP最重要的概念之一郁稍。

1.2 每個(gè)對(duì)象都有一個(gè)接口


  • 所有的對(duì)象都是唯一的赦政,但同時(shí)也具有相同的特性和行為的對(duì)象歸屬于一類。
  • 在程序執(zhí)行期間具有不同的狀態(tài)而其他方面都有相似的對(duì)象會(huì)被分組到對(duì)象的類中耀怜。這就是關(guān)鍵字class的由來(lái)恢着。
  • 怎么樣獲得對(duì)象呢?必須有某種方式產(chǎn)生對(duì)對(duì)象的請(qǐng)求封寞,使對(duì)象完成各種任務(wù)然评,如完成一筆交易、在屏幕上畫(huà)圖狈究、打開(kāi)開(kāi)關(guān)等等碗淌。每個(gè)對(duì)象都只能滿足某些請(qǐng)求,這些請(qǐng)求由接口(interface)定義抖锥,決定接口的便是類型亿眠。

    上面的例子總,類型/類的名字是Light磅废,特定的Light對(duì)象的名稱是It纳像,可以向Light對(duì)象發(fā)出的請(qǐng)求是:打開(kāi)它、關(guān)閉它拯勉、將它調(diào)亮竟趾、將它調(diào)暗。

1.3 每個(gè)對(duì)象都提供服務(wù)


  • 將對(duì)象看成是"服務(wù)提供者"宫峦,程序本身將向用戶提供服務(wù)岔帽,它通過(guò)調(diào)用其他對(duì)象提供的服務(wù)來(lái)實(shí)現(xiàn)這一目的。
  • 將對(duì)象看作是服務(wù)提供者還有一個(gè)附帶的好處:它有助于提供對(duì)象的內(nèi)聚性导绷。高內(nèi)聚是軟件設(shè)計(jì)的基本質(zhì)量要求之一:這意味著一個(gè)軟件架構(gòu)(例如一個(gè)對(duì)象犀勒,當(dāng)然它也有可能是指一個(gè)方法或?qū)ο髱?kù))的各個(gè)方面。

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


  • 將程序開(kāi)發(fā)人員按照角色分為類創(chuàng)建者(那些創(chuàng)建新數(shù)據(jù)類型的程序員)和客戶端程序員(那些在其應(yīng)用中使用數(shù)據(jù)類型的類消費(fèi)者)是大有裨益的,客戶端程序員的目標(biāo)是收集各種應(yīng)用來(lái)實(shí)現(xiàn)快速應(yīng)用開(kāi)發(fā)的類贾费。類創(chuàng)建者的目標(biāo)是構(gòu)建類钦购,這種類只向客戶端程序員暴露必須的部分,而隱藏其他部分褂萧。
  • 為什么要這樣呢押桃?如果加以隱藏,那么客戶端程序員將不能夠訪問(wèn)它箱玷,這意味著創(chuàng)建者可以任意修改被隱藏的部分怨规,而不用擔(dān)心對(duì)其他任何人造成影響陌宿。

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


  • 一旦類被創(chuàng)建并被測(cè)試完锡足,那么它就應(yīng)該代表有一個(gè)用的代碼單元。代碼復(fù)用是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言所提供的最了不起的優(yōu)點(diǎn)之一壳坪。
  • 新的類可以由任意數(shù)量舶得、任意類型的其他對(duì)象以任何實(shí)現(xiàn)新的類中想要的功能的方式組成。因?yàn)槭窃谑褂矛F(xiàn)有的類合成的新的類爽蝴,這個(gè)概念被稱為組合(compostion)沐批,如果組合是動(dòng)態(tài)發(fā)生的,那么它通常被稱為聚合(aggregation)蝎亚。組合經(jīng)常被視為“has-a”(擁有)關(guān)系九孩。就像我們常說(shuō)的“汽車(chē)擁有引擎一樣”。

1.6 繼承


  • 當(dāng)源類(被稱為基類发框、超類或父類)發(fā)生變動(dòng)時(shí)躺彬,被修改的“副本”(被稱為到導(dǎo)出類、繼承類或子類)梅惯。
    一個(gè)基類型包含所有導(dǎo)出類型所共享的特性和行為宪拥。可以創(chuàng)建一個(gè)基類型來(lái)表示系統(tǒng)中某些對(duì)線的核心概念铣减,從基類型導(dǎo)出其他類型她君,來(lái)表示此核心可以被實(shí)現(xiàn)的不同方式。
  • 以垃圾回收機(jī)為例葫哗,它用來(lái)歸類散落的垃圾缔刹。“垃圾”是基類型劣针,每一件垃圾都有重量校镐、價(jià)值等特性,可以被切碎酿秸、融化或分解灭翔。
  • 有兩種方法可以使基類與導(dǎo)出類產(chǎn)生差異,第一種方法非常直接:直接在導(dǎo)出類中添加新方法。這些方法并不是基類接口的一部分肝箱。
    第二種也是更重要的一種使導(dǎo)出類與基類之間產(chǎn)生差異的方法是改變現(xiàn)有基類的方法的行為哄褒,這被稱為覆蓋(overriding)。

1.7 伴隨多態(tài)的可互換對(duì)象


  • 在處理類型的層次結(jié)構(gòu)時(shí)煌张,經(jīng)常想把一個(gè)對(duì)象不當(dāng)做它所屬的特定類型來(lái)對(duì)待呐赡,而是將其當(dāng)做其基類的對(duì)象來(lái)對(duì)待。這使得人們可以編寫(xiě)出不依賴特定類型的代碼骏融。這種方法的操作都是泛化(generic)链嘀。
  • 前期綁定:在編譯時(shí), 方法調(diào)用已經(jīng)和方法體綁定档玻。
  • 后期綁定:在運(yùn)行時(shí)怀泊,根據(jù)存儲(chǔ)在對(duì)象內(nèi)部的信息計(jì)算方法體的地址,以完成調(diào)用误趴。
    java顯然屬于后者霹琼。
  • 把將導(dǎo)出類看作是它的基類的過(guò)程被稱為向上轉(zhuǎn)型(upcasting)。通沉沟保基類在頂部枣申,而導(dǎo)出類在其下部散開(kāi),轉(zhuǎn)型為一個(gè)基類就是在繼承圖中向上移動(dòng)看杭,即向上轉(zhuǎn)型忠藤。

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


在OOP總,所有的類最終都集成自單一的基類楼雹,這個(gè)終極基類的名字就是Object模孩。
單根繼承結(jié)構(gòu)使垃圾回收器的實(shí)現(xiàn)變的容易得多。

1.9 容器


在之前容器中只存儲(chǔ)Object的對(duì)象烘豹,在向下轉(zhuǎn)型的過(guò)程中存在安全隱患瓜贾,故在建立容器的時(shí)候直接顯式的定義泛型,以<>表示携悯。例如:

Linkedlist<String>

1.10 對(duì)象的創(chuàng)建和生命期


java完全采用了動(dòng)態(tài)內(nèi)存分配方式祭芦,每當(dāng)想要?jiǎng)?chuàng)建一個(gè)新對(duì)象是,就要使用new關(guān)鍵字來(lái)構(gòu)建此對(duì)象的實(shí)例憔鬼。

  • java語(yǔ)言有自己的垃圾回收機(jī)制(區(qū)別于C++需要人為地寫(xiě)析構(gòu)函數(shù)龟劲,控制內(nèi)存的釋放),垃圾收集

  • 對(duì)象數(shù)據(jù)的分布轴或,這一點(diǎn)會(huì)在JVM(java virtual machine)中重點(diǎn)講到昌跌。JAVA運(yùn)行時(shí)數(shù)據(jù)區(qū)包括:

    • 方法區(qū) 方法區(qū)主要存儲(chǔ)一些靜態(tài)數(shù)據(jù)
    • 引用所指向的數(shù)據(jù)放在堆中
    • 虛擬機(jī)棧 通常我們認(rèn)為引用(類似C++中的指針)存放在棧(虛擬機(jī)棧)
    • 本地方法棧 對(duì)應(yīng)native方法
    • 程序計(jì)數(shù)器 類似計(jì)算機(jī)中的程序計(jì)數(shù)器,用于記錄字節(jié)碼指令

1.11 異常處理


異常處理將錯(cuò)誤置于編程語(yǔ)言中照雁,有時(shí)置于操作系統(tǒng)中蚕愤。異常是一種該對(duì)象,它從錯(cuò)誤地點(diǎn)被“拋出”,并被專門(mén)設(shè)計(jì)用來(lái)處理特定類型錯(cuò)誤的相應(yīng)的異常處理器“捕獲”萍诱。

1.12 并發(fā)編程


把問(wèn)題切分成多個(gè)可獨(dú)立運(yùn)行的部分(任務(wù))悬嗓,從而提高程序的響應(yīng)能力。這些獨(dú)立運(yùn)行的部分叫線程裕坊。也稱為并發(fā)包竹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市籍凝,隨后出現(xiàn)的幾起案子周瞎,更是在濱河造成了極大的恐慌,老刑警劉巖饵蒂,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声诸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苹享,警方通過(guò)查閱死者的電腦和手機(jī)双絮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)得问,“玉大人,你說(shuō)我怎么就攤上這事软免」常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵膏萧,是天一觀的道長(zhǎng)漓骚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)榛泛,這世上最難降的妖魔是什么蝌蹂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮曹锨,結(jié)果婚禮上孤个,老公的妹妹穿的比我還像新娘。我一直安慰自己沛简,他們只是感情好齐鲤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著椒楣,像睡著了一般给郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧灰,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天淆九,我揣著相機(jī)與錄音,去河邊找鬼。 笑死炭庙,一個(gè)胖子當(dāng)著我的面吹牛跪另,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煤搜,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼免绿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了擦盾?” 一聲冷哼從身側(cè)響起嘲驾,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迹卢,沒(méi)想到半個(gè)月后辽故,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腐碱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年誊垢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症见。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喂走,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谋作,到底是詐尸還是另有隱情芋肠,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布遵蚜,位于F島的核電站帖池,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吭净。R本人自食惡果不足惜睡汹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寂殉。 院中可真熱鬧囚巴,春花似錦、人聲如沸不撑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焕檬。三九已至姆坚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間实愚,已是汗流浹背兼呵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工兔辅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人击喂。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓维苔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懂昂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介时,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)凌彬,斷路器沸柔,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,930評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法铲敛,內(nèi)部類的語(yǔ)法褐澎,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法伐蒋,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,598評(píng)論 18 399
  • 文/張陳 雖不曾拉起誰(shuí)的手工三,但也有過(guò)心上人。 他姓楊先鱼,有一天陽(yáng)光很好俭正,薄荷草茁壯生長(zhǎng),我站在窗前型型,偷偷看他從窗外走...
    張陳1997閱讀 305評(píng)論 6 3
  • vi ~/.zshrc # where proxy proxy () {export http_proxy="ht...
    wFan閱讀 4,927評(píng)論 0 0