從C到JAVA,從面向過程到面向對象


概述

C語言是很多大學生接觸到的第一門編程語言,也可以說是一個岔路口——學了C語言,可以去搞硬件,也可以去搞軟件(當然兩者都需要繼續學習,不是說C語言是萬能的)。

如果選擇了向軟件方向發展,那么學一門面向對象的編程語言就是很有必要的了。又如果選擇了高雅美麗大方得體帥氣可愛健康的JAVA,如何從C過渡到JAVA,從面向過程過渡到面向對象呢?(老師,我扣題了!(°∀°)ノ)

在我看來,學好C,再學其它高級語言就可以少走很多彎路了,因為編程語言在某種程度上都是相通的。所以在這里我只說一些我覺得JAVA和C不同的地方:

什么是面向過程

面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了(百度百科)。

C語言是典型的面向過程的編程語言。在C語言中,你就是上帝(主函數就是上帝意志的體現......),你把想做的事“封裝”成一個一個函數模塊,然后在主函數中通過調用不同的函數完成不同的功能,最后達到你想到的效果(得到你想要的輸出)。

如:定義一個 Student 結構體,然后定義一個study函數。在主函數中調用study函數,打印“XXX is studying ! ”語句。

這會給人一種感覺(至少是給我):study這個行為是上帝(主函數)發出的,而student是這個行為的原材料(Σ(゚д゚;))。在C語言中把可復用的代碼塊寫成一個個函數,這就有點封裝的味道了(事實上就是?)。有人說,面向對象就是結構體里面包含了函數,好像對也好像不對:面向對象編程確實把數據(屬性)和函數(方法)放到了一塊,但是它還有許許多多面向過程編程沒有的特性。

什么是面向對象

面向對象就是是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為(百度百科)。

JAVA是典型的面向對象編程語言之一。在JAVA(或者說面向對象編程語言)中,你還是上帝,但是你是一個“簡政放權”了的上帝。你創建了一個個對象,然后這些對象干這干那的。

如:創建一個Student對象,然后這個Student對象在主函數中調用自己study函數,打印“XXX is studying ! ”語句。

這會給人另外一種感覺(至少是給我):主函數還是上帝,但是study行為不是上帝發出的了,Student也不用被當做原材料了,study這個行為是Student主動發出的。或者有人說,胡說!明明是你(上帝)叫學生去學習的,不然他早就去play了!

......確實,在這里看起來好像是上帝指使學生去學習一樣,還是給人一種面向過程的感覺。但是這只是一種展示而已,比如說在GUI編程,在WEB編程中等,用戶的行為都是不可預測的(打個比方,你在看視頻時,如果想調大音量和快進,那么你是先快進再調大音量或者說先調大音量再快進,程序是無法保證的。它是不可能給你一套說明書:要快進必須先調小音量或者先調小音量再快進)。所以像面向過程那樣按部就班來設計你的代碼,不是很符合實際。

面向對象的特性

封裝

對象把自己的數據(屬性)隱藏起來,外部無論是訪問還是賦值,都必須按照類自己定義規范來。

如,你可以在setter中,規范age的范圍:

繼承

當一個class(類),和一個已經定義好的class有“is-a”關系(如貓 Cat 是動物 Animal,Cat is Animal),那么 Cat 就可以繼承 Animal。Animal 中的屬性,Cat就可以使用了(達到了代碼復用的效果)。

多態

多態是同一個行為具有多個不同表現形式或形態的能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM