關於封裝、繼承和多態是面向對象編程的三大特徵之批判

先說封裝

封裝是一種通行於世的理念,甚至不限於編程領域。我用來寫這篇文章的電腦裏面,就處處是封裝。我所在的公司,每一個職能部門其實也是一種封裝。。。編程

而後,典型的面向過程編程語言C,難道就不能封裝了嗎?頭文件這種設計就是封裝理念的一種體現。設計模式

而後是繼承

繼承顯然是一種語言特性,只須要編程語言和編譯器支持就行。不就是代碼複用的一種手段嗎?面向對象何德何能,就敢篡爲己有?編程語言

最後是多態

多態卻是隻有面向對象有,但從嚴格意義上來講,並非核心特徵,而是對象自己特徵衍生出來的一種設計模式而已。函數

面向對象編程真正的特徵是什麼?

我認爲是:數據和邏輯的統一。在面向對象編程中,一個類型裏面既包含了對象屬性(數據),又包含了方法(邏輯)。強調的是經過公開的方法去操做私有的數據。而不是在對象外部直接操做對象的數據。並且,對於一個對象而言,屬性(數據)纔是主體,邏輯(方法)則是對象的能力的體現。設計

而面向過程編程則相反,雖然一樣有方法或者叫函數(邏輯),但邏輯纔是主體。雖然也有變量能夠存儲數據,但變量和屬性徹底不是一回事。變量只不過是數據的抓手,而屬性則由於每一個對象都是一個特定的實例,因此屬性能夠徹底表明數據。在面向過程的編程中,邏輯就如同生產線,而數據只是生產線加工生產的產品而已。對象

相關文章
相關標籤/搜索