第一章 對(duì)象導(dǎo)論(Java對(duì)象導(dǎo)論)

計(jì)算機(jī)革命起源于機(jī)器右冻,編程語言的產(chǎn)生也始于對(duì)機(jī)器的模仿

但隨著發(fā)展機(jī)器越來越像人腦的一部分滑频,于是編程語言也不斷發(fā)展淳地,在不斷經(jīng)歷抽象過程后怖糊,更類似人類所認(rèn)知的方式 。 面向?qū)ο缶幊瘫闶瞧渲械囊环N重要實(shí)現(xiàn)思想

1.1 抽象過程

所有的編程語言都提供抽象機(jī)制颇象,抽象是指我們使用語言映射或描述什么伍伤,比如匯編語言是對(duì)底層機(jī)器的輕微抽象(用命令語言來描述機(jī)器控制機(jī)器),命令語言 c basic則是對(duì) 匯編語言的抽象 ?實(shí)際上這些語言依然是在基于計(jì)算機(jī)結(jié)構(gòu)來解決遇到的問題 ? 其實(shí)是在使用計(jì)算機(jī)模型來解決生活中的業(yè)務(wù)問題 ?難以理解遣钳,開發(fā)與維護(hù)

oop(object orientd programming) 面向?qū)ο缶幊淌且环N更為有力的抽象 ?它為程序猿提供了 業(yè)務(wù)空間中的元素(對(duì)象)工具扰魂,程序猿可以依據(jù)業(yè)務(wù)空間,來添加新的元素(對(duì)象)以使程序可以解決業(yè)務(wù)問題蕴茴。更加具有靈活性劝评,更易理解。 它根據(jù)問題 來 描述問題倦淀,而不是依據(jù)解決方案的計(jì)算機(jī)來描述問題蒋畜。

面向?qū)ο笳Z言的五個(gè)標(biāo)準(zhǔn)(重要)

1.萬物接對(duì)象 ? 將對(duì)象視為變量 具有存儲(chǔ)數(shù)據(jù)的能力 同時(shí)也擁有自身行為 ,事實(shí)上你所能想到的物品都可以抽象(描述)為程序中的對(duì)象

2.程序是對(duì)象的集合撞叽,他們通過發(fā)送信息來告知彼此所要做的事

3.每個(gè)對(duì)象都有其他對(duì)象作為存儲(chǔ)的元素(對(duì)象屬性可以是對(duì)象)

4.每個(gè)對(duì)象都擁有其類型 ? ?每個(gè)對(duì)象都是某個(gè)類的實(shí)例?

5.某一特定類型的所有對(duì)象都可以接收同樣的消息(多態(tài)) ? ? 圓形 與 方形 都屬于 幾何圖形(類) 他們具有一些相同的行為 可以接收同樣的信息執(zhí)行行為 ? : 圓形.acreage()? ?方形.acreage( )? ?返回面積

對(duì)象:對(duì)象具有狀態(tài)姻成,行為與標(biāo)識(shí) ? ? ? 每個(gè)對(duì)象都具有內(nèi)部數(shù)據(jù)與方法行為,并且每個(gè)對(duì)象在內(nèi)存中對(duì)應(yīng)的地址不同

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

所有對(duì)象都是唯一的 愿棋,但是他們又具有相同的特性行為 比如 鳥類

描述了具有相同特性(數(shù)據(jù)元素)與行為(功能)的對(duì)象集合科展,所以一個(gè)類實(shí)際上是一個(gè)數(shù)據(jù)類型,例如浮點(diǎn)型數(shù)是具有相同特性和行為集合糠雨。二者的差異 程序猿通過定義一個(gè)類來適應(yīng)問題辛润,而不再被迫只能使用機(jī)器中的存儲(chǔ)單元的數(shù)據(jù)類型


Light類

Light lt = new Light ();

lt.on(); ?//向lt發(fā)送消息 ? 即調(diào)用方法

