Java基礎(chǔ)知識(shí)復(fù)習(xí)筆記(1)--面向?qū)ο缶幊蹋∣OP)

1. 從面向過程到面向?qū)ο?/h4>

早期計(jì)算機(jī)編程是基于面向過程的(如C語言),通過設(shè)計(jì)一個(gè)算法就可以解決當(dāng)時(shí)的問題烹卒。隨著計(jì)算機(jī)技術(shù)的不斷提高闷盔,計(jì)算機(jī)被用于解決越來越復(fù)雜的問題。面對(duì)復(fù)雜的業(yè)務(wù)關(guān)系旅急,不斷變化的業(yè)務(wù)流程逢勾,面向過程的設(shè)計(jì)與現(xiàn)實(shí)已經(jīng)難以應(yīng)付這些問題。
面向?qū)ο蟮乃枷耄?strong>就是一切事物皆對(duì)象坠非,通過面向?qū)ο蟮姆绞矫舫粒瑢F(xiàn)實(shí)世界的事物抽象成對(duì)象果正,將現(xiàn)實(shí)世界中的關(guān)系抽象成類炎码、繼承盟迟,實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的抽象與建模。

面向?qū)ο笙啾让嫦蜻^程的優(yōu)勢(shì):

  • 結(jié)構(gòu)清晰:面向?qū)ο蟮木幊讨辛氏校瑢?duì)象被賦予屬性和方法攒菠,更接近現(xiàn)實(shí)世界事物,更容易理解和維護(hù)歉闰。
  • 封裝性: 面向?qū)ο罅己玫姆庋b性優(yōu)勢(shì)表現(xiàn)為其對(duì)內(nèi)部的修改辖众,對(duì)外界產(chǎn)生影響較小。
  • 易拓展性: 面向?qū)ο缶幊毯途矗a更好的被重用凹炸,更容易進(jìn)行拓展,可以更好的應(yīng)對(duì)業(yè)務(wù)的變化昼弟。

面向?qū)ο笙啾让嫦蜻^程的劣勢(shì):

  • 增加的工作量: 如果一味地強(qiáng)調(diào)封裝啤它,當(dāng)修改對(duì)象內(nèi)部時(shí),對(duì)象的任何屬性都不允許外部直接存取舱痘,則要增加許多沒有其他意義变骡、只負(fù)責(zé)讀或?qū)懙男袨椤_@會(huì)為編程工作增加負(fù)擔(dān)芭逝,增加運(yùn)行開銷塌碌,并且使程序顯得臃腫。
  • 性能低: 由于面向?qū)ο蟾叩倪壿嫵橄笱ⅲ沟妹嫦驅(qū)ο笤趯?shí)現(xiàn)的時(shí)候台妆,不得不做出性能上面的犧牲,計(jì)算時(shí)間和空間存儲(chǔ)大小的都開銷很大瓢捉。

面向?qū)ο蟮膬?yōu)點(diǎn):

  • 代碼開發(fā)模塊化频丘,更易維護(hù)和修改。
  • 代碼復(fù)用性泡态。
  • 增強(qiáng)代碼的可靠性和靈活性搂漠。
  • 增加代碼的可理解性。

2. 面向?qū)ο蟮乃膫€(gè)特性

  • 抽象
    抽象描述了一個(gè)對(duì)象的基本特征,可以將這個(gè)對(duì)象與所有其他類型的對(duì)象區(qū)分開來某弦,因此提供了清晰定義的概念邊界桐汤。抽象關(guān)注一個(gè)對(duì)象的外部視圖,用來分離對(duì)象的基本行為和實(shí)現(xiàn)靶壮。我們可以理解為抽象關(guān)注接口盐杂,即可觀察到的行為;而封裝則關(guān)注這些行為的實(shí)現(xiàn)瞒大。

抽象的兩個(gè)原則:

  • 最少承諾原則:對(duì)象的接口只提供它的基本行為而晒。
  • 最少驚奇原則:抽象捕捉了某個(gè)對(duì)象的全部行為,不多也不少,并且不提供抽象之外的驚奇效果和副作用抗果。

