电竞比分网-中国电竞赛事及体育赛事平台

分享

面向?qū)ο蟮谋举|(zhì)是什么?

 昵稱10504424 2013-02-20
什么是面向?qū)ο蟮谋举|(zhì)呢?

 

  萬(wàn)物皆對(duì)象?No
  抽象?No
  復(fù)用?No

 

  那到底是什么呢?

 

  萬(wàn)物皆對(duì)象。問(wèn)了幾位網(wǎng)友,這是答復(fù)之一??吹搅四硞€(gè)事物就來(lái)一個(gè)class?顯然沒(méi)有那么簡(jiǎn)單。至少也要抽象一下呀。

 

  抽象。比如一些文章里說(shuō),可以根據(jù)貓貓、狗狗抽象出來(lái)一個(gè)Animal出來(lái),然后定義Cat,繼承Animal,在定義Dog,也是繼承Animal。抽象就是本質(zhì)了嗎?那么為什么要抽象,而不直接定義Cat、Dog呢?這么“折騰”一下的目的是什么呢?或者說(shuō)有什么好處?

 

  復(fù)用。Cat可以復(fù)用Animal里的屬性、方法等,Dog也可以復(fù)用Animal里的屬性方法。這樣看來(lái)復(fù)用好像就是本質(zhì)了。

 

  哎,說(shuō)道復(fù)用我就比較郁悶。我是從面向過(guò)程學(xué)過(guò)來(lái)的,經(jīng)過(guò)漫長(zhǎng)艱苦的學(xué)習(xí),現(xiàn)在還沒(méi)有完全轉(zhuǎn)到面向?qū)ο?。好像跑題了。

 

  面向過(guò)程里就解決了復(fù)用的問(wèn)題,定義一個(gè)過(guò)程(過(guò)程、函數(shù))就可以達(dá)到復(fù)用的目的。別人有的,你也有,那不算什么優(yōu)勢(shì)。別人沒(méi)有的你有,那就是優(yōu)勢(shì)了。既然面向過(guò)程已經(jīng)可以服用了,那么在面向?qū)ο罄锩嬉舱剰?fù)用,那還有什么優(yōu)勢(shì)呢?

 

  面向過(guò)程可以達(dá)到復(fù)用的目的,但是有一個(gè)致命的缺點(diǎn):混亂。定義出來(lái)的函數(shù)沒(méi)有層次,沒(méi)有管理。假設(shè)一個(gè)項(xiàng)目里有一萬(wàn)個(gè)函數(shù),那么這些個(gè)函數(shù)就會(huì)雜亂無(wú)章的出現(xiàn)。要管理的話也只能按照頁(yè)面、窗體等來(lái)劃分。總之呢,想要管理好面向過(guò)程里的眾多函數(shù)是一件頭痛的事情。

 

  我覺(jué)得面向?qū)ο笫怯忻嫦蜻^(guò)程“進(jìn)化”過(guò)來(lái)的,但是有人說(shuō)面向?qū)ο笫侵苯印氨摹背鰜?lái)的,不管他是怎么出來(lái)的了,總之他是很好的解決了“管理復(fù)用”的問(wèn)題。

封裝(Class):把相關(guān)的屬性、方法、事件放在一起,化零為整,統(tǒng)一管理。該隱藏的隱藏,該暴露的暴露。這是管理的第一步。

 

====================

 

 

  繼承:都封裝起來(lái)了,那么就失去了靈活性。如何保證靈活性呢?繼承(還有函數(shù)重載等)。也就是多態(tài)了。相同的放在父類,不同的放在子類。這是我的理解,當(dāng)然你可以說(shuō)這種理解是錯(cuò)誤的。Class就好比一個(gè)大的家族,父類是根基,子類各有各的特點(diǎn)。正所謂:龍生九子各有不同。

 

  子類可以復(fù)用父類里的屬性、方法、事件,這就是一種復(fù)用的管理方法。

 

  組合(合成):父類、子類、抽象基類,這些都是一個(gè)家族里的關(guān)系,那么兩個(gè)家族有如何呢?組合。Has A,一個(gè)類里包含另一個(gè)類,通過(guò)這種方式來(lái)實(shí)現(xiàn)復(fù)用。這又是復(fù)用的一種管理方法。

 

  接口:抽象基類是一個(gè)很好用的東東,比如DbCommand,用過(guò)的兄弟們都會(huì)體會(huì)到他的方便吧。但是他只能管同一個(gè)家族里的,另一個(gè)家族的就不行了。如果哪個(gè)數(shù)據(jù)庫(kù)(比如PostgreSQL)沒(méi)有繼承DbCommand怎么辦呢?接口就可以跨越不同的家族。當(dāng)然接口也有一個(gè)致命的弱點(diǎn),本身不能有任何的實(shí)現(xiàn)部分,他只能定義。

 

  面向?qū)ο蟮母鞣N特點(diǎn)都是為了“管理復(fù)用”,所以我覺(jué)得面向?qū)ο蟮谋举|(zhì)就是“管理復(fù)用”。至于對(duì)象只是一種“表象”。

 

  在多說(shuō)幾句,我是不喜歡被所謂的“對(duì)象”所束縛的。以前問(wèn)過(guò),SQLHelp為什么要寫(xiě)成靜態(tài)函數(shù)的形式,答曰:數(shù)據(jù)訪問(wèn)是一個(gè)對(duì)象嗎?怎么實(shí)例化呢?

 

  我覺(jué)得數(shù)據(jù)庫(kù)就是一個(gè)對(duì)象,數(shù)據(jù)訪問(wèn)也是一個(gè)對(duì)象。數(shù)據(jù)訪問(wèn)就是數(shù)據(jù)庫(kù)的一個(gè)“代言人”。我的數(shù)據(jù)訪問(wèn)函數(shù)庫(kù)就是以DbCommand為中心人物,用起來(lái)非常的方便。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多