發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
萬物皆對象?No 抽象?No 復(fù)用?No
那到底是什么呢?
萬物皆對象。問了幾位網(wǎng)友,這是答復(fù)之一。看到了某個事物就來一個class?顯然沒有那么簡單。至少也要抽象一下呀。
抽象。比如一些文章里說,可以根據(jù)貓貓、狗狗抽象出來一個Animal出來,然后定義Cat,繼承Animal,在定義Dog,也是繼承Animal。抽象就是本質(zhì)了嗎?那么為什么要抽象,而不直接定義Cat、Dog呢?這么“折騰”一下的目的是什么呢?或者說有什么好處?
復(fù)用。Cat可以復(fù)用Animal里的屬性、方法等,Dog也可以復(fù)用Animal里的屬性方法。這樣看來復(fù)用好像就是本質(zhì)了。
哎,說道復(fù)用我就比較郁悶。我是從面向過程學(xué)過來的,經(jīng)過漫長艱苦的學(xué)習(xí),現(xiàn)在還沒有完全轉(zhuǎn)到面向?qū)ο?。好像跑題了。
面向過程里就解決了復(fù)用的問題,定義一個過程(過程、函數(shù))就可以達到復(fù)用的目的。別人有的,你也有,那不算什么優(yōu)勢。別人沒有的你有,那就是優(yōu)勢了。既然面向過程已經(jīng)可以服用了,那么在面向?qū)ο罄锩嬉舱剰?fù)用,那還有什么優(yōu)勢呢?
面向過程可以達到復(fù)用的目的,但是有一個致命的缺點:混亂。定義出來的函數(shù)沒有層次,沒有管理。假設(shè)一個項目里有一萬個函數(shù),那么這些個函數(shù)就會雜亂無章的出現(xiàn)。要管理的話也只能按照頁面、窗體等來劃分。總之呢,想要管理好面向過程里的眾多函數(shù)是一件頭痛的事情。
我覺得面向?qū)ο笫怯忻嫦蜻^程“進化”過來的,但是有人說面向?qū)ο笫侵苯印氨摹背鰜淼模还芩窃趺闯鰜淼牧?,總之他是很好的解決了“管理復(fù)用”的問題。
封裝(Class):把相關(guān)的屬性、方法、事件放在一起,化零為整,統(tǒng)一管理。該隱藏的隱藏,該暴露的暴露。這是管理的第一步。
====================
繼承:都封裝起來了,那么就失去了靈活性。如何保證靈活性呢?繼承(還有函數(shù)重載等)。也就是多態(tài)了。相同的放在父類,不同的放在子類。這是我的理解,當(dāng)然你可以說這種理解是錯誤的。Class就好比一個大的家族,父類是根基,子類各有各的特點。正所謂:龍生九子各有不同。
子類可以復(fù)用父類里的屬性、方法、事件,這就是一種復(fù)用的管理方法。
組合(合成):父類、子類、抽象基類,這些都是一個家族里的關(guān)系,那么兩個家族有如何呢?組合。Has A,一個類里包含另一個類,通過這種方式來實現(xiàn)復(fù)用。這又是復(fù)用的一種管理方法。
接口:抽象基類是一個很好用的東東,比如DbCommand,用過的兄弟們都會體會到他的方便吧。但是他只能管同一個家族里的,另一個家族的就不行了。如果哪個數(shù)據(jù)庫(比如PostgreSQL)沒有繼承DbCommand怎么辦呢?接口就可以跨越不同的家族。當(dāng)然接口也有一個致命的弱點,本身不能有任何的實現(xiàn)部分,他只能定義。
面向?qū)ο蟮母鞣N特點都是為了“管理復(fù)用”,所以我覺得面向?qū)ο蟮谋举|(zhì)就是“管理復(fù)用”。至于對象只是一種“表象”。
在多說幾句,我是不喜歡被所謂的“對象”所束縛的。以前問過,SQLHelp為什么要寫成靜態(tài)函數(shù)的形式,答曰:數(shù)據(jù)訪問是一個對象嗎?怎么實例化呢?
我覺得數(shù)據(jù)庫就是一個對象,數(shù)據(jù)訪問也是一個對象。數(shù)據(jù)訪問就是數(shù)據(jù)庫的一個“代言人”。我的數(shù)據(jù)訪問函數(shù)庫就是以DbCommand為中心人物,用起來非常的方便。
來自: 昵稱10504424 > 《C#》
0條評論
發(fā)表
請遵守用戶 評論公約
什么是面向?qū)ο笏枷?/a>
多態(tài)是說父類或接口的引用指向了子類對象,這就提高了程序的擴展性,也就是說只要實現(xiàn)或繼承了同一個接口或類,那么就可以使用父類中相應(yīng)的方法,提高程序擴展性,但是多態(tài)有一點不好之處在于:父類引...
面試官:什么是面向?qū)ο螅?/a>
什么是構(gòu)造方法重載?1)構(gòu)造方法。在程序員沒有給類提供構(gòu)造方法的情況下,Java 編譯器會為這個類創(chuàng)建一個默認(rèn)的無參構(gòu)造方法。2)構(gòu)造...
面向?qū)ο蟮能浖O(shè)計本質(zhì)[ERP信息監(jiān)理 ||解決方案|系統(tǒng)分析|需求分析|業(yè)務(wù)模型|軟件工...
關(guān)于面向?qū)ο螅好嫦驅(qū)ο缶褪且詫ο鬄橹行?。既然以對象為中心,面向?qū)ο笏紤]的內(nèi)容自然是對象、對象間的協(xié)作、對象的分類、類之間的關(guān)系等等,由此引申了出幾個重要的概念。how: 多態(tài)在C語言中通常用...
Kermit’s Gossip
—->繼承:這個押運員得是個人吧,應(yīng)該有人的一切屬性(如眼耳鼻舌,受想行識),好吧,我不用重新實現(xiàn)這些,游戲中一般都有People的角色,從那里繼承就好了,于是,Escort就成了People的子類,他可...
終于明白了虛函數(shù)、純虛函數(shù)和接口的實用方法和意義
終于明白了虛函數(shù)、純虛函數(shù)和接口的實用方法和意義 從理論上來說,這三個概念很容易背的滾瓜爛熟,但是從大學(xué)畢業(yè)到現(xiàn)在,我都沒真正搞明白這三個東西的出現(xiàn),究竟是為了做到什么事情。在寫面向過程的...
【信管1.9】軟件工程(三)軟件設(shè)計與過程管理
【信管1.9】軟件工程(三)軟件設(shè)計與過程管理軟件工程(三)軟件設(shè)計與過程管理。概要設(shè)計又稱總體結(jié)構(gòu)設(shè)計,主要是將系統(tǒng)的功能需求分...
面向?qū)ο笤O(shè)計7大原則
7大設(shè)計原則包括開閉原則、里氏替換原則、依賴倒轉(zhuǎn)原則、單一職責(zé)原則、接口隔離原則、組合/聚合復(fù)用原則、迪米特法則。面向?qū)ο罂蓮?fù)用設(shè)計原則中最基礎(chǔ)的原則便是開閉原則(Open-Closed Principle,OC...
對面向?qū)ο笤O(shè)計原則的總結(jié) - - CSDN技術(shù)中心
其他設(shè)計原則(里氏代換原則、依賴倒轉(zhuǎn)原則、合成/聚合復(fù)用原則、迪米特法則、接口隔離原則)是實現(xiàn)"開-閉"原則的手段和工具。3.3耦合(或者依賴)關(guān)系的種類:零耦合(Nil Coupling)關(guān)系:...
框架
框架??蚣埽‵ramework)是整個或部分系統(tǒng)的可重用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。這個定義是從框架內(nèi)涵的角度來定義框架的,...
微信掃碼,在手機上查看選中內(nèi)容