接口:接口確定了對(duì)某一特定對(duì)象所能發(fā)出的請(qǐng)求(即規(guī)定了特定對(duì)象的行為方法)

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

在解決業(yè)務(wù)問題而設(shè)計(jì)程序時(shí),最好的方法之一就是將對(duì)象視為 服務(wù)的提供者

優(yōu)點(diǎn):提高對(duì)象的內(nèi)聚性 ?

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

程序猿分為:類創(chuàng)建者(創(chuàng)建類的人) ? 類消費(fèi)者(使用類實(shí)例解決問題的人) ?

在任何交互關(guān)系中,具有關(guān)系所涉及的各方都遵守邊界是十分重要的

類創(chuàng)建者可以隱藏一些類中的屬性與方法 避免使用者直接訪問砂竖,讓類消費(fèi)者無法觸及他們不該觸碰的部分

好處:1. 類創(chuàng)建者可以隨意更改 隱藏部分的代碼 ?而消費(fèi)者無需察覺真椿,不受影響 便于維護(hù)

? ? ? ? ? ?2. 保護(hù)代碼中的脆弱部分的暴露 防止錯(cuò)誤使用出現(xiàn)bug

訪問指定詞:

public : 對(duì)任何元素 方法都可訪問

private: 只允許類自身內(nèi)部使用 ?繼承也無法使用

protected : 允許類自身內(nèi)部使用 同時(shí)也允許繼承使用

默認(rèn)(空): 訪問包權(quán)限 同一個(gè)包內(nèi)可以使用 ?跨包不可使用

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

事實(shí)上復(fù)用性并沒有達(dá)到我們想象中的那么理想,需要豐富的經(jīng)驗(yàn)以及敏銳的洞察力

簡單的復(fù)用某個(gè)類的方式(組合):直接使用該類的一個(gè)對(duì)象 ?將一個(gè)類的對(duì)象置于一個(gè)新類中這種方式被稱為組合乎澄,如果組合是動(dòng)態(tài)的 被稱為聚合 ? 組合被視為擁有關(guān)系 ?比如 汽車 和 引擎

在創(chuàng)建新類時(shí)首先因該考慮組合 而不是 集成

1.6 繼承 ?

難道在程序設(shè)計(jì)中只能不停創(chuàng)建新類型突硝,如果一個(gè)類型與另一個(gè)類型具有相同的特性與行為是否還需要新創(chuàng)建一個(gè)類似的類型呢?

繼承:一個(gè)類以一個(gè)現(xiàn)有類為基礎(chǔ)復(fù)制它產(chǎn)生一個(gè)副本置济,然后通過添加修改這個(gè)副本來創(chuàng)建新類 ?java中需要使用關(guān)鍵字extend來實(shí)現(xiàn)

繼承關(guān)系中:基類發(fā)生改變 子類同時(shí)會(huì)反應(yīng)這些改變

? ? ? ? ? ? ? ? ? ? ? ?子類不僅包含了基類中的所有成員(基類中private修飾的除外) 同時(shí)復(fù)制了基類的接口(private修飾的除外)

? ? ? ? ? ? ? ? ? ? ? ? ?子類如果只集成父類不做任何改變 那么繼承將是無意義的 所以使用繼承需要思考 ?是否需要一個(gè)獨(dú)特的子類

?子類與父類異同的方式: 1.在子類中添加父類中沒有的接口 (添加新方法) ? 這種需要反思 父類真的不需要添加這些接口嗎

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.覆蓋解恰, 修改子類中繼承父類的接口,改變方法的行為?

是一個(gè)與像一個(gè)

是一個(gè):當(dāng)一個(gè)子類覆蓋父類的所有方法 并沒有增加新的接口浙于,就意味著導(dǎo)出類與基類完全相同的類型护盈。 可以用一個(gè)導(dǎo)出類對(duì)象完全替代一個(gè)基類對(duì)象。這被視為純粹替代 ?又被成為替代原則

