1.1 抽象過(guò)程
1>萬(wàn)物皆對(duì)象
在這個(gè)世界上可知的事物可以用語(yǔ)言 來(lái)描述它 示血,編程也是一樣我們可以用編程語(yǔ)言描述一切事物(外觀 行為 特征)讥蟆,只要你想得到马胧。
2>程序是對(duì)象的集合僵朗,它們通過(guò)發(fā)送消息來(lái)告知彼此所要做的 (方法調(diào)用)
3>每個(gè)對(duì)象都有自己的由其他對(duì)象所構(gòu)成的存儲(chǔ)(對(duì)象可以由其他對(duì)象組成)
4>每個(gè)對(duì)象都擁有類型(每個(gè)對(duì)象都有其獨(dú)特性 根據(jù)功能可以發(fā)送什么樣的消息給它)
5>某一特定類型的所有對(duì)象都可以接收同樣的消息
1.2 每個(gè)對(duì)象都有一個(gè)接口
接口確定了對(duì)某一特定對(duì)象所能發(fā)起的請(qǐng)求 席纽,向某個(gè)實(shí)現(xiàn)特定接口的對(duì)象發(fā)送消息捏悬,這個(gè)對(duì)象便知道此消息的目的,然后執(zhí)行對(duì)應(yīng)的程序代碼
1.3 每個(gè)對(duì)象都提供服務(wù)
開(kāi)發(fā)理解程序時(shí)润梯,將對(duì)象理解為“服務(wù)提供者”邮破,它(程序)通過(guò)調(diào)用一系列對(duì)象提供的服務(wù)解決問(wèn)題,我們做的就是去創(chuàng)建或是去尋找能夠提供理想服務(wù)解決問(wèn)題的一系列對(duì)象集合仆救,在這個(gè)過(guò)程中每個(gè)對(duì)象提供特定服務(wù)(而不是把多個(gè)功能讓一個(gè)對(duì)象實(shí)現(xiàn))
1.4 被隱藏的具體實(shí)現(xiàn)
訪問(wèn)控制:
1>讓客戶端程序員無(wú)法觸及不應(yīng)該觸及的部分
2>允許庫(kù)設(shè)計(jì)者可以改變類內(nèi)部的工作方式不用擔(dān)心會(huì)影響到客戶端程序員
private(私有 該類對(duì)象訪問(wèn))
default (包訪問(wèn)權(quán)限 同包訪問(wèn))
protected(保護(hù)訪問(wèn)權(quán)限 本身及子類訪問(wèn))
public (all)
1.5 復(fù)用的具體實(shí)現(xiàn)
通過(guò)組合實(shí)現(xiàn)復(fù)用(使用現(xiàn)有類合成新類)。
建立新類時(shí)矫渔,首先考慮組合彤蔽,因?yàn)樗?jiǎn)單靈活。
1.6 繼承
對(duì)象這種概念庙洼,將數(shù)據(jù)和功能封裝到一起顿痪,用關(guān)鍵字class表示,形成了編程語(yǔ)言中的基本單位油够,但是這樣做有許多麻煩蚁袭,創(chuàng)建一個(gè)類,即使另一個(gè)新類與其具有相似的功能石咬,你還得從新建一個(gè)類揩悄,為了解決這個(gè)問(wèn)題 繼承產(chǎn)生了。
繼承現(xiàn)有類時(shí)創(chuàng)造了新的類型鬼悠,這個(gè)類型包括繼承類的所有成員(盡管private成員被隱藏起來(lái)不可訪問(wèn))更重要的是他復(fù)制了基類的接口,這時(shí)可以對(duì)功能方法的覆蓋或者添加删性。
1.7 伴隨多態(tài)的可互換對(duì)象
處理類型的層次結(jié)構(gòu)時(shí),經(jīng)常想把一個(gè)對(duì)象不當(dāng)做他所屬的特定類型來(lái)對(duì)待焕窝,而是將其當(dāng)做基類(Object)來(lái)對(duì)待蹬挺。這使得人們編寫出不依賴于特定類型的代碼。
1.8 單根繼承結(jié)構(gòu)
在單根繼承結(jié)構(gòu)中的所有對(duì)象都具有一個(gè)公用接口它掂,所以它們歸根結(jié)底是相同的基本類型巴帮,單根繼承結(jié)構(gòu)保證所有對(duì)象具備某些功能,比如垃圾回收機(jī)制
1.9 容器(這一節(jié)把書本內(nèi)容打了一遍)
在解決某個(gè)特定問(wèn)題時(shí)需要多少對(duì)象,或者它們存活多久那么就不可能知道如何存儲(chǔ)這些對(duì)象榕茧,如何才知道需要多少空間創(chuàng)建這些對(duì)象垃沦,答案是你不可能知道,因?yàn)檫@類信息只有運(yùn)動(dòng)是才獲取雪猪。對(duì)于面向?qū)ο笤O(shè)計(jì)中的大多數(shù)問(wèn)題而言栏尚,這個(gè)問(wèn)題的解決方案似乎過(guò)于輕率,創(chuàng)建另一種對(duì)象類型這種新的對(duì)象類型持有對(duì)其他對(duì)象的引用只恨。當(dāng)然译仗,你可以用在大多數(shù)語(yǔ)言中都有的數(shù)組功能的數(shù)組類型來(lái)實(shí)現(xiàn)相同的功能,但這個(gè)通常被稱作為容器(也成為集合官觅,不過(guò)Java類庫(kù)以不同的含義使用集合這個(gè)術(shù)語(yǔ)纵菌,所以本書將使用容器這個(gè)詞),在任何你需要是都可以容納你置于容器中的所有的東西休涤。因此不需要將來(lái)要把多個(gè)對(duì)象置于容器中咱圆,只需要?jiǎng)?chuàng)建一個(gè)容器對(duì)象,然后讓他處理所有細(xì)節(jié)功氨。
幸運(yùn)的是序苏,好的OOP語(yǔ)言都有一組容器,它們作為開(kāi)發(fā)包的一部分捷凄。在c++中忱详,容器是標(biāo)準(zhǔn)c++類庫(kù)的一部分,經(jīng)常被稱為標(biāo)準(zhǔn)模板庫(kù)跺涤,Java在其標(biāo)準(zhǔn)庫(kù)中也包含大量的容器匈睁,在某些類庫(kù)中一兩個(gè)通用容器足夠滿足所有的需求,但是在其他類庫(kù)中桶错,具有滿足需要的各種類型的容器航唆,例如List,Map,Set,以及諸如隊(duì)列院刁、樹糯钙、堆棧等更多的構(gòu)件。
從設(shè)計(jì)的觀點(diǎn)來(lái)看黎比,真正需要的只是一個(gè)被操作超营,從而解決問(wèn)題的序列。如果單一類型的容器可以滿足所有需求阅虫,那么就沒(méi)有理由設(shè)計(jì)不同類型的序列了演闭。然而還是需要對(duì)容器有所選擇,這有兩個(gè)原因颓帝,第一米碰,不同容器提供了不同接口和外部行為窝革。堆棧相比于隊(duì)列就有不同的接口和外部行為,也不同于集合和列表的行為吕座,它們中的某種容器提供的解決方案可能比其他容器更靈活虐译。第二,不同容器對(duì)于某些操作具有不同的效果吴趴,最好的例子就是兩種List的比較:ArrayList和LinkedList.它們都是具有相同接口和外部行為的簡(jiǎn)單徐磊漆诽,但是它們對(duì)某些操作所花費(fèi)的代價(jià)卻有著天壤之別。在ArrayList中隨機(jī)訪問(wèn)元素是一個(gè)花費(fèi)固定時(shí)間的操作锣枝;但是對(duì)于LinkedList來(lái)說(shuō)隨機(jī)選取元素需要在列表中移動(dòng)厢拭,這種代價(jià)是高昂的,訪問(wèn)表尾的元素撇叁,花費(fèi)的時(shí)間越長(zhǎng)供鸠,而另一方面,如果想在序列中插入一個(gè)元素陨闹,linkedLIst的開(kāi)銷要比ArrayList小楞捂。上述操作以及其他操作效率,序列底層結(jié)構(gòu)的不同而存在巨大差異趋厉,我們可以一開(kāi)始使用LinkList構(gòu)建程序寨闹,而在優(yōu)化系統(tǒng)性能時(shí)改用ArrayList。接口List所帶來(lái)的抽象君账,把在容器之間進(jìn)行轉(zhuǎn)換時(shí)對(duì)代碼產(chǎn)生的影響降到最小限度
1.9.1 參數(shù)化類型
Java SE5之前容器中存對(duì)象鼻忠,需要向上轉(zhuǎn)型為Object,當(dāng)使用時(shí)我們需要向下轉(zhuǎn)型 (有兩個(gè)方面問(wèn)題)
1>可能在運(yùn)行時(shí)轉(zhuǎn)型錯(cuò)誤
2>向下轉(zhuǎn)型和運(yùn)行時(shí)的檢查需要額外的運(yùn)行時(shí)時(shí)間
為了解決這兩個(gè)問(wèn)題 ,更安全更更快捷的Java SE5引入泛型
1.10 對(duì)象的創(chuàng)建和生命周期
在使用對(duì)象時(shí)杈绸,最關(guān)鍵的問(wèn)題
便是他們的生成銷毀方式,每個(gè)對(duì)象為了生存需要資源矮瘟,尤其是內(nèi)存瞳脓,當(dāng)我們不在需要一個(gè)對(duì)象時(shí),它必須被清理掉澈侠,使其使用的資源得到釋放和重用
1.11 異常處理:處理錯(cuò)誤
異常處理將錯(cuò)誤直接置于編程語(yǔ)言中劫侧,異常是一種對(duì)象,它從出錯(cuò)點(diǎn)被拋出哨啃,并被專門設(shè)計(jì)用來(lái)處理特定類型錯(cuò)誤的相應(yīng)的異常處理器“捕獲”烧栋。
java一開(kāi)始內(nèi)置異常處理,而且你必須強(qiáng)制使用它拳球。
異常處理不是面向?qū)ο蟮奶卣魃笮眨M管在面向?qū)ο笳Z(yǔ)言中異常被表示成一個(gè)對(duì)象。異常處理在面向?qū)ο笾熬鸵呀?jīng)存在了祝峻。
1.12 并發(fā)編程
同一時(shí)間處理多個(gè)任務(wù)魔吐。
如果多個(gè)任務(wù)同時(shí)訪問(wèn)同一資源就會(huì)出現(xiàn)數(shù)據(jù)安全問(wèn)題
1.1.3 Java 與Internet
Java解決了萬(wàn)維網(wǎng)上的程序設(shè)計(jì)問(wèn)題
總結(jié) 從對(duì)象的導(dǎo)論來(lái)看 粗略涵蓋java大致內(nèi)容