評(píng)判抽象的品質(zhì):

  • 耦合:模塊之間的關(guān)聯(lián)強(qiáng)度應(yīng)該是比較弱的筋帖,即低耦合。

  • 內(nèi)聚:模塊內(nèi)的各個(gè)元素的聯(lián)系時(shí)緊密的冤馏,即高內(nèi)聚日麸。

  • 充分性:類或模塊應(yīng)該記錄某個(gè)抽象足夠多的特征,從而允許有意義的逮光、有效的交互代箭。

  • 完整性:類和模塊的接口記錄了它的全部特征。

  • 基礎(chǔ)性:只有訪問該抽象的底層表現(xiàn)形式才能夠有效的實(shí)現(xiàn)那些操作涕刚。

  • 封裝
    封裝給對(duì)象提供了隱藏內(nèi)部屬性和行為的能力嗡综,對(duì)象提供一些能被其他對(duì)象訪問的方法來改變它內(nèi)部的數(shù)據(jù)。在Java當(dāng)中杜漠,有3種修飾符:public蛤高,private和protected。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問權(quán)限碑幅。正是由于封裝機(jī)制戴陡,程序在使用某一對(duì)象時(shí)不需要關(guān)心該對(duì)象的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)及實(shí)現(xiàn)操作的方法。使用封裝能隱藏對(duì)象實(shí)現(xiàn)細(xì)節(jié)沟涨,使代碼更易維護(hù)恤批,同時(shí)因?yàn)椴荒苤苯诱{(diào)用、修改對(duì)象內(nèi)部的私有信息裹赴,在一定程度上保證了系統(tǒng)安全性喜庞。

封裝優(yōu)點(diǎn):

  • 通過隱藏對(duì)象的屬性來保護(hù)對(duì)象內(nèi)部的狀態(tài)。

  • 提高了代碼的可用性和可維護(hù)性棋返,因?yàn)閷?duì)象的行為可以被單獨(dú)的改變或者是擴(kuò)展延都。

  • 禁止對(duì)象之間的不良交互提高模塊化。

  • 繼承
    就像現(xiàn)實(shí)中睛竣,孩子會(huì)繼承父母的一些特征晰房,面向?qū)ο笫褂美^承機(jī)制實(shí)現(xiàn)代碼的復(fù)用,多個(gè)類所公用的代碼部分可以只在一個(gè)類中提供射沟,而其他類只需要繼承即可殊者。繼承給對(duì)象提供了從基類獲取字段和方法的能力,繼承提供了代碼的重用性验夯,也可以在不修改類的情況下給現(xiàn)存的類添加新特性猖吴。

  • 多態(tài)
    多態(tài)指相同的操作或函數(shù)、過程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果挥转。不同的對(duì)象海蔽,收到同一消息可以產(chǎn)生不同的結(jié)果共屈,這種現(xiàn)象稱為多態(tài)性。

實(shí)現(xiàn)多態(tài)党窜,有二種方式趁俊,覆蓋,重載刑然。
覆蓋: 指子類重新定義父類的虛函數(shù)的做法。

  • 重載: 指允許存在多個(gè)同名函數(shù)暇务,而這些函數(shù)的參數(shù)表不同(或許參數(shù)個(gè)數(shù)不同泼掠,或許參數(shù)類型不同,或許兩者都不同)垦细。

抽象和封裝的不同點(diǎn)
抽象和封裝是互補(bǔ)的概念:一方面择镇,抽象關(guān)注對(duì)象的行為。另一方面括改,封裝關(guān)注對(duì)象行為的細(xì)節(jié)腻豌。一般是通過隱藏對(duì)象內(nèi)部狀態(tài)信息做到封裝,因此嘱能,封裝可以看成是用來提供抽象的一種策略吝梅。

3. 面向?qū)ο笪宕笤O(shè)計(jì)原則

  • 單一職責(zé)原則(SRP)
    一個(gè)類應(yīng)該僅有一個(gè)引起它變化的原因,這意味著一個(gè)類應(yīng)該只做一件事情惹骂。

  • 開放封閉原則(OCP)
    對(duì)象或?qū)嶓w應(yīng)該對(duì)擴(kuò)展開放苏携,對(duì)修改封閉。

  • 里氏替換原則(LSP)
    子類可以替換父類并且出現(xiàn)在父類能夠出現(xiàn)的任何地方对粪。

  • 依賴倒置原則(DIP)
    實(shí)體必須依靠抽象而不是具體實(shí)現(xiàn)右冻。它表示高層次的模塊不應(yīng)該依賴于低層次的模塊,它們都應(yīng)該依賴于抽象著拭。

  • 接口隔離原則(ISP)
    不應(yīng)強(qiáng)迫客戶端實(shí)現(xiàn)一個(gè)它用不上的接口纱扭,所以,使用多個(gè)專門的接口比使用單個(gè)接口要好的多儡遮。

參考引用:

1. http://blog.csdn.net/luoxinwu123/article/details/8446094
2. http://www.cnblogs.com/ysyn/p/3380856.html
3. http://www.importnew.com/10980.html
4. http://blog.jobbole.com/86267/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乳蛾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鄙币,更是在濱河造成了極大的恐慌屡久,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爱榔,死亡現(xiàn)場(chǎng)離奇詭異被环,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)详幽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門筛欢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浸锨,“玉大人,你說我怎么就攤上這事版姑≈眩” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵剥险,是天一觀的道長(zhǎng)聪蘸。 經(jīng)常有香客問我,道長(zhǎng)表制,這世上最難降的妖魔是什么健爬? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮么介,結(jié)果婚禮上娜遵,老公的妹妹穿的比我還像新娘。我一直安慰自己壤短,他們只是感情好设拟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著久脯,像睡著了一般纳胧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帘撰,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天躲雅,我揣著相機(jī)與錄音,去河邊找鬼骡和。 笑死相赁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慰于。 我是一名探鬼主播钮科,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼婆赠!你這毒婦竟也來了绵脯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤休里,失蹤者是張志新(化名)和其女友劉穎蛆挫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙黍,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悴侵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拭嫁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可免。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抓于,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浇借,到底是詐尸還是另有隱情捉撮,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布妇垢,位于F島的核電站巾遭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闯估。R本人自食惡果不足惜灼舍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望睬愤。 院中可真熱鬧,春花似錦纹安、人聲如沸尤辱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽光督。三九已至,卻和暖如春塔粒,著一層夾襖步出監(jiān)牢的瞬間结借,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工卒茬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留船老,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓圃酵,卻偏偏與公主長(zhǎng)得像柳畔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郭赐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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