京華大學計算機系大二年級大教室,一個老師正在給學生講授面向對象程序設計的課程。
“對象具有以下的主要特特征:
一是唯一性。每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。
二是抽象性。抽象性是指將具有一致的數據結構或者說是屬性和行為或者說是操作的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
三是繼承性。繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,并加入若干新的內容。
繼承性是面向對象程序設計語言不同于其它語言的最重要的特點,是其他語言所沒有的。
在類層次中,子類只繼承一個父類的數據結構和方法,則稱為單重繼承。
在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。
多重繼承,、b、n、b均僅支持單繼承,注意在多重繼承時,需小心二義性。
在軟件開發中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重用性。
采用繼承性,提供了類的規范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟件的重用性。
四是多態性也可以表述為多形性。多態性是指相同的操作或函數、過程可作用于多種類型的對象上并獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。
多態性允許每個對象以適合自身的方式去響應共同的消息。
多態性增強了軟件的靈活性和重用性。
”
章巖和黃華山、李慶豐、賀俊明等人坐在一起上課,那低沉枯燥的聲音令到他們都昏昏欲睡。
“這樣照本宣科讀教材,倒不如自己回宿舍看書、做練習或者上機編程。”后面那排座椅上有一位同學低聲說。
周邊立即響起一片附和、揶揄的聲音。
“是啊,這樣的講課枯燥無味、催人睡眠。”
“這樣的老師誰不會做?根本不用備課,我去講都比他好!
“教師不是傳道、授業、釋疑、解惑的嗎?怎么變成了先生?”
甚至后面的座位上陸續有人開始離開。
“我們是不是也干脆回去上機編程算了?”李慶豐低聲問章巖、黃華山等人。
“走吧,這樣的催眠課不聽也罷,白白浪費時間。”黃華山小聲地說,隨后站起來,從大課室后門離開。
李慶豐、賀俊明也跟著從后門離開了大課室。章巖也只好悄悄跟在他們后面離開。
一行人回到黃華山的宿舍,坐著聊起了面向對象編程的學習。
“剛才我是越聽越糊涂了,語言是面向過程編程,是面向對象編程,它們之間到底有什么本質區別?為什么有了語言還要弄出個語言來,增加我們學習和編程的復雜性?這種面向對象編程有什么實質意義?”李慶豐首先把自己心中的疑惑和盤托出。
“我看是不是可以這樣來理解,面向過程編程就是把軟件需要實現的功能按照實際運行的順序,每一個步驟調用一個實現相關功能的子函數,把從開始到結束的所有步驟按調用順序寫進主函數里面,直接調用主函數就可以實現軟件的功能。”黃華山發表自己的見解,“至于面向對象編程,就是把每一鐘類型的操作編成一個功能模塊,也就是所謂的對象,或者說是類,需要什么操作就直接調用相應的模塊去實現。然后把這些功能模塊按照操作順序組合成一個應用系統。”
賀俊明跟著講述自己的觀點:“我覺得大概就是這個意思,至于為什么有了語言還要創立語言,就像以前的電子產品都是用一個個獨立元件組裝在設計好的線路板上,構成一個具有某種功能的產品。
如果要改變產品的功能,就要改變整個電子線路板,更換所有電子元件。而現代的電子產品大多是使用功能模塊,只要設計科學,采用的線路板都差不多,需要增加或改變功能,選擇相應的功能模塊接入線路板中設計好的相應位置就行了。
可以說,語言就是使用獨立元件組裝電子產品,語言就是使用功能模塊組裝電子產品!
“用我們每天都要經歷的吃飯來舉例也許更好理解!闭聨r笑著說,“吃一頓飯就是一個主函數,我們吃飯的過程是由很多個動作串起來完成的。
比如說,先喝湯,然后吃一口飯,夾一口菜,甚至具體到夾什么菜,這里每一個動作都可以看做是一個步驟,在編程中就是調用一個子函數,把我們吃飯的所有動作完整地記錄下來,就完成了我們吃飯的過程。但如果我們要改變吃菜的順序,我們的所有步驟都必須重新調整甚至全部推倒重來。這就是語言的面向過程編程,這整個吃飯的過程就是我們的所謂的主函數。
如果我們忽視吃飯過程中每一個具體的動作或者說步驟,而把喝湯、吃飯、吃菜當成是一個個的事件,或者說是對象,也可以說類。那么,我們描述吃飯的過程就要簡單多了,直接調用相應的事件,而無需理會每一個事件里面的具體過程和實現手段。
可以說,對象是由一定的屬性、特征、功能、方法和具體動作組合而成的一個事件。
至于每一次動作吃的是什么菜,可以把某一個菜作為變量,直接調用吃菜這一事件,就可以很好地進行描述。”
黃華山、李慶豐、賀俊明聽了章巖的比喻,對面向過程編程和面向對象編程之間區別就有了清晰的認識。
“兩者的應用范圍也不一樣。”章巖笑著說,“如果要實現簡單的功能,應用面向過程的編程更有優勢。而要實現復雜的功能,應用面向對象編程的優勢就要大得多。”11
【精彩東方文學 www.nuodawy.com】 提供武動乾坤等作品手打文字版最新章節首發,txt電子書格式免費下載歡迎注冊收藏。