一行人回到黃華山的宿舍,坐著聊起了麵向對象編程的學習。
“剛才我是越聽越糊塗了,C語言是麵向過程編程,C++是麵向對象編程,它們之間到底有什麼本質區別?為什麼有了C語言還要弄出個C++語言來,增加我們學習和編程的複雜性?這種麵向對象編程有什麼實質意義?”李慶豐首先把自己心中的疑惑和盤托出。
“我看是不是可以這樣來理解,麵向過程編程就是把軟件需要實現的功能按照實際運行的順序,每一個步驟調用一個實現相關功能的子函數,把從開始到結束的所有步驟按調用順序寫進主函數裏麵,直接調用主函數就可以實現軟件的功能。”黃華山發表自己的見解,“至於麵向對象編程,就是把每一鍾類型的操作編成一個功能模塊,也就是所謂的對象,或者說是類,需要什麼操作就直接調用相應的模塊去實現。然後把這些功能模塊按照操作順序組合成一個應用係統。”
賀俊明跟著講述自己的觀點:“我覺得大概就是這個意思,至於為什麼有了C語言還要創立C++語言,就像以前的電子產品都是用一個個獨立元件組裝在設計好的線路板上,構成一個具有某種功能的產品。
如果要改變產品的功能,就要改變整個電子線路板,更換所有電子元件。而現代的電子產品大多是使用功能模塊,隻要設計科學,采用的線路板都差不多,需要增加或改變功能,選擇相應的功能模塊接入線路板中設計好的相應位置就行了。
可以說,C語言就是使用獨立元件組裝電子產品,C++語言就是使用功能模塊組裝電子產品。”
“用我們每天都要經曆的吃飯來舉例也許更好理解。”章岩笑著說,“吃一頓飯就是一個主函數,我們吃飯的過程是由很多個動作串起來完成的。
比如說,先喝湯,然後吃一口飯,夾一口菜,甚至具體到夾什麼菜,這裏每一個動作都可以看做是一個步驟,在編程中就是調用一個子函數,把我們吃飯的所有動作完整地記錄下來,就完成了我們吃飯的過程。但如果我們要改變吃菜的順序,我們的所有步驟都必須重新調整甚至全部推倒重來。這就是C語言的麵向過程編程,這整個吃飯的過程就是我們的所謂的主函數。
如果我們忽視吃飯過程中每一個具體的動作或者說步驟,而把喝湯、吃飯、吃菜當成是一個個的事件,或者說是對象,也可以說類。那麼,我們描述吃飯的過程就要簡單多了,直接調用相應的事件,而無需理會每一個事件裏麵的具體過程和實現手段。
可以說,對象是由一定的屬性、特征、功能、方法和具體動作組合而成的一個事件。
至於每一次動作吃的是什麼菜,可以把某一個菜作為變量,直接調用吃菜這一事件,就可以很好地進行描述。”
黃華山、李慶豐、賀俊明聽了章岩的比喻,對麵向過程編程和麵向對象編程之間區別就有了清晰的認識。
“兩者的應用範圍也不一樣。”章岩笑著說,“如果要實現簡單的功能,應用麵向過程的編程更有優勢。而要實現複雜的功能,應用麵向對象編程的優勢就要大得多。”