像一個(gè):子類(到處類)中添加了新的接口元素羞酗,也就是擴(kuò)展了接口腐宋。新類型依然可以替代基類,但并不完美檀轨,因?yàn)榛悓?duì)象并不能完全替代子類對(duì)象 基類型無法使用新添加的接口(需要考慮基類是否需要接口擴(kuò)展)

如何選擇使用哪種方式 需要具體場(chǎng)景中的思考與使用

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

多態(tài):編寫不依賴特定類型的代碼胸竞。在處理類型層次結(jié)構(gòu)時(shí),把一個(gè)對(duì)象不當(dāng)作它所屬的特定類型來對(duì)待参萄,而是將其當(dāng)作其基類的對(duì)象來對(duì)待卫枝。我們不關(guān)心對(duì)象是誰,只關(guān)心它的行為

好處:不受添加新類型的影響

疑問:使用多態(tài)構(gòu)建程序時(shí)讹挎,將導(dǎo)出類的對(duì)象泛化為基類對(duì)象校赤,更換新的導(dǎo)出類,編譯器是如何準(zhǔn)確執(zhí)行不同導(dǎo)出類的接口方法筒溃,他是怎么做到的痒谴,而不是執(zhí)行基類的方法(調(diào)用基類)?

這里涉及到一些新的概念:

其實(shí)面向?qū)ο蟪绦蛟O(shè)計(jì)最重要的秘訣:編譯器不是傳統(tǒng)意義上的函數(shù)調(diào)用。

前期綁定:非面向?qū)ο缶幊痰木幾g器的函數(shù)調(diào)用使用前期綁定铡羡,這意味著編譯器將產(chǎn)生對(duì)一個(gè)具體函數(shù)名稱的調(diào)用积蔚,運(yùn)行時(shí)將這個(gè)調(diào)用解析到要被執(zhí)行的代碼的絕對(duì)地址上面。

后期綁定:編譯器在編譯時(shí)并不知道具體調(diào)用那個(gè)函數(shù)烦周,調(diào)用代碼是在運(yùn)行時(shí)才確定的尽爆,實(shí)現(xiàn)方式是 java使用一小段特殊的代碼來替代絕對(duì)地址的調(diào)用。代碼使用 ?在對(duì)象中存儲(chǔ)的信息 來計(jì)算方法的具體地址读慎。根據(jù)這段代碼的內(nèi)容,每個(gè)對(duì)象都可以具有不同的行為表現(xiàn)漱贱。

向上轉(zhuǎn)型:將導(dǎo)出類看做是基類的過程

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

單根繼承結(jié)構(gòu)中:所有的對(duì)象都具有同一個(gè)共用接口,所有他們都具有共同的基類型 ?

單根繼承的好處:1.所有對(duì)象都具有某些基本功能夭委,所有對(duì)象都可以很容易的在堆上創(chuàng)建刻帚,而參數(shù)傳遞也得到了簡化

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.單根繼承結(jié)構(gòu)是垃圾回收器的實(shí)現(xiàn)變的容易

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.是有對(duì)象都屬于同樣的類型,使得編程避免了對(duì)象的無法確定類型的僵局

1.9 容器

容器:用來存儲(chǔ)對(duì)象坏平,他不受存儲(chǔ)對(duì)象多少的影響唆迁,能夠?qū)崿F(xiàn)自我擴(kuò)容芹扭,對(duì)編程帶來極大的靈活性,程序猿只需將想要存儲(chǔ)的數(shù)據(jù)放進(jìn)容器即可

Java中容器實(shí)現(xiàn)的具體數(shù)據(jù)結(jié)構(gòu)是不同的 使用起來的效率是有差異性的 比如 ?ArrayList 易于查找 ?LinkList 易于插入 效率是不同的


1.9.1泛型

