『編程基礎(chǔ)』OOP-面向?qū)ο缶幊?/h1>

概述

OOP(Object-oriented Programming苏遥,面向?qū)ο蟮某绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)赡模。OOP的一條基本原則是計(jì)算機(jī)程序由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。
OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性教硫、靈活性和擴(kuò)展性辆布。
OOP=對(duì)象+類+繼承+多態(tài)+消息,其中核心概念是類和對(duì)象景用。
面向?qū)ο蟪绦蛟O(shè)計(jì)方法是盡可能模擬人類的思維方式,使得軟件的開發(fā)方法與過程盡可能接近人類認(rèn)識(shí)世界伞插、解決現(xiàn)實(shí)問題的方法和過程,也即使得描述問題的問題空間與問題的解決方案空間在結(jié)構(gòu)上盡可能一致媚污,把客觀世界中的實(shí)體抽象為問題域中的對(duì)象。
面向?qū)ο蟪绦蛟O(shè)計(jì)以對(duì)象為核心氢伟,該方法認(rèn)為程序由一系列對(duì)象組成幽歼。類是對(duì)現(xiàn)實(shí)世界的抽象,包括表示靜態(tài)屬性的數(shù)據(jù)和對(duì)數(shù)據(jù)的操作诚些,對(duì)象是類的實(shí)例化皇型。對(duì)象間通過消息傳遞相互通信,來模擬現(xiàn)實(shí)世界中不同實(shí)體間的聯(lián)系弃鸦。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象是組成程序的基本模塊家破。

三個(gè)特性

封裝

封裝是指將現(xiàn)實(shí)世界中存在的某個(gè)客體的屬性與行為綁定在一起购岗,并放置在一個(gè)邏輯單元內(nèi)。該邏輯單元負(fù)責(zé)將所描述的屬性隱藏起來烹困,外界對(duì)客體內(nèi)部屬性的所有訪問只能通過提供的用戶接口實(shí)現(xiàn)。
這樣做既可以實(shí)現(xiàn)對(duì)客體屬性的保護(hù)作用乾吻,又可以提高軟件系統(tǒng)的可維護(hù)性。
只要用戶接口不改變溶弟,任何封裝體內(nèi)部的改變都不會(huì)對(duì)軟件系統(tǒng)的其他部分造成影響瞭郑。
結(jié)構(gòu)化設(shè)計(jì)方法沒有做到客體的整體封裝,只是封裝了各個(gè)功能模塊屈张,而每個(gè)功能模塊可以隨意地對(duì)沒有保護(hù)能力客體屬性實(shí)施操作袱巨,并且由于描述屬性的數(shù)據(jù)與行為被分割開來愉老,所以一旦某個(gè)客體屬性的表達(dá)方式發(fā)生了變化剖效,或某個(gè)行為效果發(fā)生了改變,就有可能對(duì)整個(gè)系統(tǒng)產(chǎn)生影響璧尸。
在面向?qū)ο蠹夹g(shù)的相關(guān)原理以及程序語言中,封裝的最基本單位是對(duì)象垫竞,而使得軟件結(jié)構(gòu)的相關(guān)部件的實(shí)現(xiàn)“高內(nèi)聚蛀序、低耦合”的“最佳狀態(tài)”便是面向?qū)ο蠹夹g(shù)的封裝性所需要實(shí)現(xiàn)的最基本的目標(biāo)。
對(duì)于用戶來說遣鼓,對(duì)象是如何對(duì)各種行為進(jìn)行操作重贺、運(yùn)行、實(shí)現(xiàn)等細(xì)節(jié)是不需要刨根問底了解清楚的檬姥,用戶只需要通過封裝外的通道對(duì)計(jì)算機(jī)進(jìn)行相關(guān)方面的操作即可。大大地簡化了操作的步驟抒巢,使用戶使用起計(jì)算機(jī)來更加高效秉犹、更加得心應(yīng)手。

繼承

繼承性是子類自動(dòng)共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制崇堵,這是類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候狰贯,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容傍妒,并加入若干新的內(nèi)容摸柄。
如果按照繼承源進(jìn)行劃分,則可以分為單繼承(一個(gè)對(duì)象僅僅從另外一個(gè)對(duì)象中繼承其相應(yīng)的特點(diǎn))與多繼承(一個(gè)對(duì)象可以同時(shí)從另外兩個(gè)或者兩個(gè)以上的對(duì)象中繼承所需要的特點(diǎn)與能力驱负,并且不會(huì)發(fā)生沖突等現(xiàn)象);如果從繼承中包含的內(nèi)容進(jìn)行劃分踏揣,則繼承可以分為四類匾乓,分別為取代繼承(一個(gè)對(duì)象在繼承另一個(gè)對(duì)象的能力與特點(diǎn)之后將父對(duì)象進(jìn)行取代)、包含繼承(一個(gè)對(duì)象在將另一個(gè)對(duì)象的能力與特點(diǎn)進(jìn)行完全的繼承之后娱局,又繼承了其他對(duì)象所包含的相應(yīng)內(nèi)容,結(jié)果導(dǎo)致這個(gè)對(duì)象所具有的能力與特點(diǎn)大于等于父對(duì)象衰齐,實(shí)現(xiàn)了對(duì)于父對(duì)象的包含)继阻、受限繼承、特化繼承抹缕。

