物件導向的本質是什嗎?

來源:互聯網
上載者:User


  什麼是物件導向的本質呢。

 

  萬物皆對象。No
  抽象。No
  複用。No

 

  那到底是什麼呢。

 

  萬物皆對象。問了幾位網友,這是回覆之一。看到了某個事物就來一個class。顯然沒有那麼簡單。至少也要抽象一下呀。

 

  抽象。比如一些文章裡說,可以根據貓貓、狗狗抽象出來一個Animal出來,然後定義Cat,繼承Animal,在定義Dog,也是繼承Animal。抽象就是本質了嗎。那麼為什麼要抽象,而不直接定義Cat、Dog呢。這麼“折騰”一下的目的是什麼呢。或者說有什麼好處。

 

  複用。Cat可以複用Animal裡的屬性、方法等,Dog也可以複用Animal裡的屬性方法。這樣看來複用好像就是本質了。

 

  哎,說道複用我就比較鬱悶。我是從面向過程學過來的,經過漫長艱苦的學習,現在還沒有完全轉到物件導向。好像跑題了。

 

  面向過程裡就解決了複用的問題,定義一個過程(過程、函數)就可以達到複用的目的。別人有的,你也有,那不算什麼優勢。別人沒有的你有,那就是優勢了。既然面向過程已經可以服用了,那麼在物件導向裡面也談複用,那還有什麼優勢呢。

 

  面向過程可以達到複用的目的,但是有一個致命的缺點:混亂。定義出來的函數沒有層次,沒有管理。假設一個項目裡有一萬個函數,那麼這些個函數就會雜亂無章的出現。要管理的話也只能按照頁面、表單等來劃分。總之呢,想要管理好面向過程裡的眾多函數是一件頭痛的事情。

 

  我覺得物件導向是有面向過程“進化”過來的,但是有人說物件導向是直接“蹦”出來的,不管他是怎麼出來的了,總之他是很好的解決了“管理複用”的問題。

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

 

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

 

 

  繼承:都封裝起來了,那麼就失去了靈活性。如何保證靈活性呢。繼承(還有函數重載等)。也就是多態了。相同的放在父類,不同的放在子類。這是我的理解,當然你可以說這種理解是錯誤的。Class就好比一個大的家族,父類是根基,子類各有各的特點。正所謂:龍生九子各有不同。

 

  子類可以複用父類裡的屬性、方法、事件,這就是一種複用的管理方法。

 

  組合(合成):父類、子類、抽象基類,這些都是一個家族裡的關係,那麼兩個家族有如何呢。組合。Has A,一個類裡包含另一個類,通過這種方式來實現複用。這又是複用的一種管理方法。

 

  介面:抽象基類是一個很好用的東東,比如DbCommand,用過的兄弟們都會體會到他的方便吧。但是他只能管同一個家族裡的,另一個家族的就不行了。如果哪個資料庫(比如PostgreSQL)沒有繼承DbCommand怎麼辦呢。介面就可以跨越不同的家族。當然介面也有一個致命的弱點,本身不能有任何的實現部分,他只能定義。

 

  物件導向的各種特點都是為了“管理複用”,所以我覺得物件導向的本質就是“管理複用”。至於對象只是一種“表象”。

 

  在多說幾句,我是不喜歡被所謂的“對象”所束縛的。以前問過,SQLHelp為什麼要寫成靜態函數的形式,答曰:資料訪問是一個對象嗎。怎麼執行個體化呢。

 

  我覺得資料庫就是一個對象,資料訪問也是一個對象。資料訪問就是資料庫的一個“代言人”。我的資料訪問函數庫就是以DbCommand為中心人物,用起來非常的方便。

 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.