容器中存儲(chǔ)的是obj類型就可實(shí)現(xiàn)存放任何類型的對(duì)象,但是同時(shí)也會(huì)一些問題,在容器中存放進(jìn)具體的某些類型對(duì)象鸠儿,由于存放是進(jìn)行了向上轉(zhuǎn)型,拿出時(shí)對(duì)象的引用已經(jīng)是obj類型了厕氨,很難明確引用對(duì)象對(duì)的具體類型进每,來使用對(duì)象執(zhí)行特定的行為。這時(shí)泛型就出現(xiàn)了

向下轉(zhuǎn)型:將對(duì)象按照繼承結(jié)構(gòu)命斧,有上層的泛型類型轉(zhuǎn)化為下層的具體類型

泛型的使用:一對(duì)尖括號(hào)田晚,中間包含類信息 通過這些特征可以識(shí)別對(duì)泛型類的使用

ArrayList <Shape> list = new ArrayList();

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

每個(gè)對(duì)象創(chuàng)建都需要資源国葬,存活的對(duì)象會(huì)持久的占用資源贤徒,尤其是內(nèi)存,這就是為啥要控制對(duì)象的創(chuàng)建與銷毀因?yàn)橘Y源是有限的

c++控制對(duì)象的生命周期胃惜,要求的是效率泞莉,所以他給程序猿足夠的權(quán)限哪雕,要求程序員控制對(duì)象的生命周期船殉。為了追求最大的執(zhí)行速度,對(duì)象的存儲(chǔ)空間和生命周期可以在編程時(shí)就確定斯嚎,通過將對(duì)象放置在堆棧中或靜態(tài)存儲(chǔ)區(qū)域內(nèi)來實(shí)現(xiàn)利虫。這種方式將存儲(chǔ)空間分配和釋放放置于優(yōu)先考慮的位置。 在編寫程序的時(shí)候 程序員要清楚對(duì)象的確切位置與數(shù)量

java中使用被稱為Heap(堆)的內(nèi)存池中動(dòng)態(tài)的創(chuàng)建對(duì)象堡僻。這種方式中糠惫,直到運(yùn)行時(shí)才知道需要多少對(duì)象。他的生命周期數(shù)量類型只有在程序運(yùn)行到某段代碼時(shí)才能確钉疫。如果要?jiǎng)?chuàng)建一個(gè)新的對(duì)象可以直接在堆中創(chuàng)建硼讽。因?yàn)槭沁\(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建所以,需要在大量時(shí)間在堆中分配存儲(chǔ)空間牲阁,這可能遠(yuǎn)遠(yuǎn)大于堆棧中創(chuàng)建新的空間

動(dòng)態(tài)方式有這么一個(gè)一般性的邏輯:對(duì)象趨于復(fù)雜固阁,所以對(duì)象的查找和釋放存儲(chǔ)空間的開銷不會(huì)對(duì)對(duì)象的創(chuàng)建造成沖擊。

java的垃圾回收器被設(shè)計(jì)用來處理內(nèi)存問題城菊,他可以發(fā)現(xiàn)不在需要使用的對(duì)象备燃,對(duì)對(duì)象資源進(jìn)行回收。

1.11異常處理

java中提供了良好的異常處理凌唬,異常是一個(gè)對(duì)象并齐,在程序出錯(cuò)的位置被拋出,某些錯(cuò)誤被要求必須處理

1.12 并發(fā)編程

計(jì)算機(jī)編程中的一個(gè)基本概念,在同一個(gè)時(shí)刻處理多個(gè)任務(wù)的思想况褪。

最初他的實(shí)現(xiàn)是依靠在程序進(jìn)行時(shí)撕贞,將程序停下來,處理其他問題在返回主線程處理問題窝剖。有許多方法可以實(shí)現(xiàn)這個(gè)目標(biāo)麻掸,但是最初,程序猿使用有關(guān)機(jī)器的底層知識(shí)來實(shí)現(xiàn)這樣的編程赐纱,但是帶來了很多問題脊奋,可移植性很差,不同的機(jī)器無法實(shí)現(xiàn)通用

有時(shí)程序需要中斷疙描,去執(zhí)行其他重要的任務(wù)诚隙,但是對(duì)于大量的其他問題,我們更多的是將問題切割成小塊任務(wù)進(jìn)行處理起胰,從而提高程序的響應(yīng)能力久又。

在程序中,彼此獨(dú)立運(yùn)行的部分稱之為線程

線程的出現(xiàn)是為了提高單核計(jì)算機(jī)的運(yùn)行速度效五。但如果操作系統(tǒng)支持多處理器地消,那么每個(gè)任務(wù)都可以指派不同的處理器,并且他們是在真正的并行執(zhí)行畏妖。所以程序猿不需要操心到底是單核還是多核處理器脉执。只要使用就好,多核處理器不使用其實(shí)速度也會(huì)很快

多線程的隱患:共享資源 比如打印機(jī)戒劫,一個(gè)線程在打印時(shí)半夷,另一個(gè)線程不應(yīng)該同時(shí)進(jìn)行打印操作...java中使用任務(wù)鎖來控制共享資源的使用,當(dāng)一個(gè)線程執(zhí)行打印時(shí)迅细,使用任務(wù)鎖將資源鎖定巫橄,當(dāng)完成任務(wù)時(shí),再打開鎖茵典,釋放共享資源

1.13 java 與 Internet

省略了湘换。。统阿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彩倚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砂吞,更是在濱河造成了極大的恐慌署恍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜻直,死亡現(xiàn)場(chǎng)離奇詭異盯质,居然都是意外死亡袁串,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門呼巷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囱修,“玉大人,你說我怎么就攤上這事王悍∑屏” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵压储,是天一觀的道長鲜漩。 經(jīng)常有香客問我,道長集惋,這世上最難降的妖魔是什么孕似? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮刮刑,結(jié)果婚禮上喉祭,老公的妹妹穿的比我還像新娘。我一直安慰自己雷绢,他們只是感情好泛烙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翘紊,像睡著了一般蔽氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霞溪,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天孵滞,我揣著相機(jī)與錄音中捆,去河邊找鬼鸯匹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泄伪,可吹牛的內(nèi)容都是我干的殴蓬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蟋滴,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼染厅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起津函,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤肖粮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尔苦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩馆,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡行施,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魂那。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾号。...
    茶點(diǎn)故事閱讀 38,654評(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,940評(píng)論 3 313
  • 文/蒙蒙 一琴庵、第九天 我趴在偏房一處隱蔽的房頂上張望误算。 院中可真熱鬧,春花似錦迷殿、人聲如沸儿礼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚊夫。三九已至,卻和暖如春懦尝,著一層夾襖步出監(jiān)牢的瞬間知纷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工陵霉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琅轧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓踊挠,卻偏偏與公主長得像乍桂,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子效床,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 抽象過程 概念????所有編程語言都提供抽象機(jī)制睹酌,人們所能解決問題的復(fù)雜性直接取決于抽象的類型和質(zhì)量。這里類型指的...
    意大利大炮閱讀 140評(píng)論 0 0
  • Java編程思想第四版讀書筆記——第一章 對(duì)象導(dǎo)論 1.抽象過程 萬物皆對(duì)象剩檀;程序是對(duì)象的集合憋沿,它們通過發(fā)送消息來...
    007小和尚閱讀 298評(píng)論 0 1
  • 這是一首老歌。 聽過很多版本沪猴,還是最喜歡Brian Hyland的原唱辐啄,尤其喜歡那一句“I don' t wann...
    journeyhope閱讀 163評(píng)論 0 1
  • 全一篇完結(jié) 兩個(gè)前后輩歌手的故事卻與唱歌沒多大關(guān)系 長故事 希望大家能喜歡甥绿。節(jié)日快樂。 1 初識(shí)是在早春则披。 陽光透...
    之梅卿閱讀 1,363評(píng)論 2 12