多態(tài)

多態(tài)性是指相同的操作或函數(shù)墨辛、過程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象睹簇,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性磨淌。
多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息凿渊。
從微觀的角度來講缚柳,多態(tài)性是指在一組對(duì)象的一個(gè)類中敛纲,面向?qū)ο蠹夹g(shù)可以使用相同的調(diào)用方式來對(duì)相同的函數(shù)名進(jìn)行調(diào)用淤翔,即便這若干個(gè)具有相同函數(shù)名的函數(shù)所表示的函數(shù)是不同的佩谷。

優(yōu)點(diǎn)

易維護(hù)、易復(fù)用谐檀、易擴(kuò)展,由于面向?qū)ο笥蟹庋b麦撵、繼承溃肪、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng)惫撰,使系統(tǒng) 更加靈活、更加易于維護(hù)扼雏。
比較面向?qū)ο蟪绦蛟O(shè)計(jì)和面向過程程序設(shè)計(jì)夯膀,面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)點(diǎn):

  • 數(shù)據(jù)抽象的概念可以在保持外部接口不變的情況下改變內(nèi)部實(shí)現(xiàn),從而減少甚至避免對(duì)外界的干擾诱建;
  • 通過繼承大幅減少冗余的代碼,并可以方便地?cái)U(kuò)展現(xiàn)有代碼励翼,提高編碼效率辜荠,也減低了出錯(cuò)概率,降低軟件維護(hù)的難度造烁;
  • 結(jié)合面向?qū)ο蠓治龇窆⒚嫦驅(qū)ο笤O(shè)計(jì)苗桂,允許將問題域中的對(duì)象直接映射到程序中告组,減少軟件開發(fā)過程中中間環(huán)節(jié)的轉(zhuǎn)換過程;
  • 通過對(duì)對(duì)象的辨別木缝、劃分可以將軟件系統(tǒng)分割為若干相對(duì)為獨(dú)立的部分,在一定程度上更便于控制軟件復(fù)雜度放案;
  • 以對(duì)象為中心的設(shè)計(jì)可以幫助開發(fā)人員從靜態(tài)(屬性)和動(dòng)態(tài)(方法)兩個(gè)方面把握問題矫俺,從而更好地實(shí)現(xiàn)系統(tǒng);
  • 通過對(duì)象的聚合考婴、聯(lián)合可以在保證封裝與抽象的原則下實(shí)現(xiàn)對(duì)象在內(nèi)在結(jié)構(gòu)以及外在功能上的擴(kuò)充催烘,從而實(shí)現(xiàn)對(duì)象由低到高的升級(jí)。

缺點(diǎn)

  • 運(yùn)行效率較低
    類的大量加載會(huì)犧牲系統(tǒng)性能伊群,降低運(yùn)行速度。雖然CPU速度在提高崇棠,內(nèi)存容量在增加丸卷,但這一問題仍會(huì)隨著系統(tǒng)規(guī)模變大而逐漸顯示出來,變得越發(fā)嚴(yán)重谜嫉。
  • 類庫龐大
    由于類庫都過于龐大,程序員對(duì)它們的掌握需要一段時(shí)間哆档,從普及住闯、推廣的角度來看澳淑,類庫應(yīng)在保證其功能完備的基礎(chǔ)上進(jìn)行相應(yīng)的縮減插佛。
  • 類庫可靠性
    越龐大的系統(tǒng)必會(huì)存在我們無法預(yù)知的問題隱患,程序員無法完全保證類庫中的每個(gè)類在各種環(huán)境中百分之百的正確氢拥,當(dāng)使用的類發(fā)生了問題,就會(huì)影響后續(xù)工作兄一,程序員也有可能推翻原來的全部工作识腿。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末造壮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耳璧,更是在濱河造成了極大的恐慌,老刑警劉巖蹬昌,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂贩,死亡現(xiàn)場離奇詭異,居然都是意外死亡明刷,警方通過查閱死者的電腦和手機(jī)满粗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挤聘,“玉大人捅彻,你說我怎么就攤上這事」导ⅲ” “怎么了湾戳?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵砾脑,是天一觀的道長。 經(jīng)常有香客問我韧衣,道長购桑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任硕噩,我火速辦了婚禮缭贡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阳惹。我一直安慰自己,他們只是感情好快鱼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布纲岭。 她就那樣靜靜地躺著,像睡著了一般柒莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兢孝,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天跨蟹,我揣著相機(jī)與錄音,去河邊找鬼窗轩。 笑死座咆,一個(gè)胖子當(dāng)著我的面吹牛仓洼,可吹牛的內(nèi)容都是我干的堤舒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼箕戳,長吁一口氣:“原來是場噩夢啊……” “哼国撵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起介牙,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耻瑟,沒想到半個(gè)月后赏酥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡框都,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年魏保,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓罗。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡季二,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胯舷,到底是詐尸還是另有隱情,我是刑警寧澤桑嘶,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布逃顶,位于F島的核電站充甚,受9級(jí)特大地震影響霸褒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傲霸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望穆役。 院中可真熱鬧梳凛,春花似錦、人聲如沸韧拒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厢蒜,卻和暖如春烹植,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背草雕。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘱巾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓浓冒,卻偏偏與公主長得像尖坤,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子场梆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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