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ā)包竹。